1. 初步
1.1 名词解释
- 实验位: 实施AB测试的客户端位置,由客户端页面和模块组合而成,比如:首页--猜你喜欢。
- 策略: 每个实验内部的实验方法,由具体业务生成控制,对应到具体一个业务功能。
- 分桶:根据用户设备号取模,得到0~99。根据实验需求分配的流量比例成为分桶。
- 实验owner: 发起AB测试实验负责人。
- 模型:业务的算法模型。
1.2 功能需求
- 保留原始用户,能够支持旧版本的无缝切换,将原有B版用户保留N%,作为原始对照组。
- 全局流量划分,能够支持包括灰度测试、指定流量规模等功能。
- 业务流量划分,能够支持不同实验内部流量指派、划分。
- 实验状态变更,能够支持不同位置的并行实验的开始、结束。
- 实验效果评估,能够支持不同实验效果的统计分析。
2.架构设计
3.实现
AB测试平台属于基础架构,为了保证整体服务性能,减少系统间调用。我们遵循了统一架构,分别实现的服务思想。通过对核心代码的多语言实现,以及数据底层统一,来保证系统的松耦合和可插拔性。
3.1 AB测试后台
允许不同用户管理、跟踪自己的实验运行情况以及其它可能相互影响的实验。参见下图糖豆的AB测试后台。
3.2 系统调用流程
策略分配流量
全局流量控制,局部流量控制
3.3 数据表结构
-
实验表
id | source | client_module | offset | config | addtime |
---|---|---|---|---|---|
001001 | 首页 | 猜你喜欢 | 20 | diu | 2016-12-25 15:50:32 |
001002 | 首页 | 拍摄 | 1 | random | 2017-04-25 15:50:32 |
002001 | 搜索页 | 框搜 | 20 | diu | 2017-04-25 15:50:32 |
-
策略表
id | name | position_id | code | class_name | directory | describe | addtime |
---|---|---|---|---|---|---|---|
001 | old | 001001 | old | empty | / | 原始对照组 | 2016-12-25 15:50:32 |
002 | noltr | 001001 | noltr | NoLTRRecommender | /noltr/ | 无LTR算法组 | 2017-04-18 15:50:32 |
003 | ltr | 001001 | ltr | LTRRecommender | /ltr/ | LTR算法组 | 2017-04-25 15:50:32 |
-
分桶表
id | position_id | strategy_id | location_id | platform | flow | sort | addtime |
---|---|---|---|---|---|---|---|
001 | 001001 | 001 | 全国 | app | 90~100 | 1 | 2016-12-25 15:50:32 |
002 | 001001 | 002 | 全国 | app | 40~80 | 2 | 2017-04-25 15:50:32 |
003 | 001001 | 003 | 全国 | app | 0~40 | 3 | 2017-04-18 15:50:32 |
4. BI统计
- 实验平台后台数据会同步到统计平台,作为字典表。
- 客户端需要增加上报策略id,修改abtag上报内容。
- BI平台基于以上两者构建实验主题的数据集市,提供数据分析和可视化。
参考文献:
- Overlapping Experiment Infrastructure: More, Better, Faster Experimentation
https://research.google.com/pubs/pub36500.html - It’s All A/Bout Testing: The Netflix Experimentation Platform
https://medium.com/netflix-techblog/its-all-a-bout-testing-the-netflix-experimentation-platform-4e1ca458c15