目录

AB测试方案

概述

利用 uuid 将用户切分为多个 bucket,每个 bucket 分配不同的策略,非法 id 随机分配,并且添加配置白名单用于测试,可支持不同节点的配置和灰度上线和回滚。

/ab%E6%B5%8B%E8%AF%95%E6%96%B9%E6%A1%88/img.jpg

实验的写入和读取

提供前端页面负责给算法同学写入算法 id,节点和实验比例信息,后端基于 ZooKeeper 提供查询和写入的接口,Engine 启动读取 ZooKeeper 节点信息,并且监听相应 ZK 节点的实验信息的更改,可以实现热更新。

实现逻辑的介绍

一般实验

根据实验配置信息,将配置的实验数量,分配在100个 bucket 中,假设某用户的 id 为 runzhliu,计算其 id 值的哈希值,取模,再到这100个 bucket 中获得其实验配置信息(幂等),该用户会按照实验配置的百分比,选中相应的实验配置信息。

/ab%E6%B5%8B%E8%AF%95%E6%96%B9%E6%A1%88/img2.jpg

人群实验

当实验场景只针对特定人群特征做实验,比如该实验只是为了观察男性用户的曝光点击率/转化率。实验配置中写入人群实验的信息,Engine 请求的 uuid 中先判断是否人群实验需要的对象,是的话直接走入人群实验的策略,否则依然按照流量进行切分。

/ab%E6%B5%8B%E8%AF%95%E6%96%B9%E6%A1%88/img1.jpg

白名单

设置白名单只落入指定实验策略,方便算法/产品,线上/线下不同场景进行测试。其余用户均通过流量来切分。

其他

AbTest 服务初始化读取配置信息到内存中,配置前台修改实验信息可以热更新 AbTest 内存中的数据,Engine 请求按照 uuid 分配实验策略。AbTest 提供增加实验和回滚实验两种接口,用增加/回滚操作时间戳来控制实验版本。

如果打点数据正常,在前端收集数据之后,做成报表后,不同实验策略的用户应该是符合实验配置信息预设的比例的。如果出现异常,需要仔细排查是 AbTest 流量切分还是打点数据的问题。

总结

本文主要介绍了如何通过 uuid 来确定做 AB 实验的人群,并且提供了架构实现的技术方案。

警告
本文最后更新于 2017年3月3日,文中内容可能已过时,请谨慎参考。