阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

微博广告分层实验平台 (Faraday) 架构实践

  • 2017-05-25
  • 本文字数:4024 字

    阅读完需:约 13 分钟

移动互联网广告基于大数据,实现广告的精准人群定向投放和效果评估,并借助于不可胜数的广告策略,控制着广告的实时投放,让数据驱动型的移动互联网广告沿着站方、用户、广告主三者共赢的目标不断前进。

大数据驱动使得效果指标的量化评估成为了可能。为了实现好的广告投放效率,线上运行的每一个广告策略需要相应的实验和效果分析,通过量化分析来评估该广告策略效果的好坏。策略可能需要不断地尝试,并进行合理地流量均匀分流,经过多轮线上 A/B test 实验迭代,才能形成最终的决策值。另外,广告平台上许许多多的策略,有的相互独立,有的相互影响,如何高效地进行大规模的并行策略实验,是个不小的挑战。

在广告为核心业务的移动互联网公司,从 Google,Facebook,到腾讯,阿里,百度,都有着一套支持广告策略快速迭代和支持大规模并行实验的广告实验平台。

近期微博广告正式推出了微博广告法拉第(Faraday)全流量分层实验平台。该实验平台支持大规模广告策略并发实验,提供了多种流量均匀分流模式,全面的广告指标跟踪评估,实验效果实时反馈等。

实验分层模型

该实验平台借鉴了 google 的论文 [备注一] 关于分层实验的设计思想,并结合微博广告平台的应用场景进行了大量的简化。如下图所示:

该分层模型的主要思想为:

  • 相关联的策略参数位于同一实验层;
  • 相互独立的策略参数分属于不同的实验层;
  • 一个实验参数只能在一个实验层中出现;
  • 不同实验层间进行独立的流量划分和独立的实验,互不影响。

该分层模式简单明了,可以满足大部分的应用场景。另外,还有明显的好处:

  1. 该分层模型是面向策略参数的实验分层,不受线上广告系统模块划分的影响,达到最大化可独立进行实验的个数;
  2. 每一实验层享有 100% 流量,可以避免流量切分过细,保证实验间的可对比性、客观性;
  3. 不同实验层之间流量正交,可以避免不同试验间的流量依赖和流量不均匀情况的出现。为了更好地评估实验的效果,每一实验层还引入了基准实验。该基准实验会采用该实验层的默认策略取值,流量配比会设定在一个合适的水平。

(点击放大图像)

流量划分类型

流量的均匀划分是实验具有可对比性的前提。根据策略实验的需求和应用场景,系统提供以下不同均匀强度的流量划分类型:

  • 流量完全随机 这是最简单的分流方式;
  • 用户标识 id 哈希 该流量划分会使同一个用户会一直命中同一实验,从而保证了用户体验的一致性;而且也满足对同一用户具有累积效应的策略的实验需求;
  • (用户标识 id+ 日期)哈希 这是一种更为严格的保证流量均匀性的分流方式,可以保证流量划分在跨时间维度上更为均匀,但是会牺牲用户请求跨时间区间的一致性;
  • 用户 id 尾号划分 这是一种很常用、很简单的分流方式,还保证了用户体验的一致性,但是可能会由于尾号分布的不均匀性而造成流量分布的不够均匀,影响实验的可对比性。一种折衷方案是,根据用户标识 id 中间若干位来进行流量的划分。

对于涉及用户体验层面的实验,比如广告渲染的样式类型等,还会存在这样的需求,进行实验时,需要指定若干个用户命中指定的实验。这时,实验平台辅以白名单的方式,为流量划分类型提供补充。

具体进行流量划分时,为了实现实验层之间流量划分的正交性,会将流量标识信息和实验层标识一起进行实验流量 bucket 划分, 实验层标识 layer_id 称为离散因子。如基于用户标识的流量划分:

(点击放大图像)

理论上,通过以上几种流量划分类型,可以实现对应均匀强度的流量划分;但是,总会出现一些情况,发现最终划分的流量可能是不均匀的,从而影响到实验的可对比性。

对此,实验平台提供了一种流量划分的均匀性验证工具。基本思路为: 在广告系统中,用户是通过多维的画像向量(a,b,c,…,n)来进行刻画的,如果流量划分是均匀的,意味着用户的每一个画像向量分量在该流量划分条件下是均匀,更进一步,多个画像向量分量的组合在该流量划分条件下也是均匀的。通过进行用户画像向量单个分量和若干个画像向量分量的组合的均匀性验证,即可来反映该流量的划分的均匀性。

实验平台架构

实验平台整体架构图如下:

(点击放大图像)

实验平台架构主要包括几个重要部分: 法拉第工作台,实验配置管理与决策中心,线上系统策略分发和控制,实验数据实时流和离线批处理,实验效果dashboard 展示。下面对其中的关键特性予以介绍。

法拉第工作台

法拉第工作台供实验人员进行操作的入口。界面功能包括广告策略录入,实验创建与控制,扩量和全量发布,实验效果跟踪,实验平台前端界面大大降低了实验操作人员的门槛。

实验配置管理与决策中心

所有的实验策略配置信息都会持久化落地到配置中心(mysql 等),包括当前正在进行的实验的策略配置情况,也包括已经完成的实验配置情况。同时,实验策略配置会保存当前实验上下文的全局快照信息,可以进行指定版本的实验上下文的回滚。由于线上系统的策略配置决策信息完全依赖于实验平台和实验策略配置中心,实验策略配置中心本身的安全性,数据完整性,可用性,就变得极为重要。便于进行实验策略的回滚就是确保的系统稳定性和策略决策正确性的关键措施之一。

线上系统策略分发和控制

实验的策略配置信息通过策略分发机制来应用到线上生产环境。 为了最大程度地减少实验平台对生产环境的侵入性,这里采用了策略全局统一分发的方式来完成。生产环境只用在流量接入层请求实验平台,确定实验策略参数的取值,然后将确定的策略参数信息作为广告请求体的一部分,携带在广告请求参数中,一同下发给上游的各个服务器,每个服务器模块根据自己的需求情况进行获取对应的策略参数信息,进行广告精准投放计算。

实验环境供生产环境请求调用的模块称为法拉第实验CORE。具体地,在广告请求的接入层Router,由Router 去请求法拉第CORE。对于线上环境来说,策略实验的细节是透明的。换句话说,线上生产环境实际上是不关心当前是否正在进行着实验,以及正在进行着哪些实验;线上生产环境只关心从实验策略控制中心获取到所有托管于实验平台的策略参数的决策值。

法拉第实验CORE 包括两种实现形式。一种是原生动态库.so 形式,这种嵌入到宿主服务内部,可以节约I/O 通信消耗;另一种是HTTP API 形式,这种提供了跨语言方式的支持。

(点击放大图像)

在法拉第实验CORE 内部,需要对本次请求标识信息和全局的实时实验配置信息,依次对每个托管于实验平台的策略参数进行决策。对于正在进行实验的策略参数,根据实验层中每层选用的实验分流类型和分流配比,确定实验的命中情况,从而确定策略参数取值;对于当前没有进行实验的策略参数,则取其默认策略参数值。 最终,全部的参数都确定其取值,形成k-v 对,连同当前流量的实验命中信息情况,反馈给生产环境router 模块。

实验数据实时流和离线批处理

请求的实验信息会以tag 的形式记录在生产环境的请求日志中,形如: layer1_layer2_layer3_…_layerN。 请求日志会落地到广告数据总线系统,再由广告实时流系统进行消费、数据清洗、实验效果指标计算等工作。由于广告系统是多业务指标系统,包括售卖率,ECPM, CTR, ACPE,负反馈率、财务消耗计算等。广告实时流系统还需要日志的关联工作,比如关联广告互动日志,广告负反馈日志。实时流的计算的结果,会落地到druid 系统,方便实验效果数据的快速检索和二度加工。实验效果实时指标数据计算延迟控制在一定的范围内(5 分钟)。

(点击放大图像)

由于实时日志可能会存在日志延迟、重复、丢失等情况,实时流系统的计算指标的准确性会难以保证。因此,对于非实时的指标数据,会启动离线批处理计算进行实验指标的校正,特别是对于非当天的历史实验指标数据,离线批处理会进行重新计算,形成最终准确的实验指标数据体系。

实验效果dashboard 展示

实验效果dashboard 展示采用了量化分析的方式,精确衡量实验间的效果对比情况。

实验间的对比,提供两种对比维度:一个是横向对比,这个进行同一个实验层中所有对比实验和基准实验间的各个指标的对比,以发现同时间区间各个实验的策略的对生产环境的影响;一个是纵向对比,是指定的对比实验和基准实验在时间纵向维度的效果对比,以发现该对比实验是否具体持续的效果提升/ 下降效果。实验效果跟踪横向对比图表和纵向对比图表展示效果如下:

(点击放大图像)

有时,为了更加详尽地洞察实验效果指标的更多细节,需要对实验指标按某一个维度进行分解,达到更小观测粒度。比如,微博用户在不同的设备平台(PC,安卓平台,IOS 平台)不一样的操作习惯和兴趣习惯,可以分平台粒度查看该对比实验在各个设备平台的实验指标变化情况;微博不同场景信息(关系信息流,兴趣信息流,热门搜索流等)的属性存在天然差别,部分策略在分场景流去分析时可能回更有意义;另外,也提供了分广告竞价类型的实验效果跟踪分析。

技术之外

最后需要提的是,实验平台在效果跟踪决策方面是有一定的局限性的。实验平台可以进行实验效果的快速跟踪,但是却很难进行实验效果好坏的决策。比如:如果对比实验效果指标值全部提高或下降了,可以简单认为对比实验的策略调整起正向作用或者反向作用;如果对比实验的实验效果指标值部分提高了,部分下降了,就不太好认定了。还有,实验效果的短期效应和长期效应也可能是不一致,这将大大增加了实验效果好坏的决策难度。

因此,实验平台是可以快速提升广告业务策略迭代效率的工具,但是要想进行实验好坏评定的决策,还需要很长的路要走。

为了弥补这个不足,可以成立一个实验平台评审委员会。通过非技术手段进行线下决策,包括实验的效果好坏评定,是否进行实验的发布,对生产环境的长期效应等一些列的决策。

作者介绍

李铁牛,目前就职于新浪微博广告平台部,粉丝通广告平台技术负责人。2011 年毕业于中国科学院大学,2012 年加入新浪微博,参与并主导了粉丝通,品牌速递,应用家,超级粉丝通等多个核心广告产品迭代开发和投放平台的架构设计工作,完成粉丝通广告架构由产品线型向平台型架构的转型, 主导开发了 Faraday 分层实验平台。 目前,本人从事关于高并发、高性能、高可用的广告平台架构设计,以及广告投放策略研究和团队管理等工作。

2017-05-25 17:185769

评论

发布
暂无评论
发现更多内容

【得物技术】浅谈分布式事务中间件Seata

得物技术

开源 分布式事务 中间件 解决方案 seata

输入法B端市场转化:百度推动产业智能化的新路径

脑极体

Appium常用操作之「Toast提示信息获取」

清菡软件测试

git使用与原理剖析及其私服搭建

Fox

git

释放数字化活力 高质量建设数字中国

CECBC

数字经济

给,你们想要的内存溢出MAT排查工具

田维常

内存溢出

第五周-笔记

leo

极客大学架构师训练营

架构师训练营 W05 作业

Geek_f06ede

DataOps系列丨DataOps的组织架构与挑战

DataPipeline数见科技

大数据

实现2nm工艺突破,台积电为何能给“摩尔定律”续命?

脑极体

结合实战和源码来聊聊Java中的SPI机制?

冰河

Java spi 服务发现

消灭微服务的坏味道 之 循环依赖

码猿外

微服务 循环依赖 坏味道

区块链+供应链,双链融合开启新时代

CECBC

区块链 供应链物流

阿里大牛八年打造,编程宝典,从初学到编程进阶—深入学习—实战

Java~~~

Java 阿里巴巴 程序员 架构 编程语言

DataOps系列丨DataOps理念与设计原则

DataPipeline数见科技

大数据

JVM运行时数据区,你真得好好学一学

Simon郎

JVM Java 分布式

LeetCode 热题 - 递归

helbing

LeetCode

DataOps系列丨数据的「资产负债表」与「现状」

DataPipeline数见科技

大数据

大专学历Java开发7年,从年初被裁到四面美团点评成功上岸,闭关七个月,入职那一天我哭了!

Java架构追梦

Java 阿里巴巴 面试 美团 java架构

架构师系列之6: python实现一致性hash

桃花原记

《ZooKeeper分布式过程协同技术详解》.pdf

田维常

电子书

32核打赢AMD64核 英特尔Ice Lake为HPC提供强劲性能

E科讯

微服务手册:高速查询?除了Redis我们还有另外的选择

互联网应用架构

redis 微服务 springboot Caffeine 高速缓存

数字人民币究竟是什么

CECBC

数字货币

用 Python 实现定时自动化收取蚂蚁森林能量

Python小二

Python

石、火、水:从OriginOS透视移动系统进化论

脑极体

Maven-技术专题-Setting文件结构解析

洛神灬殇

五、一致性哈希算法

Geek_28b526

Nacos实战及其源码分析

Fox

Spring Cloud nacos spring cloud alibaba

《使用C ++的数据结构和程序设计》限时免费下载

计算机与AI

c++

Spring Cloud Config 实现分布式配置中心

AI乔治

Java 架构 微服务 Spring Cloud

微博广告分层实验平台(Faraday)架构实践_最佳实践_李铁牛_InfoQ精选文章