转载

阿里妈妈大规模在线分层实验实践

引言

当前对于在线服务系统中更多的是采用搭建多个可服务集群,物理上对流量进行隔离实验的方式来进行AB-test。对于物理隔离搭建多个集群作实验,则存在部署比较慢。利用物理机器进行切分流量作实验的典型架构如下图。

阿里妈妈大规模在线分层实验实践

QueryRewrite:改写用户搜索词以期望得到更好的查询结果。

Matching:根据用户搜索词,召回最符合用户意图的那些推广。

Ranking:确定推广的输出顺序,需要兼顾用户体验和搜索平台的收益。

这种架构下,做实验优点是,代码分为了基线和实验代码,实验代码对业务的侵入性比较小。实验田的流量和基线的流量从物理上严格的分开,严格的控制了实验对业务的影响。

但是缺点也很明显,主要有如下几点。

  • 增加了运维的复杂性,运维需要维护多套环境。
  • 每套环境接入的流量都是由单个实验田集群的物理机器数量固定上限的,不能灵活的验证流量扩大的情景,导致小流量上实验效果很好的算法,在基线上有可能无法收到好的效果。
  • 实验的流量有限,导致实验的数量变少,而增大实验流量则又会影响业务基线。

在总结现有的各种实验机制的基础上,根据我们的应用场景实践出了一种高效便捷且充分利用流量同时进行多个实验的方法,同时该方法也能很容易的支持系统的灰度发布。其优点如下。

  1. 提高并发:实现多实验并行迭代,加快迭代的速度。
  2. 公平对比:做到实验效果公平、准确对比评估,即时停止不符预期的实验;随时扩大效果良好的实验的流量。
  3. 降低门槛:提供实验管理工具,除算法同学,其他有实验需求的同学,如产品、运营、前端等都可以独立申请发布实验。
  4. 建立闭环:从想法、实验前线下评估、发布实验、实验进行、实验评估、最后实验总结,确保实验结果的质量。

系统整体架构

整个系统的架构图如下,共可分为三个部分。

  1. 实验配置文件生成和管理系统。给用户提供便捷的UI操作界面,方便用户配置实验并进行发布。同时支持发布快速的回滚到历史版本。
  2. 在线服务系统。根据实验配置文件,去进行分流处理,给各个实验分配相应的流量。实验分流的模块以库的方式接入到到在线服务系统中,在系统的流量入口处调用此分流库,对请求进行分流处理。后续会详细介绍分流的原理和作实验的方法。
  3. 实验结果分析评估系统。根据在线服务系统记录的日志,去分析各个实验的效果,根据实验的效果,再通过实验管理系统去调整各个实验流量的占比。

    阿里妈妈大规模在线分层实验实践

各模块介绍

1. 实验配置管理发布系统

(1) 实验场景。在广告系统中,实验通常是针对某一批广告位或者是某些页面进行的。因此我们第一步先针对PID(标记广告的位置信息)或页面来对流量进行分类。相应的web操作页面上我们提供了配置实验场景的UI界面,用户可以在这个界面上新建一个场景并且指定符合某些PID要求或者URL要求的请求进入相应的实验场景。反应在UI界面上如图所示。

(点击放大图像)

阿里妈妈大规模在线分层实验实践

在此页面上,用户可以方便的添加一个新的场景,并指定该场景的入口PID,入口的PID可以设定多个。

(2) 实验分层和流量切分。进入实验场景后,通过分多层来达到流量的复用。每一层的流量均是流入这个场景的流量的一个全集。同时每一层的流量都可以按用户指定的切分标记进行流量的分桶。

每一层可以看成是多个实验的集合,实验分层的原则。

a. 对于相互之间没有影响的实验可以分到不同层。

b. 相互之间有影响的实验分到同一层。

由于互不影响的实验被分配到了不同的层,使得互不影响的实验复用了相同的流量。相互之间有影响的实验分到同一层则保证了,同一请求不会去作两个互斥的实验。

(点击放大图像)

阿里妈妈大规模在线分层实验实践

2. 在线服务系统

Tesla是以一个lib库的方式接入在线服务系统的。没有选择做成一个服务的形式,主要考虑到接入简单,不增加系统复杂性和运维的工作量。

(1) 分流规则。针对一层,用户可以指定流量切分的规则。根据用户指定的切分标记值取hash,hash值对100取模再加1。每个实验占了指定数值范围的桶。这样便算出了该次请求应当进行的实验。这里需要注意的是选取的hash函数计算结果要求没有偏差,我们在数十种hash函数中选取了一个最优的hash函数,将偏差控制在实验可以忽略的范围。

假如每一层均使用这样的切分规则,会导致在不同层做实验的用户选用相同的切分规则时请求会始终落入相同的桶。由于不同层的实验之间是毫无关系,为了保证实验的效果的绝对可信。需要做到不同层的流量能做到正交。为了达到这个目的我们引入了layerID来作为离散因子。由于每一层的layerID是固定的,也能保证同一请求两次访问能落到同一个实验。从而不会造成同一用户多次访问返回结果不一致的困惑,如图所示。

阿里妈妈大规模在线分层实验实践

(2) 实验参数的处理。之前讲述了如何决定一次请求去作哪些实验的。这一部分介绍具体一个实验的构成以及系统如何执行实验的。一个实验就是一堆抽象参数集合。每个请求被分配作某个实验之后,便会将该实验的抽象参数集合,作为请求的一部分传递至在线服务系统的各个处理模块。

对于系统而言,可以根据参数的具体数值来决定实验的参数该设置何值。这里需要注意的是为了保证系统的健壮性,如果取不到某个实验参数的数值,系统应该设置一个抄底的实验值。

(3) 实验发布。如果某个实验的效果非常良好,用户肯定希望可以动态的调整该实验的流量占比,从而迅速的得到收益并且在大流量上验证该实验的有效性。一旦认为该实验的效果非常良好便可以在全流量上线。这时我们需要删除掉该实验,把该实验的参数作用于全部的流量。这种情况我们是通过在每个场景中设置一个初始化层来解决这个问题的。

每个场景的一层我们设定我初始化层,该层会初始化需要作用全流量的所有参数。这样一旦某个实验需要在全流量上线时。我们便删除该实验,将该实验的参数移到初始化层中的实验。这样便可以避免实验数量不断膨胀,层数不断增加的问题。同时也达到了动态在全流量发布某个实验测量的目的。

3. 日志分析展示系统

实验效果的统计无疑是系统中最为重要的一个环节。对于简单的AB测试,或者物理田的实验方法,实验数据的统计相对比较容易。而对于这种复用流量,在一次请求上作多个实验的方法,统计实验效果相对要复杂一些。这里介绍一种相对简单的实验统计和分析方法。每个实验均有一个唯一的实验ID。对于一次请求,调用分流库后,在返回所有实验参数的同时,会返回一个字符串,该字符串将所有作用于该次请求的实验ID以下划线连接起来,例如Exp1_Exp3_Exp6_Exp8_Exp9。请求同样会把这个字符串作为自己的一部分,携带传输至系统的各个模块。在记录系统日志时将该字符串一并记录下来。

这样在日志分析处理模块只需要以“_”为分割符把该字符串进行分割。然后得到多个实验ID,再利用storm等流式实时处理系统去实时统计分析各个实验的效果。根据实验效果我们可以利用实验的发布系统动态的调整流量。从而达到了文中提出的一种良性的闭环反馈。

应用实例

下面以一个简单的广告引擎系统接入上述平台的例子来具体说明一下上述的方法。该系统共有两个实验点(queryRewrite和rank),因此可以分为两层实验。下面以一次请求的处理流程来简单说明该引擎系统工作的原理。

阿里妈妈大规模在线分层实验实践

如上图所示,在后端引擎接入实验平台的库(tesla)以后,当引擎接收到请求后,首先请求tesla取得对应的实验信息,然后依次将实验信息透传给Query Rewrite和Rank,对于Query Rewrite和Rank各取所需实验参数,最后将bucketID记录到投放日志对应的字段中,用于实验效果统计用。

下图是整个实验的配置文件的示意图:

(点击放大图像)

阿里妈妈大规模在线分层实验实践

整个引擎的实验根据需要分为了PC和无线两种场景,针对这两种场景分别进行策略的优化和调整。根据算法实验的需要,在两种场景下均分为了两层(QR和Rank层,QR和rank的含义参见前文的解释)。每一层中均包含了三个实验如上图示。每个实验均是一些实验参数的集合,例如,exp 100包含的参数有qr_plan=5,qr_weight=3。Exp 103包含的参数为rank_level=2,rank_stragety=9。

在这样的一个配置文件的作用下,一个用户请求发过来之后,如果根据acookie分流计算得出此请求恰好落入PC场景的exp 100和exp 103这两个实验。则返回的bucketID应当为100_103,参数集合为qr_plan=5,qr_weight=3,rank_level=2,rank_stragety=9。BucketID可以记录在日志中,后续进行日志统计和分析使用。日志统计分析时按下划线把bucketID切割开,然后可以用storm进行实时统计各个实验的情况,也可以用hadoop进行离线的日志分析处理。对于在线引擎,可以在不同的实验点根据实验参数的不同值来决定使用哪种策略和模型参数调整。

总结

本文参考现有的关于在线服务系统实验方法已有的论文基础上,结合广告系统的特点,实践出了一套有效的可以复用流量支持并行实验的方法。同时该方法也可以解决灰度发布的问题。该套系统在阿里妈妈所有的业务线应用,极大的提高实验效率。之后该实验平台又应用于蚂蚁金服和B2B的多个业务线。

未来工作

对于未来,计划将实验配置系统和实时实验结果分析和离线日志分析系统进行更好的整合。给实验用户带来一站式服务的良好体验。使得配置实验,发布生效,实时观察实验结果在几分钟之内即可完成。同时也在探索将这套系统平台开发给淘宝商家,商家便可以使用这套系统清楚的看到两种不同文案设计带来的点击率以及成交率的差别,从而方便商家更好的设计自己店面图片和文字。

致谢

Tesla平台是多个业务线团队通力合作,共同努力改进的成果。Tesla平台在开发和应用的过程中得到了多位同事的帮助和支持。包括但不限于如下同事均对Tesla平台作出了巨大的贡献。

敖丙参与了Tesla平台首版开发,并将其应用到了淘客业务线。

宏真开发了Tesla平台配置文件管理系统极大的优化了用户体验,中玄开发了java和js客户端的代码。极大完善了Tesla平台的易用性。

凌丘,东垣,沐潇,广传,墨方,怀人,兵乙,敖广,大雨,沥泉,龙宿,萧亮,萧明,福昌,存希,见深,笑楼,韩萱,婉灵,姸芳等人在阿里妈妈各个业务线接入Tesla平台的过程付出了极大努力和工作。

钩吻,闸北,三馀,杰铭,子景,玄乙,王沈等人在Tesla平台在蚂蚁金服集团的应用中所付出的辛苦工作。

特别感谢拓宇和楚巍对Tesla平台提出很多前瞻性建议,以及对Tesla平台应用的支持肯定和帮助。

感谢江狼,超明,靖世,黑梦等在Tesla平台推广中给予的大力的支持。

参考文献

【1】 Diane Tang, Ashish Agarwal, Deirdre O’Brien, Mike Meyer Overlapping Experiment Infrastructure: More, Better, Faster Experimentation KDD’10, July 25-28, 2010

【2】 Microsoft. Microsoft’s experimentation platform. http://exp-platform.com/default.aspx .

作者简介

刘晏辰(花名:少衡),阿里妈妈技术专家,2006年北航理学院硕士,14年加入阿里后从事广告系统实验平台建设和devops方面的工作,之前曾在英特尔、百度、盛大从事Linux kernel、分布式系统相关方面的工作。擅长领域有单机/分布式存储,云计算系统的设计和运维开发。

感谢陈兴璐对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们。

原文  http://www.infoq.com/cn/articles/alimama-large-scale-online-hierarchical-experimental
正文到此结束
Loading...