爱情婚姻-男人女人-感悟生活-人生智慧

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 169|回复: 2
打印 上一主题 下一主题

技术揭秘大众点评大规模并行AB测试框架Gemini

[复制链接]

4万

主题

0

好友

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

  摘要:互联网行业朝夕万变,产品和决策都需要快速得到用户反馈的数据去迭代更新,所以AB测试在互联网公司中就显得非常重要,日前,大众点评负责AB测试框架的架构师樊聪分享了该公司此系统的原理、架构和设计思。
  【编者按】众所周知,互联网行业朝夕万变,产品和决策都需要快速得到用户反馈的数据去迭代更新,所以AB测试在互联网公司中就显得非常重要,是data-drivenproduct的基础,微软、Google、Amazon都在这方面做了大量研究和工作,有兴趣的可以参考这个网站,有大量各个公司如何做AB实验的文章和资料。日前,大众点评数据中心研发经理樊聪(@卡斯n)给分享了点评的AB测试框架(codenameGemini)和平台搭建的实战经验。
  以下为正文:
  我加入点评的负责的第一个项目就是点评的AB测试框架(codenameGemini)和平台的搭建,目前这个系统已经在搜索、PC主站、广告等业务广泛使用,给业务部门更好的做算法优化和产品设计提供了数据支持的决策方法。下面给大家介绍一下这个系统的原理、架构和设计思。
  两套代码:顾名思义,是把control(基准代码)和treatment(实验代码)分别部署在不同的机器,通过统一的router分发流量。百度和google使用的是这套架构的好处是对业务侵入性小,灰度发布和正式上线都非常方便。但要求就是开发流程是分支开发模式且代码部署需要和分流由可用统一配置和联动。
  一套代码:业务逻辑中把control和treatment的分支都写好,通过在业务服务器里面嵌入AB测试框架的client,判断流量是该走control还是treatment。这种思的好处是对外部系统依赖小,全部逻辑都在业务服务器完成,适合主干开发的模式,但是对业务侵入大,灰度发布不方便,代码还有整洁度下降。微软和amazon是使用这套架构。
  在详细介绍Gemini几个模块的设计之前,先需要介绍框架的分层模型的概念。我们当时的需求一个是业务和功能会包含多个实验并向的进行,比如商户搜索页:可能有主站的在进行页面改版,搜索的在优化搜索排序,推荐的在优化个性化推荐。第二个是流量能够按照一些属性切割,业务组可以独占100%的流量。基于这两个需求,我们参考了google在2010年KDD上公布的自己的分层实验框架。Google提出将实验空间横向和纵向进行划分,纵向上流量可以进入独占实验区域或者是并行实验区域。在独占实验区域,只有一层,实验可以独享流量且不受其他实验的干扰。在分层区域,不同的应用属于不同layer,每个应用内部,又可以划分为多层,层与层之间相互不影响。流量可以横向经过多层,每一层可有多个实验。流量在每一层都会被重新打散。
  分层实验模型示意图
  我们将Google的思想进行了一定程度的简化:
  横向上分为多层,每一层含一个bucket集合(默认为100),流量按照其cookie中的guid和layerid被哈希到某一个bucket中,并绑定该实验的参数取值。这个策略的本质所在就是在hash的时候考虑了两个变量:guid和layerid,从而在不同层之间实现了流量的重新打散,层与层之间实验的正交性。
  纵向上,按照流量的属性:如地域,用户特征等把空间划分为segment,这些segment被某个实验独占,从而可以实现多个实验在不同流量域进行且占有该域下面的所有流量。变形可以用来进行灰度发布:比如我们团购优化就是现在某些城市进行实验,再扩展到全国。
  这部分模块的另外一个功能是把实验的一些标识信息打到日志中,针对不同的场景,我们提供后端日志打印和cookie回传到前端,然后前端打印的两种方式。
  数据中心的数据处理:
  实验启动后,效果如何就是数据中心的内容了。这里主要包含几个阶段:日志的传输,解析,报表和dashboard的展现。Gemini结合数据模型内置了几个常用的指标:PV,UV,CTR等,用户可以直接看到相应的AB两组的效果,对于其他指标,目前还是需要用户自行配制报表,或者通过hive写脚本统计。另外现在点评已经实现了日志的实时传输,但对流量数据的计算和ETL还是T+1的,如果用户要实时的效果,需要自己编写基于storm的统计应用进行分析。另外提一点,我们还内设了计算置信区间(pvalue)的功能,帮助实验的同学更好的根据实验的流量大小和实验时间长短,判断当前实验效果的可信程度。
  静态缓存服务器的问题:
  另外一个比较有意思的一点是我们在静态缓存服务器上的处理,因为点评在一些业务场景中大量使用了vanish静态缓存服务器,会使得一些流量无法透传到后端,用户得不到正确的AB版本,我们的解决方案是植入一个vanish的脚本,通过URL+cookie判断和存储control和treatment的不同版本,简单来说:当用户第一次请求,如果判断是要做实验的,那么在header中设置cache-control=no-cache,并回写cookie;如果不是要做实验的,不做任何事情,当用户第二次请求,如果没有含有cookie,那么直接命中vanish。如果有cookie,再穿一次后端,后端不设cache-control=no-cache,这个页面被缓存。下次再来请求就可以命中了。
  除了上述主要模块外,Gemini上线后,我们也根据反馈在易用性和功能性上进行了优化和升级,包括:
  克隆实验和在线修改实验配置:在实验正式上线前,开发同学往往是先在测试和ppe中配置好实验,并进行正确性验证,在确认没有问题后再发布到线上,如果每次测试到发布都要重新配置实验,会显得比较繁琐,特别是对于一些参数特别多的实验。针对这个问题,我们开发了实验克隆的功能,实现了在不同中实验的同步,提高了系统的易用性。同样的,实验上线后,经常需要对实验进行一些微调(某些情况下,可以视为一个新实验),我们配置管理是基于zookeeper的推送,在客户端内存中保留一份配置的cache。这样我们就可以方便的在客户端设置一个回调函数,当zk中配置修改后,更新内存中的配置即可实现实验的在线修改,避免了每次都重新上线一个实验的过程。
  自定义实验条件:在某些业务中,实验框架是位于service层,流量进入后,已经被包装了其他的属性,而这些属性往往还需要作为实验分流的条件。为了支持这个需求,Gemini加入了一个自定义实验条件的功能,可以通过key/value对的形式在实验平台上添加定制的实验条件,分流时会统一考虑进分流策略。
回复

使用道具 举报

无效楼层,该帖已经被删除
无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 立即注册

性用品

GMT+8, 2024-12-28 02:08 , Processed in 0.094506 second(s), 20 queries .

网站地图

回顶部

性生活中绝对不能犯的错 市场上卖的延时喷剂好使吗? 女人床上“功力”的国际标准 你们的做爱够不够默契? 让性爱更疯狂的“倒转”式性爱体位
女人一夜能做爱几次? 性爱体位:最能提高女人快感的性爱体位 女人要调情 男人要速度 如何阻止性的提前衰老 女人生理安全期该怎么计算
教你选择合适的安全套 带香味或颜色易引起过敏 性爱误区:不要模仿情色片中各种新奇的方式作爱 透视女性性高潮来源——阴蒂 站在女人的角度来看性高潮 高矮悬殊也可以让性爱更加销魂
根据专家介绍女性成人用品大全 爱挤乳沟的女性是否影响健康 避孕:即使戴好安全套也会怀孕的避孕手段 男性生理:专家说射精次数多 健康吃不消 揭示男人小弟弟的一些有趣事实
http://anqing.aizse.com/thread-35482-1-1.html
http://anshun.aizse.com/thread-28239-1-1.html
http://anyang.aizse.com/thread-24951-1-1.html
http://anshan.aizse.com/thread-28178-1-1.html
http://bbs.aizse.com/thread-38775-1-1.html
http://alashan.aizse.com/thread-35482-1-1.html
http://ankang.aizse.com/thread-28239-1-1.html
http://bangbu.aizse.com/thread-24951-1-1.html
http://baiyin.aizse.com/thread-28178-1-1.html
http://baise.aizse.com/thread-38775-1-1.html
http://bijie.aizse.com/thread-13105-1-1.html
http://baoding.aizse.com/thread-18421-1-1.html
http://baishan.aizse.com/thread-33045-1-1.html
http://baicheng.aizse.com/thread-33245-1-1.html
http://benxi.aizse.com/thread-7282-1-1.html
http://baotou.aizse.com/thread-31032-1-1.html
http://bayannaoer.aizse.com/thread-26112-1-1.html
http://binzhou.aizse.com/thread-2785-1-1.html
http://baoji.aizse.com/thread-24764-1-1.html
http://bazhong.aizse.com/thread-341-1-1.html
http://bayinguoleng.aizse.com/thread-3071-1-1.html
http://boertala.aizse.com/thread-10670-1-1.html
http://baoshan.aizse.com/thread-4275-1-1.html
http://chaozhou.aizse.com/thread-39365-1-1.html