《Overlapping Experiment Infrastructure: More, Better, Faster》论文阅读笔记

文章目录

    • 1 背景
    • 2 三个核心概念
    • 3 Launch层:特性发布的专用机制
    • 4 流量分发策略和条件筛选
      • 4.1 四种流量分发类型
      • 4.2 条件筛选机制
    • 5 工具链与监控体系
    • 6 实验设计原则
    • 7 培训
    • 参考与推荐

1 背景

谷歌(Google)以数据驱动著称,几乎所有可能影响用户体验的改动,无论是 UI 界面调整还是背后算法变更,都要通过在线实验(A/B 测试)来验证。实验的目标是更好地评估新方案的效果,从而加速产品迭代。传统的单层实验系统中,每个请求最多只能属于一个实验。谷歌早期采用Cookie Mod随机流量分流的单层方案:首先按 Cookie 模划分流量给某些实验,其余流量再做随机分配。这种设计虽然实现简单易用,但存在两个严重的问题:

  • 前端代码(上游服务)先行“抢占”流量后,下游服务很可能流量匮乏,导致实验流量饥饿和偏差
  • 更重要的是,这样的单层体系无法支撑大量并发实验,难以满足谷歌数据驱动的需求。

image-20250507143224209

随着迭代需求激增,单一实验平台的可并行实验数量成为瓶颈:如果同时只能运行很少实验,就无法支撑快速的创新节奏。因此,谷歌需要一个架构来支持“更多、更好、更快”的实验。


💡 A/B 测试

A/B 测试是一种数据驱动的在线实验方法,用于评估产品改动(如界面、功能或算法)对用户行为或业务指标的影响。通过将用户随机分配为两组:实验组(使用新方案)和控制组(保持现状),对比两组在关键指标上的差异,判断新方案是否有效。其核心优势是通过随机化控制干扰因素,使因果推断更可靠。

实验设计需遵循以下原则:

  • 随机分配:确保用户特征在两组中均衡分布,避免系统性偏差;
  • 一致分流:同一用户始终进入相同分组,保持实验稳定性;
  • 样本量充足:便于检测小幅度变化,提高统计显著性。

常见的评估指标包括:

类型示例用途说明
用户行为点击率(CTR)、转化率(CVR)、跳出率衡量改动是否改善用户互动与留存
商业指标收入、下单率、ARPU直接与业务增长挂钩,是决策重点
系统性能加载时间、错误率、耗时反映改动对系统稳定性与响应效率的影响
长期价值留存率、生命周期价值(LTV)评估改动对用户长期使用的积极或负面影响

不同实验目标对应不同核心指标。以推荐算法为例,可能关注点击率、推荐命中率、长时间停留等;而注册流程优化则更看重转化率、漏斗流失率等。

此外,为防止“指标漂移”或过度追求短期提升,谷歌等公司还会设定一组保底指标(guardrail metrics),确保实验不会在某些维度上造成退化(如用户满意度或系统稳定性下降)。

为解决单层架构的局限性,谷歌提出了重叠实验基础设施。这一创新架构的核心思想是:将系统参数划分到不同层(Layer),并允许一个用户请求同时参与多个不同层的实验。与传统的单实验(每请求仅一个实验)不同,每个请求可同时参加多个实验,但每个实验只能修改其对应层的参数。这样,系统可在不同维度上“交叉”运行实验,而不互相干扰。

2 三个核心概念

重叠实验架构的基础由三个核心概念组成:

  1. 域(Domain):对请求流量的分段(Segmentation),定义了一组实验的运行范围
  2. 层(Layer):系统参数的逻辑子集,每层包含互不重叠的参数组
  3. 实验(Experiment):在特定域内的特定层上,对一部分流量给予替代参数值的尝试

域和层是可嵌套的:域中包含多个层,层中可以包含实验,也可进一步嵌套域。默认域包含所有流量、所有参数。我们可以在默认域内设计多种结构:例如将参数简单划分为三个层,则每个请求最多参加3个实验,各层互不重叠。

image-20250507160857949

或者先将流量分到两个域:一个非重叠域(流量分配到此域的请求最多参与一个实验,可以改变任意参数),另一个重叠域(流量分配到此域的请求可分别进入多个层的实验,每层实验仅修改该层参数)。

下图示意了一个简单的域/层结构示例。整个系统由一个默认域包含所有流量,然后分为两个主要的子域:

左侧的非重叠域占据40%的流量,其特点是每个请求最多只能参与一个实验,但这个实验可以修改系统中的任意参数。这个域中包含三个独立实验(X、Y、Z),每个占10%流量,剩余70%为控制组。右侧的重叠域占据60%的流量,其特点是请求可以同时参与多个不同层的实验。这个域被划分为三个功能层:UI层、算法层和特性层,每层管理不同的参数集。每层都有自己的实验组和控制组,且流量分配各不相同:UI层的实验A占25%,算法层的实验B占30%,特性层的实验C占20%。

image-20250507194046352

下图中展示了更复杂的嵌套关系:算法层内嵌套了搜索算法子域,包含排序和推荐两个并行实验;个性化层内部嵌套了用户细分子域,再进一步细分为新用户域和老用户域,实现精细化实验控制。通过这种多级嵌套方式,对参数的不同组合划分和流量层次划分可以灵活配置,大大提升并行实验的灵活性和效率(下图示意了一个复杂的域/层嵌套结构示例)。

complex_experiment_architecture_cn

3 Launch层:特性发布的专用机制

除了常规的实验层外,谷歌还引入了"Launch层"(发布层)的概念,专门用于新特性的渐进式发布。Launch 层总是在默认域中(即覆盖全量流量),与“普通”层使用不同的参数划分方式。在 Launch 层中,实验指定的是参数的新默认值:如果在其他层没有覆盖这些参数,实验中的默认值生效;如果已有层覆盖,则继续沿用普通层的值。

image-20250507144516976

Launch层为特性发布提供了强大的控制机制,使产品团队能够:

  • 逐步放量新特性,确保平稳过渡
  • 测试不同特性版本间的交互影响
  • 在同一个实验框架内统一管理特性发布和常规实验
  • 在发现问题时快速回滚,通过调整 Launch 层的参数分配

4 流量分发策略和条件筛选

实验中如何决定每个请求进入哪些实验?这依赖于流量分发类型(Diversion)和条件筛选

4.1 四种流量分发类型

谷歌的实验平台支持四种主要的流量分发(Diversion)方式,按优先级依次为:

  • 用户 ID 分发(User ID Mod):使用用户登录 ID 做 Hash 切分流量。
  • Cookie 分发(Cookie Mod):使用浏览器 Cookie 做 Hash 切分流量。
  • Cookie+日期分发(Cookie-Day Mod):对 Cookie 结合日期做 Hash,使得同一用户在不同日期可能进入不同实验。这种方式适合短期测试或需要日常变化的场景。
  • 随机分发(Random):对请求做全局随机采样,不保证同一用户的一致性。适用于无需用户连续体验的后端服务测试。

这些分发方式依次按顺序应用:先尝试 User ID 分发,其次是 Cookie 分发,之后是 Cookie+日期,最后才是随机。一旦请求被某种分发方式选中并匹配到一个实验,就不再参加后续的分发。这样确保了测试的一致性(同一用户/Cookie 会持续进入同一类型实验),但也会导致例如 1% 的随机流量实验实际上接收的请求远少于 1% 的 Cookie 实验。

4.2 条件筛选机制

在流量分发的基础上,谷歌的实验平台还支持通过各种条件进一步筛选流量:

image-20250507150606611

条件筛选**(如国家、语言、浏览器、机房等)**可应用于所有类型的流量分发之上。例如,针对“仅对日本用户”做实验时,可在 Cookie 分流后添加“日本”条件,以避免与英文实验冲突。筛选条件还可以用于灰度发布:如仅在特定机房做金丝雀测试,观察新代码稳定性。

5 工具链与监控体系

重叠实验基础设施依赖完善的工具链和监控流程来保障可靠性。

  1. 首先,所有实验配置都以数据文件形式管理,可由非工程师(如产品经理)编辑,数据文件通过自动化校验工具进行检查,验证语法、ID 唯一性、参数所属层是否一致、所请求的流量量级是否可用、实验设计是否合规(如是否包含控制组)等。
  2. 其次,配置更新无需重新部署代码,而是通过自动化部署系统将验证通过的配置分发至线上环境,包括流量分配、参数激活、触发器设置和日志配置等。
  3. 最后,使用实时监控系统跟踪实验指标(如点击率 CTR 等)。实验者可为关键指标设置期望范围,监控系统实时计算度量值,如果超出预期范围则自动告警。这样可以让实验者在实验跑出异常时立即干预,例如暂停实验或修正参数,从而尽量避免流量浪费或线上问题。

image-20250507200933118

6 实验设计原则

在重叠实验框架下,为确保获得高可信度和高质量的实验结果,需要遵循以下几项核心设计原则:

  • 并非所有被分流到实验中的请求都会实际触发实验逻辑。例如,某个关于天气信息的实验可能只在用户搜索特定地点或与天气相关的查询时才会触发显示逻辑,这部分真正触发实验条件的请求就构成了该实验的"触发集"。

    为获得准确的实验评估,系统需同时记录两种情况的日志:

    • 事实情形(Factual):在实验组中记录实际触发了实验逻辑的请求
    • 反事实情形(Counter-factual):在对照组中记录那些满足触发条件但因为在对照组而未应用实验逻辑的请求

    有了这两个日志,才能准确计算实验真实影响,并避免将未触发的请求稀释掉指标变化。通过分析触发集效果,可提升统计效率(同样的流量下因为效果更明显而更容易检测出差异)。

  • 高质量的实验设计应包含实验前后的观察窗口:

    • 预观察期(Pre-period):在正式实验前设置一段时间窗口,此时已完成流量分组,但尚未应用实验逻辑变更,所有组别仍保持原有行为。
    • 后观察期(Post-period):实验结束后,继续保持一段时间的分组记录,但所有组别均恢复到原始行为。

    预观察期帮助确认所分配的实验流量与控制组具有可比性,可有效检测潜在的实验偏差(如机器人流量、爬虫干扰或其他异常流量分布)。后观察期则用于检测实验结束后的用户行为变化,特别是学习效应或延续效应是否存在。这两种观察期在基于用户ID或Cookie的实验中尤为重要,已成为谷歌实验设计的标准实践。

  • 共享控制组:在传统实验中,每个实验需要独立分配控制组和实验组流量。而在重叠架构下,同一层内的多个实验可以共享一个统一的、规模较大的控制组。每个层内只需设置一个大型控制实验,即可同时作为该层多个具体实验的对照。只要共享控制组的规模远大于单个实验组,其统计效力可提升至相当于双倍独立样本,甚至更高。此机制可显著降低了每个实验所需的流量量级,提升了整体流量利用效率。

  • 由于不同实验可以并行进行,重叠设置允许一个层内建立共享的超大控制组。例如,在每个层里只需要一个大的控制实验,就可服务于多个具体实验的对照。只要共享控制组远大于单个实验组,其统计效力相当于双倍独立样本乃至更高,从而显著降低每个实验所需的流量规模。从统计学角度看,控制组共享使重叠架构在同等流量条件下获得更高的统计检验效力,是实现"更多、更好、更快"实验目标的关键策略之一。

image-20250507204131104

除了以上特定机制外,每个实验还必须满足以下基本要求:

  • 明确假设:清晰定义实验假设和预期效果
  • 适当的分流策略:根据实验性质选择合适的流量分发类型
  • 合理的分析指标:预先确定主要指标和次要指标
  • 统计工具支持:确保分析工具能自动计算置信区间、执行A/A测试等统计验证

7 培训

技术平台之外,谷歌也通过制度和培训确保实验质量。

其一是实验委员会(Experiment Council):实验发起者在投放实验前需填写一份检查表,由一个跨团队工程师小组审查。检查表内容包括:

  • 基本的实验特性(比如,实验测试什么?它们的假设是什么?)
  • 实验的建立(比如,要修改哪些参数,每个实验或实验集合分别要测试的是什么?在哪一层?)
  • 实验的流量分配和触发条件(比如,使用什么分配类型和什么分配条件,在多大比例的流量触发实验)
  • 实验分析(比如,关注哪个指标?实验者要检测的指标敏感度是什么?)
  • 实验规模和时间跨度(即保证,给定一定的流量,实验是有足够的统计量来检测指标敏感度)
  • 实验设计(比如,是否要用预时期和后时期来保证,是否反事实日志正确被记录等等)

对于新手来说,这是学习实验设计的过程;对经验者则是快速自查,有问题可提前解决。所有审核过程都有记录,新人可参考已有案例,专家也能借此及时传播最新最佳实践。

其二是数据解读会议:实验结束后,团队会将结果带到一个开放的讨论会,由各领域专家(基础设施、日志、指标、统计分析等)共同参与。会议目标是:

  1. 确认结果正确(有时实现细节出错或数据异常需要排查)
  2. 挖掘全面洞见(补充指标、不同切片分析等)
  3. 评估是否上线(在综合业务视角和数据结果后达成一致)。

这种复盘机制不仅能纠偏,还让经验丰富的同事将知识传递给新人,不断提高全员的实验素养。

参考与推荐

美团点评效果广告实验配置平台的设计与实现

美团—如何提供一个可信的AB测试解决方案

谷歌是如何高效做AB实验的

Athena-贝壳流量实验平台设计与实践

Overlapping Experiment Infrastructure: More, Better, Faster Experimentation 原文

Overlapping Experiment Infrastructure: More, Better, Faster Experimentation 中文翻译

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国芯思辰| 医疗AED可使用2通道24位模拟前端SC2946(ADS1292)

生物电信号监测技术在医疗健康行业中发展迅速,成为评估人体生理健康状况的关键手段。心电(ECG)、脑电(EEG)和肌电(EMG)等信号,通过精密模拟前端芯片捕捉和处理,对医疗诊断…

数据结构【二叉搜索树(BST)】

二叉搜索树 1. 二叉搜索树的概念2. 二叉搜索树的性能分析3.二叉搜索树的插入4. 二叉搜索树的查找5. 二叉搜索树的删除6.二叉搜索树的实现代码7. 二叉搜索树key和key/value使用场景7.1 key搜索场景:7.2 key/value搜索场景: 1. 二叉搜索树的概念 二叉搜索…

RDMA高性能网络通信实践

RDMA高性能网络通信实践 一、背景介绍二、方法设计A.实现方案B.关键技术点 三、代码及注释四、注意事项 一、背景介绍 远程直接内存访问(RDMA)技术通过绕过操作系统内核和CPU直接访问远程内存,实现了超低延迟、高吞吐量的网络通信。该技术广…

ndarray数组掩码操作,True和False获取数据

#数组掩码的表示方法 def testht05():a np.arange(1,10)mask [True,False,True,True,False,True,False,True,True]print(a[mask]) 另外的用法: #掩码操作获取子集 def testht06():a np.arange(1,100)print(a[a%3 0 & (a%7 0)] )b np.array([A,"B&qu…

索引工具explain

EXPLAIN 是 MySQL 中一个非常有用的工具,用于分析查询的执行计划。通过 EXPLAIN,你可以了解 MySQL 是如何执行查询的,包括它如何使用索引、表的扫描方式等。这有助于优化查询性能。以下是 EXPLAIN 输出的各个字段的详细解释: 基本用法 EXPLAIN SELECT * FROM table_name …

Git回顾

参考视频:【GeekHour】一小时Git教程 一句话定义:Git是一个免费开源的分布式版本控制系统。 版本控制系统可以分为两种,1.集中式(SVN,CVS);2.分布式(git) git的工作区域和文件状态…

python打卡day20

特征降维------特征组合(以SVD为例) 知识点回顾: 奇异值的应用: 特征降维:对高维数据减小计算量、可视化数据重构:比如重构信号、重构图像(可以实现有损压缩,k 越小压缩率越高&#…

GuPPy-v1.2.0安装与使用-生信工具52

GuPPy:Python中用于光纤光度数据分析的免费开源工具 01 背景 Basecalling 是将原始测序信号转换为碱基序列的过程,通俗地说,就是“把碱基识别出来”。这一过程在不同代测序技术中各不相同: 一代测序是通过解析峰图实现&#xff1…

47. 全排列 II

题目 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1]] 示例 2: 输入:nums [1,2,3] 输出:[[1,2,3…

ERP系统操作流程,如何快速搭建流程体系

ERP流程图,如何搭建和建立,ERP系统操作流程,ERP系统操作流程图,采购流程,销售流程,仓库流程,MRP流程,PMC流程,财务流程,应收流程,应付流程&#x…

class path resource [] cannot be resolved to absolute file path

问题情景 java应用程序在IDE运行正常,打成jar包后执行却发生异常: java.io.FileNotFoundException: class path resource [cert/sync_signer_pri_test.key] cannot be resolved to absolute file path because it does not reside in the file system:…

19、HashTable(哈希)、位图的实现和布隆过滤器的介绍

一、了解哈希【散列表】 1、哈希的结构 在STL中,HashTable是一个重要的底层数据结构, 无序关联容器包括unordered_set, unordered_map内部都是基于哈希表实现 哈希表又称散列表,一种以「key-value」形式存储数据的数据结构。哈希函数:负责将…

基于 Flask的深度学习模型部署服务端详解

基于 Flask 的深度学习模型部署服务端详解 在深度学习领域,训练出一个高精度的模型只是第一步,将其部署到生产环境中,为实际业务提供服务才是最终目标。本文将详细解析一个基于 Flask 和 PyTorch 的深度学习模型部署服务端代码,帮…

Vue3 + Node.js 实现客服实时聊天系统(WebSocket + Socket.IO 详解)

Node.js 实现客服实时聊天系统(WebSocket Socket.IO 详解) 一、为什么选择 WebSocket? 想象一下淘宝客服的聊天窗口:你发消息,客服立刻就能看到并回复。这种即时通讯效果是如何实现的呢?我们使用 Vue3 作…

MySQL数据库与表结构操作指南

前言:本文系统梳理MySQL核心操作语句。内容覆盖建库建表、结构调整、数据迁移全流程(包含创建/修改/删除/备份场景)。希望它们能帮你快速解决问题。 库结构操作 一、库的创建 一个库的简单创建: create database 库名; 注意&am…

【WEB3】区块链、隐私计算、AI和Web3.0——数据民主化(1)

区块链、隐私计算、AI,是未来Web3.0至关重要的三项技术。 1.数据民主化问题 数据在整个生命周期(生产、传输、处理、存储)内的隐私安全,则是Web3.0在初始阶段首要解决的问题。 数据民主化旨在打破数据垄断,让个体能…

C语言—指针2

1. const 修饰变量 1.1 const修饰变量 变量被const修饰时,变量此时为常变量,本质为常量,语法上不可被修改,但是如果此时需要修改变量值,可以通过指针的方式修改。 虽然此时通过指针的方式确实修改了变量的值&#xff…

高级架构软考之网络OSI网络模型

高级架构软考之网络: 1.OSI网络模型: a.物理层: a.物理传输介质物理连接,负责数据传输,并监控数据 b.传输单位:bit c.协议: d:对应设备:中继器、集线器 b.数据链路层: a.…

el-table计算表头列宽,不换行显示

1、在utils.js中封装renderHeader方法 2、在el-table-column中引入: 3、页面展示:

MySQL OCP和Oracle OCP怎么选?

近期oracle 为庆祝 MySQL 数据库发布 30 周年,Oracle 官方推出限时福利:2025 年 4 月 20 日至 7 月 31 日期间,所有人均可免费报考 MySQL OCP(Oracle Certified Professional)认证考试(具体可查看MySQL OCP…