美团点评效果广告实验配置平台的设计与实现
总第373篇
2019年 第51篇
一. 背景
二. 方案设计
目标
支持各类算法实验场景,可灵活支持后续的功能扩展。
实验配置、使用、效果回收等全链路对使用者透明,降低解释成本。
提供不同流量下应用参数的配置,降低参数解析成本。
支持版本控制,可快速回滚。
提供简洁、易用的操作界面。
设计思路
实验分类
根据实验种类分类
水平实验:类似于Overlapping Layer中的实验,是属于同个“层”的实验,实验是互斥的,在同一“层”上实验可以理解为是同一种实验,例如:关键词“层”表示这一层的实验都是关键词相关的,该层上存在实验H1和H2,那么流量绝对不会同时命中H1和H2。
垂直实验:类似于Non-overlapping Layer中的实验,分布于不同“层”之间,实验是不互斥的,例如在关键词“层”和CTR“层”上在相同的分桶上配置了实验V1和V2,那么流量可以同时命中V1和V2。
条件实验:表示进入某“层”的实验需要满足某些条件,水平实验和垂直实验都可以是条件实验。
根据流量类别分类
普通实验:最基本的实验,根据流量类别进行配置。
引用实验:流量分类是整个配置中心基础,但实际上存在一些实验是跨流量了,而引用实验则可以配置在不同的流量种类中。
全局实验:可以理解为特殊的引用实验,全局实验在所有流量上都生效。
架构图
Web层:提供平台UI,负责应用参数配置、实验配置、实验效果查看以及其他。
服务层:提供权限控制、实验管理、拉取实验效果等功能。
存储层:主要是数据存储功能。
业务层:业务层结合SDK完成获取实验参数和获取应用参数的功能。
三. 模型设计
1. 分流模型
实验模型
App:表示一个应用,不同的应用对应的实验配置完全不同,首先从App上进行区分可以更加明确实验的归属。
Scene:表示某一类流量的集合,例如:搜索、美食筛选、到综筛选等,在这些流量上配置的实验互不干扰。
Layer:表示某一层(种)实验的集合。例如可以将在matching上做的实验放入Matching Layer中。流量命中时依次进入每个Layer获取实验配置参数,此时的Layer更像一个抽象概念,与具体的业务或者逻辑相关。
条件Layer:是一种更加精细的流量控制方式,表示某一流量的某个或者某几个参数在满足一定条件下才会进行实验。进一步说就是相同Scene下,某一流量的参数A满足条件一时,采用一种实验配置策略;满足条件二时,采用另一种实验配置策略,那可以分为两层,如图3所示的Layer_3和Layer_4。例如:某流量需要在城市北京单独做实验,这种情况下,可以分为参数相同但是先决条件(即城市)互斥的两个Layer。此时的Layer在抽象的基础上更加的具体化。
Exp:表示具体实验,包括实验的分桶、实验参数、是否为垂直流量等等。
图3 实验模型
水平、垂直分流模型
仅包含水平实验 :最基础的实验需求,全部实验独占一个Layer,每个实验覆盖若干个桶,例如图4中的Layer_1,将流量分为10份,包含三个实验,这三个实验分别占用3、3、4份流量。
同时包含水平、垂直实验:一个Layer中同时包含垂直、水平两种类型的实验。例如图4中的Layer_2和Layer_3,将最后的4份流量用来做垂直实验,包含两个垂直实验,分别是Exp_6和Exp_7。
图4 水平、垂直分流模型
2. 实验命中模型
名词解释
Bucket | 分桶 |
流量正交 | 流量在不同Layer之间的分桶是完全相互独立的 |
Hash优先级 | 表示计算Hash值的先后顺序,用于垂直和水平实验切分 |
Hash因子 | 分桶的唯一标识 |
Hash串 | 计算Hash的字符串 |
取模数 | Hash值计算之后的除数 |
Hash优先级:在实验命中过程中,第一次Hash首先判断命中垂直流量,如果没有命中,则进行第二次Hash再判断水平流量。 Hash因子:目前美团侧一般情况下为uuid,点评侧为dpid。
垂直流量Hash串:Hash因子+scene_id。
水平流量Hash串:Hash因子+scene_id+layer_id+layer_name。
取模数:在Hash过程中,垂直流量按照总Bucket(默认取值100)取模;水平流量按照总Bucket数减去垂直流量Bucket数取模。这样的命中模型能保证无论是垂直的Bucket,还是水平的Bucket都是全局的1%。
实例解析
当一个请求过来时,命中顺序按照Hash优先级为先垂直流量后水平流量。
首先利用垂直流量Hash串进行Hash并取模得到一个hashNum,如果命中了50~99,就会认为命中了垂直流量,直接返回V_Exp_1、V_Exp_2或者未命中。
如果没有命中50~99,则认为命中了水平流量。再利用水平Hash因子进行Hash并取模得到一个hashNum,根据配置直接返回Exp_1、Exp_2或者未命中。
图6 实验命中流程
应用参数模型
全局参数:所有流量都能拿到的参数。
同类型流量参数:相同类型的流量能拿到的参数。
图7 应用参数模型
值得注意的是,应用参数的两个层级以及之前提到的实验参数可能出现重复的情况,在出现重复的情况下参数的优先级为:实验参数>同类型流量参数>全局参数。
3. 回滚模型
首先在配置发布时,会将所有修改的表名、列名、列类型、列新旧值、修改类型存入表中。
回滚时获取上次发布的所有修改的表名、列名、列类型、列新旧值、修改类型,反向操作数据库,达到回滚的目的。
图8 回滚模型
列名 | 数据类型 | 说明 |
---|---|---|
operation_id | BIGINT | 表示配置发布的ID |
table_name | VARCHAR | 修改的数据表名 |
operation_step | INT | 修改的数据表的顺序 |
operation_type | INT | 修改类型,包括增加、修改、删除 |
column_name | VARCHAR | 列名 |
old_value | TEXT | 旧值 |
new_value | TEXT | 新值 |
value_type | INT | 值类型 |
四. AB实验实时效果
五. 总结
配合完成算法工程架构调整、更新流大版本升级。
算法各方向之间可以任意做垂直实验,满足算法灵活、快速迭代。
具备配置审核功能,保证配置发布的正确性。
六. 作者简介
---------- END ----------
招聘信息
美团点评效果广告引擎团队,招募出色的后端开发工程师。我们希望您:具有扎实的后端服务开发功底,能够熟练使用Java或C++开发语言,致力于互联网技术领域。
有兴趣的同学,欢迎投递简历至:tech@meituan.com(邮件标题注明:美团点评效果广告引擎团队)