来进行AB测试的实现:AB测试平台的工程实现( 五 )


b AB测试服务下发同一个接口给AB测试SDK,但是不同的分组对应的参数不同,当用户请求时,根据用户所在的分组,选择不同的参数来访问该接口(该接口会根据不同的参数获取不同的数据)。
 来进行AB测试的实现:AB测试平台的工程实现
文章图片
图4:通过提供AB测试SDK来进行AB测试的实现方案
该方案的好处是通过统一的SDK来对接AB分组服务,前端业务代码简单调用SDK的方法就可以,开发效率高。不好的点是,如果AB测试业务有调整,需要升级SDK,较麻烦(现在很多APP具备通过插件的方式做升级,这时对SDK的修改就不要发版本了,相对会更加灵活)。同时,如果公司有iOS、Android、PC等多个业务的话,需要开发多套SDK,维护成本较大。
方案2:在后端业务层增加相关组件来做AB测试该方案通过在后端接口层增加相关组件来处理AB测试需求, 该组件通过与AB测试交互来做AB测试, 采用该方式的公司有Google,百度,大众点评等。其中又可以分为两类:
第一类:像Google,百度,AB两组对比测试业务分别部署在不同的服务器,通过构建一层统一的router来分发流量。具体架构见下面图5。通过后端统一Router模块来处理AB测试相关请求。
具体AB测试服务与业务接口的交互实现方式跟方案1类似,这里不再说明。
 来进行AB测试的实现:AB测试平台的工程实现
文章图片
图5:通过后端统一Router来进行AB测试的实现方案
该方案的优点是模块化,router解决所有与AB测试相关问题,对AB测试业务做调整不需要前端版本升级,只需要升级后端服务即可。但是Router层是整个AB测试的核心,需要具备高并发高可用的能力,否则出现问题会影响AB测试能力的发挥。
第二类:像大众点评,将AB两组对比测试业务实现逻辑写在同一个业务接口,全部业务逻辑在业务服务器完成。具体架构见下面图6。通过构建AB lib(比如构建一个处理所有AB测试业务逻辑的jar包)模块来处理AB测试相关业务。
当用户使用产品触发做AB测试的功能时,前端调用统一的接口,接口层通过AB lib跟AB测试服务交互获取该请求对应的分组,并从对应的数据存储中获取数据,组装成合适的格式返回给用户。
 来进行AB测试的实现:AB测试平台的工程实现
文章图片
图6:通过业务端整合AB测试lib来进行AB测试的实现方案
该方案当AB测试调整时也不需要前端做升级, 只需要修改AB lib包就可以了。该方案最大的缺点是如果公司采用多种开发语言做业务接口服务,需要每种开发语言维护一套AB lib库,维护成本较高。另外AB测试逻辑调整需要升级AB lib包时,需要对所有线上接口做升级,明显增加了风险。同时,在接口服务中整合AB lib与AB测试服务交互,增加了接口服务的复杂度,如果AB测试服务有问题,可能会影响接口功能或者性能。
方案3:通过在算法业务层跟AB测试服务交互来实现AB测试能力,不需要前端和接口层做任何处理该方案通过在具体业务中整合AB测试能力来做AB测试,我们团队采用该方案。该方案比较适合算法类(推荐算法、搜索算法、精准投放、精准运营等)相关业务做AB测试。具体架构见下面图7。
 来进行AB测试的实现:AB测试平台的工程实现
文章图片
图7:通过算法业务层来进行AB测试的实现方案
需要做AB测试的业务模块通过调用AB测试服务来实现AB测试能力,具体AB测试的实现放在业务中实现(如在推荐推断时,推荐程序在为用户计算推荐结果过程中访问AB测试服务,确定用户对应的分组)。当然,可以将这些处理AB测试的操作或者模块封装成Jar包,方便各个业务方共用,提升AB测试落地效率。
该方案的好处是(拿推荐来说)前端和接口层不做任何处理,只需在业务中实现AB测试能力,并且不需要根据AB两组分别对全量用户计算推荐结果,也不需要为全量用户分别存储AB两个算法的推荐结果,大大减少计算时间和存储开销。


推荐阅读