阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

微博广告分层实验平台 (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:185772

评论

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

分布式缓存与消息队列

紫极

Linux 进程必知必会

cxuan

Linux 操作系统

Tomcat8.5源码构建

知春秋

tomcat tomcat构建 tomcat源码解读 tomcat剖析

Python中的@staticmethod和@classmethod的区别

BigYoung

Python classmethod staticmethod

typora设置图片自动上传,实现快速发文章

诸葛小猿

Typora PicGo gitee 上传图片

Node.js与二进制数据流

自然醒

Java node.js 大前端 二进制

带你解析MySQL binlog

Simon

MySQL Binlog

一些思考

张健

架构师训练营第六周总结

Melo

极客大学架构师训练营

数据库分片

Axe

推荐一款Python开源库,技术人必备的造数据神器!

狂师

Python 开源 自动化 开发工具 开发数据

关于计划的思考

zhongzhq

Rust是如何保障内存安全的

博文视点Broadview

读书笔记 rust

redis系列之——分布式锁

诸葛小猿

Java redis 分布式 分布式锁

聊聊Spring的IOC以及JVM的类加载

小隐乐乐

kubernetes集群安装(二进制)

小小文

Kubernetes 容器

​区块链技术的重要性

CECBC

Redis进阶篇三——主从复制

多选参数

redis redis高可用 redis6.0.0 Redis项目

Newbe.Claptrap 框架入门,第一步 —— 创建项目,实现简易购物车

newbe36524

Docker Reactive ASP.NET Core

JVM中栈的frames详解

程序那些事

JVM 堆栈 性能调优 JIT GC

字节跳动面试经验分享,已拿 Offer!

伍陆柒

Java 面试 大厂

不是完成你学习的 KPI ,而是要形成指导你行动的 OKR

非著名程序员

学习 程序员 提升认知 知识管理

这样的二维码,你见过吗?

诸葛小猿

Java Python 后端 二维码 myqr

ArrayList源码阅读

慌张而黑糖

ArrayList 源码阅读

阿里四面你都知道吗?

java金融

Java 程序员 互联网 阿里 简历

浅析 VO、DTO、DO、PO 的概念、区别和用处!

Java小咖秀

学习 设计模式 模型 经验分享

Python类中的__new__和__init__的区别

BigYoung

Python __init__ __new__

猿灯塔:spring Boot Starter开发及源码刨析(二)

猿灯塔

Java 猿灯塔 源码刨析

Scala中如何优雅地实现break操作

吴慧民

scala

重学 Java 设计模式:实战访问者模式「模拟家长与校长,对学生和老师的不同视角信息的访问场景」

小傅哥

设计模式 小傅哥 重构 代码优化 访问者模式

工厂方法模式

Leetao

Python 设计模式 工厂方法模式

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