开发者社区> 小扑> 正文

ABtest在OpenSearch上的设计与实现

简介:
+关注继续查看

为什么要做ABtest

OpenSearch是为用户提供数据搜索解决方案的平台,目前已经通过阿里云平台为集团内外大量客户提供服务。为了更好地提供搜索服务,OpenSearch打算把集团内部已经成熟的算法功能输出给外部客户使用,如类目预测、查询分析等。但是在我们开放类目预测功能之后却发现鲜少有人使用,调研了一些相关客户后,发现原因是无法证明使用了类目预测功能之后真的能提升搜索服务效果,以及提升了多少,因此客户不敢贸然使用,于是ABtest功能应运而生。

实现方案调研

什么是ABtest

ABtest是指为了达成某一优化目标,提出两种方案A和B,让一部分用户使用A方案,另一部分用户使用B方案,然后通过比较这两部分用户的行为数据来说明哪个方案更优的实验方法。当然真实的实验场景会更复杂,包含更多的方案做比较。此外,为了为有限流量的用户提供同时做多个实验的能力,ABtest实验还可以分层,不同层共享100%的流量,层内实验按比例切分流量并做比较。

已有的实现

通过调研,我们发现公司内部已有ABtest的实现方案,即Hyperspace。它提供RESTful API以编辑ABtest实验,将配置存入DB并同步到diamond中,用户可以使用C++ SDK从diamond同步数据并对流量分实验。这些功能基本满足OpenSearch对ABtest功能的需求,同时,Hyperspace本身的积淀也能让OpenSearch的ABtest功能少走很多弯路,因此我们决定采用Hyperspace作为ABtest的实现方案。

OpenSearch上的ABtest

产品设计

实验编辑

考虑到OpenSearch的很多用户没有使用ABtest的经验,为了降低用户的使用难度,我们基于ABtest抽象出了实验场景、实验组和实验三个概念:

  • 实验场景:实验场景指的是准备进行实验的全部流量集合。产生方式是由用户在发送给OpenSearch的Query中用http参数的方式带上实验场景的标签,并在实验配置中指定标签集合。

  • 实验组:实验组为实验的容器,即对应ABtest中层的概念。

  • 实验:测试功能的随机流量及其配置,也就是ABtest中实验的概念。目前实验可支持的配置有查询分析、粗排表达式、精排表达式以及类目预测。

在产品设计上,我们使用如下图所示向导的功能让用户分别创建场景、实验组和实验,并在相应的界面上添加对相应概念的解释,尽量降低用户的理解成本。

创建场景

创建实验组

创建实验

在用户的查询api中,我们提供了scene_tag和flow_divider两个ABtest相关参数。scene_tag用户让用户标识流量的场景,用于区分流量是否参加实验。flow_divider是ABtest用来对流量分实验的一个哈希字段,一般我们建议用户使用他的用户的编号,这样能保证同一个终端用户始终进入同一个实验,为其提供稳定的体验。

实验数据报表

在用户编辑完ABtest实验之后需要持续观察流量的变化以确定哪个方案更优,因此OpenSearch为用户每天统计一次各实验的PV、IPV、UV、IPV_UV、CTR、无结果率等核心指标(IPV、IPV_UV、CTR三个指标需要用户开通数据采集功能)展现给用户对比。

报表

通过编辑实验和对比指标,用户的设计决策就有了数据支撑,在使用新的算法功能时也就不必担心,一切靠数据说话。

技术方案

ABtest实现

在OpenSearch之前,Hyperspace对其他项目的ABtest功能的支持方式是每个项目对应一个配置集合,即Hyperspace中的project。但是OpenSearch是一个搜索平台,需要支持成千上万的用户使用ABtest功能,即要在Hyperspace上开通成千上万个project,而Hyperspace所用的diamond配置管理系统支持的配置数据量有限,无法满足这个需求,因此Hyperspace同学部署OpenSearch的服务的时候把diamond替换成了基于etcd实现的配置中心。此外,为了把OpenSearch的用户与Hyperspace上其他用户隔离开来,Hyperspace还引入了命名空间的概念,将OpenSearch平台上开通的project单独放入一个命名空间下。

使用Hyperspace后,ABtest在OpenSearch上的实现架构如下图所示:

ABtest架构图

前端提供界面供用户编辑ABtest实验,并通过API与Hyperspace交互,Hyperspace把实验配置存入数据库并同步给配置中心。agg使用Hyperspace的C++ SDK从配置中心拉取实验配置,并据其确定实验,改写搜索请求,查询ha3引擎,将查询结果返回给前端。同时,agg也会记录每个搜索请求最终进入的是哪个实验,为各项指标的统计提供支持。

数据报表统计

实验数据报表的数据来源分为agg上的pv日志以及用户推送的行为数据两部分。计算流程使用aflow管理,通过各区域主控机上的crontab指令来每天定时触发执行。为了与OpenSearch上现有的算法任务(目前主要是类目预测)兼容,数据报表的统计任务分为计算较为通用的基础数据(主要包括app级别的搜索和点击日志)和报表数据(PV、UV等指标)两部分。基础数据不仅可以用来生成报表数据,同时也可以被其他算法任务所使用。

  • 基础数据生成流程

    基础数据统计
    基础数据的生成分为两个阶段:

    1. 准备阶段:获取整个aflow过程中需要解析的app_group_id列表,通过odps_jobs_status来过滤掉已经被解析过的app
    2. 通过MapReduce产生数据阶段:
      • MR1: 解析agg的pv日志表,将其按app分开,并生成request2experiment(记录搜索请求与实验编号的对应关系)表备用
      • MR2: 从用户的行为数据表中抽取出点击相关记录,生成click_log_basic表
  • 报表生成流程:

    • 总体流程:

    产生报表1

    • user_request表的生成:user_request根据终端用户编号来join不同表的信息,主要用于统计报表指标中与用户编号有关的部分指标

    产生报表2

    • 分实验统计指标: 分实验统计报表

后续工作

​为了降低用户的理解成本,目前上线的ABtest功能不允许用户在一个实验场景下创建多个实验组,即不支持分层实验。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《Redis设计与实现》阅读:Redis底层研究之简单动态字符串SDS
        除仅用于字符串字面量的情况外,对于可以被修改值的字符串的表示,Redis底层并没有采用C语言传统的字符串表示,即以空字符结尾的字符数组,而是采用专门为其设计的简单动态字符串作为其默认字符串表示,其英文全称为Simple Dynamic String,简称SDS。
1027 0
探索Redis设计与实现3:Redis内部数据结构详解——sds
转自http://zhangtielei.com Redis内部数据结构详解(2)——sds  2016-06-05 本文是《Redis内部数据结构详解》系列的第二篇,讲述Redis中使用最多的一个基础数据结构:sds。
1020 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
13773 0
分布式爬虫和搜索的设计与实现
爬取网站,采用流程节点,用来处理摘要计算、关键字计算、相似度计算、热度计算。数据经过流程计算以后,落库,建立倒排索引。搜索根据关键词到倒排索引表可以快速搜索。 实现步骤 1.基础工作:收集一些网址,作为爬虫的入口。种子url表结构: { “_id” : ObjectId(“c54c4352310b3c”), “urlId” : “io563784uiodf7e96bb9i
952 0
数据结构拾遗(3) --红黑树的设计与实现(下)
完整源代码: http://download.csdn.net/detail/hanqing280441589/8450041   红黑节点设计与实现 template class Red...
534 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
19811 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18063 0
+关注
7
文章
0
问答
来源圈子
更多
+ 订阅
相关文档: 智能推荐AIRec 智能开放搜索OpenSearch
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载