15

严选客户端ABT实践

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzA5NTE1ODQyOQ%3D%3D&%3Bmid=2247483966&%3Bidx=1&%3Bsn=07d91f6064b6e30df5c2d16f6c7cfe8a
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
NzeqaeJ.gif

ABT智能决策,达到自行运转的决策循环,降低产品A/B实验决策周期、成本,助力业务增长。为实现这个目标,我们对客户端ABT、数据埋点、首页动态化进行了重构设计。本文主要分享我们对ABT改造实践相关技术点:客户端ABT架构设计、ABT协议规范、ABT埋点。

概述

关于A/B 有很多层的定义,通俗来说,A/B 是一种工具,通过分流A和B两个版本,统计埋点数据,进而实时计算出对应版本关键指标数据,然后根据指标数据和算法策略自决策哪个A/B版本效果更好并调整对应版本的流量。

架构设计

对于客户端视角来说架构体系主要划分:业务模块层、APP内H5、APP埋点、业务请求、APP Server、ABT Server。

  • ABT SDK:生命周期内缓存实验决策信息,为业务模块解析决策信息、匹配业务埋点对应实验信息、匹配业务请求的实验透传后端。

  • 埋点:用户的行为数据的采集&上报。

  • APP内h5:对于APP内的H5页面 为保持与APP实验决策表现的一致性,SDK通过UA传递实验决策给h5页面。

  • APP Server:透传ABT服务实验决策列表,apolloY配置参与实验的业务接口Path。

  • ABT Server:创建ABT实验,提供原始的实验决策信息并透传实验的业务信息。

IZnqimu.jpg!web

ABT协议规范

为了保证资源投放、客户端、app Server服务、ABT服务、数据埋点服务,这些服务都保持一套页面模块体系 ,约定了一套ABT协议规范,并且各个服务都遵循这套协议,然后ABT各种实验玩法(TAC/资源投放/纯客户端实验)都是在这套协议上运行。

$(ABT协议版本号)|$(页面)|$(模块)|$(位置)|$(服务标识)|$(实验ID)|$(方案ID)。

  • 第一位: 协议版本号,预留,防止后面扩展或者修改协议用,示例1,由ABT平台提供,各方统一

  • 第二位: 页面,如首页,示例index,这个标识符由页面模块管理服务提供,各方统一,没有该项,则为NULL

  • 第三位: 模块,如banner位,示例BANNER, 这个标识符由页面模块管理服务提供,各方统一,没有该项,则为NULL

  • 第四位: 位置,如1,2,3, 应该由页面模块管理服务提供,各方统一,没有该项,则为-1

  • 第五位: 第三方服务标识, 如RDC,表示资源投放系统,这个标识由ABT平台提供,各方统一

  • 第六位: 实验ID,ABT平台上创建的实验的id

  • 第七位: 方案ID, ABT平台上创建的方案id。

例如 对于首页里的banner模块里的第二个坑位需要进行资源投放实验,那么对应的ABT协议ID为 1|index|banner|2|RDC|002|001。

{

"type":0, //端类型, 0 native实验, 1 h5实验

"groupId":"1|index|banner|2|RDC|002|001", //实验ID,

"extend":"", //ABT透传业务字段

"paths":["/api/tac/execute/index"] //当前实验涉及的接口path列表 ,约定path不带.json后缀

}

ABT埋点

ABT实验埋点粒度支持模块粒度、页面粒度、全局粒度、坑位粒度(目前主要是资源投放场景实验)的埋点。并且实验埋点信息是根据页面模块自动匹配 然后随当前埋点一起上报。

  • 模块级别实验,模块里埋点只会带上与该模块相关的实验信息(实验ID_方案ID),主要作用于模块内的实验。例如menu模块内埋点只会带menu模块相关的实验信息 。

  • 页面级别实验, 页面内所有埋点会带上与该页面相关的实验信息,主要用于页面内跨模块的实验 。如首页TAC实验需要跨首页多个模块。

  • 全局实验,整个APP内所有埋点都会带全局实验信息,主要用户跨页面实验。比如交易链路实验需要涉及到购物车页、下单页多页面。

BFZnuuq.jpg!web

例如 当前ABT SDK缓存的ABT决策列表:

["1|index|newitem|2|TAC|002|001", //模块级别实验

"1|index|newitem|3|TAC|003|004", //模块级别实验

"1|NULL|NULL|2|TAC|005|006", //全局实验

"1|index|more|2|TAC|007|008"] //模块级别实验

对于首页的新品模块的商品点击埋点click_index_newitem_item对应页面是index、模块是newitem,那么该埋点匹配到对应的实验信息是 "002_001|003_004|005_006"

资源投放实验埋点

资源投放ABT埋点比较特殊,对于客户端来说这种实验基本上是透明的,并且实验的粒度到模块的坑位级别。实验的埋点信息都是随业务接口返回 然后在对应坑位埋点直接透传埋点服务。

  • 资源投放ABT直接访问ABT平台

  • 资源投放ABT埋点 接口返回SCM埋点信息

fuUvI3I.png!web

ABT首页落地

对于首页TAC实验场景来说,由于首页页面模块UI布局&数据都是在后端TAC服务进行组装页面,所以对于这个场景SDK不仅为客户端提供实验决策也需要提供实验决策给后端TAC服务。

对于TAC 服务决策信息我们在业务请求通过WZP Header传递给后端TAC服务,然后TAC服务根据header里的决策信息组装好对应版本的页面数据返回给APP。

b63e22B.png!web

例如线上已完成下线的一个实验,首页的TAC布局实验测试。

实验A版本模块顺序:超级会员专属福利 -> 首页私人定制模块 - > 首页人气推荐模块;

实验B版本模块顺序:首页人气推荐模块 -> 超级会员专属福利 -> 首页私人定制模块。

r2QrYnI.jpg!web

总结展望

截止目前严选已经上线了78个客户端实验,包括首页TAC布局实验、首页TAC样式实验、资源投放实验、商详实验等。

随着用户数据隐私的管理越来越严,并且手机设备性能越来越好,未来我们期望结合On-Device AI技术充分利用手机设备算力资源、节省云端资源。在某些业务场景下,让数据不出手机端直接在端内进行决策。

作者简介

胡大,网易高级iOS开发工程师。2016年硕士毕业于上海计算技术研究所,同年加入网易严选,参与严选业务开发,现阶段主要负责导购链商品评价、交易链购物车两大业务模块开发。同时负责严选客户端APM、网络基础设施建设。目前参与严选Flutter技术建设落地。

本文由作者授权严选技术团队发布

AzURRnZ.png!web

jyAn6vA.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK