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