企业出海多云特性实验平台实战指南:A/B测试分流、正交分层与统计显著性(2026最新版)
Meta Description: 出海企业特性实验平台(A/B测试)完整指南:四层模型、哈希分桶、正交分层与互斥实验、假设检验与样本量公式、序贯检验与CUPED、SRM 检测、实验治理,以及三朵云与开源/SaaS 的选型对比和落地命令,一篇搞定。
- 前言:出海团队为什么要自建实验平台,而不是"能发就行"
- 三个症状:为什么"能发"不等于"会做实验"
- 实验平台四层模型:分流 / 实验 / 统计 / 治理
- 分流层:随机化单元与哈希分桶
- 实验层:正交分层与互斥实验
- 统计层:显著性、样本量、序贯检验与 CUPED
- 指标与护栏:别只看想看的那个数
- 实验治理:让实验变成组织的资产
Meta Description: 出海企业特性实验平台(A/B测试)完整指南:四层模型、哈希分桶、正交分层与互斥实验、假设检验与样本量公式、序贯检验与CUPED、SRM 检测、实验治理,以及三朵云与开源/SaaS 的选型对比和落地命令,一篇搞定。
关键词: 实验平台、A/B测试、正交分层、统计显著性、特性实验
前言:出海团队为什么要自建实验平台,而不是"能发就行"
一句话回答:渐进式发布(金丝雀/蓝绿)只回答"新版本会不会把系统搞挂",实验平台回答"这个改动到底值不值得上"——前者管可用性,后者管因果,两件事必须分开做,缺一个都会让出海业务在"拍脑袋上线"和"上线了却说不清效果"之间反复横跳。2026 年 10 月,一个必须知道的事实是:AWS 已于 2025-10-17 正式停服 CloudWatch Evidently(AWS 官方原文:discontinue CloudWatch Evidently, effective 10/17/2025),把实验能力收编进 AppConfig;而阿里云国际站与腾讯云国际站的产品目录里,目前都没有独立的托管 A/B 实验平台产品。也就是说,出海团队做实验平台,几乎一定要在"开源自建"和"第三方 SaaS"之间做选择,而三朵云能给你的,只有特性开关、分流下发和监控——统计引擎得你自己负责。
本文与站内既有文章严格划界,请先读这张边界表,避免混读:
| 站内既有文章 | 它回答的问题 | 本文(实验平台)回答的问题 |
|---|---|---|
| 09-27 多云渐进式发布(金丝雀/蓝绿/特性开关) | 新版本怎么安全地放量(可用性/错误率) | 改动的因果效应有多大(转化/留存/收入) |
| 10-08 多云配置中心 | 参数值怎么动态下发与审计 | 参数值该取哪个变体、变体效果谁更好 |
| 08-16 多云可观测与告警治理 | 运行时指标怎么采、怎么告警 | 指标怎么算成实验结论、显著性怎么看 |
| 09-23 多云数据治理(血缘/质量/网格) | 数据的口径真源与血缘 | 实验指标用哪份口径、分配数据怎么落仓 |
| 10-03 多云研发效能 DORA | 交付链路的吞吐与前置时间 | 交付出去的产品有没有产生业务价值 |
| 09-02 多云混沌工程 | 系统抗故障能力怎么验证 | 产品假设对不对怎么验证 |
记忆点:DORA 度量"发得快不快",实验平台度量"发得对不对",两者一个看过程一个看结果,谁也替代不了谁。
一、三个症状:为什么"能发"不等于"会做实验"
出海团队通常在流水线已经很成熟之后,才会撞上下面三个症状,而它们都不是 CI/CD 能解决的:
| 症状 | 现场表现 | 根因 | 实验平台给的解药 |
|---|---|---|---|
| 决策靠拍脑袋 | 老板说"这个按钮改成红色",改完没人知道有没有用 | 没有随机对照,只有"上线前 vs 上线后"的伪对比 | 同质流量随机分组,消除时间与人群偏差 |
| 灰度发了说不清效果 | 金丝雀只盯 P99 和错误率,转化率是涨是跌没人管 | 金丝雀的目标函数是稳定性,不是业务指标 | 把业务指标作为一等公民纳入判定 |
| 多团队抢同一批流量 | A 团队改首页、B 团队改推荐,结论互相污染 | 实验之间没有隔离,流量互相覆盖 | 正交分层 + 互斥实验把流量"分区复用" |
第三个症状最隐蔽:在没有分层机制的团队里,两个实验同时跑在同一批用户上,即使各自都"显著",你也无法判断是哪个改动起了作用,甚至会出现辛普森悖论——分开看都是正收益,合起来看整体是负的。这就是"实验平台"和"几个 A/B 测试脚本"的本质区别。
二、实验平台四层模型:分流 / 实验 / 统计 / 治理
一套能上生产的实验平台,可以拆成四层,每一层出问题,结论都会失真:
graph TD
A[分流层 Assignment<br/>随机化单元 · 哈希分桶 · 一致性] --> B[实验层 Experiment<br/>正交分层 · 互斥实验 · 流量分配]
B --> C[统计层 Analysis<br/>指标计算 · 显著性 · SRM · 序贯检验]
C --> D[治理层 Governance<br/>实验注册 · 护栏指标 · 长期留白 · 下线]
D -->|结论回流| A
┌──────────────────────────────────────────────────────────────┐
│ 治理层 Governance │
│ 实验注册/审批 · 护栏指标 · 长期留白组 · 实验知识库 · 命名规范 │
├──────────────────────────────────────────────────────────────┤
│ 统计层 Analysis │
│ 指标树/口径 · 假设检验 · p值与置信区间 · SRM 检测 · 多重比较校正 │
├──────────────────────────────────────────────────────────────┤
│ 实验层 Experiment │
│ 域 Domain → 层 Layer → 实验 Experiment → 变体 Variation │
│ 正交(层间独立) · 互斥(层内唯一) · 流量分配与扩容 │
├──────────────────────────────────────────────────────────────┤
│ 分流层 Assignment │
│ 随机化单元(user_id/device_id/session/cookie) │
│ 确定性哈希分桶 bucket = hash(salt + unit_id) mod 10000 │
│ SDK 本地求值 · 一致性保证 · 分流日志 │
└──────────────────────────────────────────────────────────────┘
三条铁律:
- 分流必须确定性——同一个用户在实验期内每次进来必须落进同一个桶,靠的是
hash(salt + unit_id),不是随机数发生器。 - 正交与互斥是两种不同机制,正交扩吞吐、互斥防污染,缺一不可。
- 统计层不产生数据,只负责"别把噪声当信号"——最容易翻车、也最容易被忽略。
三、分流层:随机化单元与哈希分桶
3.1 随机化单元怎么选
随机化单元(randomization unit)决定"什么对象被随机分组",选错会让整个实验失效:
| 随机化单元 | 适用场景 | 优点 | 风险 |
|---|---|---|---|
| user_id | 登录态业务、留存/复购类指标 | 最稳定,跨设备一致 | 未登录用户无法覆盖 |
| device_id | 匿名场景、客户端行为 | 覆盖面广 | 卸载重装会变,清洗难 |
| session_id | 会话内体验类(页面布局) | 干扰最小 | 同一用户不同会话会进不同组,无法测留存 |
| cookie | Web 端匿名 | 实现简单 | 用户清 cookie 后漂移,跨设备不统一 |
| 复合键(user_id → device_id 兜底) | 出海 App 常态 | 覆盖面与稳定性兼顾 | 需明确兜底规则并写进口径 |
出海团队的默认建议:以 user_id 为主,device_id 兜底,且把兜底比例作为实验健康度指标之一监控——兜底比例突然上升,说明登录体系或埋点出了问题。
3.2 哈希分桶:确定性与均匀性
分桶的本质是把无限的随机化单元映射到有限的桶里,要求两件事:确定性(同输入同输出、跨服务一致)和均匀性(各桶比例长期收敛到设定值)。
import hashlib
def bucket_of(unit_id: str, salt: str, n: int = 10000) -> int:
key = ("%s:%s" % (salt, unit_id)).encode("utf-8") # 同一 unit_id + 同一 salt 必须永远得到同一个桶号(跨语言、跨服务一致)
return int(hashlib.sha256(key).hexdigest()[:8], 16) % n # 取前 8 位十六进制 = 32bit
def in_experiment(unit_id: str, salt: str, start: int, end: int) -> bool:
b = bucket_of(unit_id, salt) # 用区间切流量:实验占 [start, end) 桶,例如 [0,1000) 代表 10% 流量
return start <= b < end
三条工程纪律:
- salt 必须绑定"层"而不是"实验"。用实验 ID 当 salt,实验扩容(10%→20%)会重新洗牌,同一用户可能从对照组掉进实验组,结论直接作废。正确做法是 salt 绑定层,扩容只是把层内区间放大。
- SDK 本地求值。把配置下发到各端 SDK(或 AppConfig Agent 之类的本地代理),本地算桶,避免每次请求都远程调用分流服务——否则分流本身就成了新的延迟与单点。
- 分流日志必须落库。谁在什么时候被分到哪个变体,是后续所有归因的基础,做不到可回放就无法复现结论。
四、实验层:正交分层与互斥实验
这一层是整个平台最有技术含量的部分,也是"实验平台"和"几个 A/B 脚本"的分水岭。
4.1 为什么需要分层
一次只跑一个实验,全站只有一个改动,太慢;全流量同时跑所有实验,实验之间互相污染,结论不可信。Google 在 KDD 2010 的经典论文《Overlapping Experiment Infrastructure: More, Better, Faster Experimentation》里给出了工业界沿用至今的答案:分层实验模型。
- 域(Domain):一组互不干扰的层,通常按系统边界划分(搜索域、推荐域、增长域)。
- 层(Layer):层内的实验共享同一批流量,因此层内实验互斥。
- 层与层之间用不同的 salt:同一用户在不同层被独立分流,因此层间正交。
正交意味着流量可以复用:一个用户同时是"首页改版实验"的对照组、又是"推荐算法实验"的实验组,两个实验各自统计,互不污染(前提是业务上不存在交互效应)。理论上,N 个正交层能把同一批流量的实验吞吐提升 N 倍。
┌──────────────────────── 域:增长域(Domain: Growth) ────────────────────────┐
│ │
│ 层 L1(salt=l1_growth) │███ 实验A:首页改版 [0,5000) │░░░ 实验B:banner [5000,8000) │ 剩余 20% 留白
│ │← 层内互斥:一个用户只进 A 或 B 或留白 → │
│ ──────────────────────────────────────────────────────────────────────── │
│ 层 L2(salt=l2_rec) │██ 实验C:推荐算法v2 [0,3000) │░░ 实验D:排序v3 [3000,6000) │ 剩余 40%
│ │← 层 L1 与 L2 salt 不同 → 同一用户两层独立随机 → │
│ ──────────────────────────────────────────────────────────────────────── │
│ 层 L3(salt=l3_pay) │██████ 实验E:支付流程 [0,8000) │ 剩余 20% │
│ │
│ 同一用户:L1 进实验B、L2 进实验C、L3 在留白 → 三层各自统计,互不干扰 │
└──────────────────────────────────────────────────────────────────────────────┘
4.2 正交与互斥的四条判定规则
| 两个实验的关系 | 能否同层 | 能否同流量 | 判据 |
|---|---|---|---|
| 正交(无交互) | — | 可以(不同层) | 业务上互不影响,如首页配色 vs 后端推荐 |
| 互斥(同域同资源) | 必须同层 | 不可以 | 都改同一个按钮,必须二选一 |
| 有交互效应 | 禁止同流量 | 不可以 | 如"新定价"与"新结算流程"会互相放大 |
| 需要精确归因 | 单独一层 | 独占该层 | 高风险/大改动实验,独占流量保干净 |
最容易犯的错:把两个都改首页的实验放到不同层,以为"正交了"。正交的前提是业务上不存在交互,而不是"技术上没冲突"。判定标准只有一个——这个改动会不会改变另一个实验的效应量。
4.3 扩容与换层的稳定性
- 层内扩容:10%→20% 只需把层内区间放大,用层级 salt,老用户桶号不变,新增流量从留白区补充,已在实验内的用户不受影响。
- 换层等于重开实验:把一个实验从 L1 挪到 L2,salt 变了,所有用户重新洗牌,必须重头统计。所以层规划要在实验立项时就定好。
五、统计层:显著性、样本量、序贯检验与 CUPED
这一层决定了实验结论的可信度。下面四个概念,是出海团队最常踩坑的地方。
5.1 假设检验与两类错误
- H0(原假设):实验组与对照组无差异。
- 第一类错误 α:H0 为真却说有差异(假阳性),行业惯例 α = 0.05。
- 第二类错误 β:H0 为假却说无差异(假阴性),惯例 β = 0.2,即统计功效 = 1 − β = 0.8。
四个量互相制约:α 越小、功效越高、效应量 δ 越小,需要的样本量就越大。
5.2 样本量公式与真实算例
两组比例检验在 α = 0.05(双侧,z ≈ 1.96)、功效 0.8(z ≈ 0.84)下,每组所需样本量:
n ≈ (z_(1-α/2) + z_(1-β))² × [p1(1-p1) + p2(1-p2)] / (p1 - p2)²
≈ 7.85 × [p1(1-p1) + p2(1-p2)] / δ²
简化近似:n ≈ 16 × p(1-p) / δ² (p 取基线,δ 为绝对提升)
真实算例(基线转化率 10%):
| 想检测的绝对提升 δ | 每组样本量 | 两组总量 | 结论 |
|---|---|---|---|
| 2 个百分点(相对 +20%) | ≈ 3,700 | ≈ 7,400 | 一周内可完成 |
| 1 个百分点(相对 +10%) | ≈ 14,750 | ≈ 29,500 | 常见目标,约两周 |
| 0.5 个百分点(相对 +5%) | ≈ 59,000 | ≈ 118,000 | 需要月级周期,慎立假设 |
这张表最值钱的一句话:想把可检测效应量减半,样本量要涨四倍。所以实验立项的第一件事不是写代码,而是问"这个改动预期能带来几个百分点"——预期提升小于 1pp 的改动,在小流量出海业务上根本不具备可测性。
5.3 序贯检验与"偷看问题"
固定样本实验要求跑满样本量再看结果。但现实中没人忍得住,产品经理每天刷新看板——这就是 peeking 问题:中途反复查看会显著抬高第一类错误率,经典模拟里若在实验中期查看约 5 次,"名义 5%"的实际假阳性率可被抬到 14% 上下。
三种处理方式:
| 方法 | 机制 | 优点 | 代价 |
|---|---|---|---|
| 固定样本 | 跑满 N 再看,一次判定 | 统计最严谨 | 慢,且不能提前止损 |
| 序贯检验(always-valid) | 用 alpha spending 或 always-valid p 值 | 可随时看、可提前结束 | 同样样本量下功效略低 |
| 贝叶斯 | 给"B 优于 A 的概率" | 结论直观、适合业务沟通 | 先验选择有主观性 |
主流平台(如 GrowthBook)已经原生支持频率派、序贯检验、贝叶斯三种引擎,生产建议默认开启序贯检验,因为出海团队几乎不可能忍住不中途看结果,与其被偷看污染,不如用对统计工具。
5.4 CUPED 方差缩减与多重比较
- CUPED:用实验前的历史数据当协变量,
Y_adj = Y − θ(X − E[X]),其中θ = Cov(Y,X)/Var(X)。方差降低比例约为1 − ρ²,若实验前后指标相关系数 ρ = 0.7,方差可降约 51%——等效于样本量翻倍,却不要一分钱流量。对留存、复购这类强自相关指标,CUPED 是性价比最高的一个开关。 - 多重比较校正:同时看 10 个指标,至少一个假阳性的概率高达约 40%。看多个指标时要用 Bonferroni 或 Benjamini-Hochberg 校正,且必须事先指定一个 OEC(整体评价指标),而不是事后挑一个最好看的。
- SRM(Sample Ratio Mismatch):分流比例严重偏离设定值,几乎一定意味着分流实现有 bug,此时任何结果都不可信。做法是卡方检验:
χ² = Σ (观测数 - 期望数)² / 期望数
例:总分流 1,000,000,设计 50/50,实际观测 502,000 / 498,000
χ² = 2000²/500000 + 2000²/500000 = 8 + 8 = 16,df=1 → p ≈ 0.00006
判据:p < 0.001 即触发 SRM 告警,实验作废排查
SRM 应该是实验平台的强制前置门禁:任何实验,先过 SRM,再谈显著性。
六、指标与护栏:别只看想看的那个数
一个健康的实验指标体系分三层:
| 层级 | 作用 | 示例 | 要求 |
|---|---|---|---|
| 北极星指标 | 最终业务价值 | 付费转化率、GMV | 每个实验只允许一个 OEC |
| 驱动指标 | 解释北极星怎么变 | 点击率、加购率、停留时长 | 用于归因与迭代 |
| 护栏指标 | 防止"赢了指标输了体验" | P99 延迟、错误率、崩溃率、卸载率、退款率 | 任一项恶化超阈值即判定失败 |
三条纪律:
- 护栏指标是一票否决项。转化率涨 2% 但崩溃率涨 0.5%,这不是胜利,是事故。
- 指标口径必须写成代码(metric contract),与 09-23 数据治理的"口径真源"衔接——不同团队各写一版 SQL,结论永远对不上。
- 保留长期留白组。固定 5%~10% 用户永远不进任何实验,用于观测所有实验叠加后的长期净效应,防止"局部都赚、整体在亏"。
七、实验治理:让实验变成组织的资产
技术到位之后,瓶颈会转移到流程与文化上:
| 治理动作 | 落地形式 | 不做的后果 |
|---|---|---|
| 实验注册 | 立项表单:假设/指标/OEC/样本量/负责人/预期效应 | 实验满天飞,没人知道在跑什么 |
| 命名规范 | {域}-{功能}-{日期}-{序号},如 growth-homepage-20261012-01 | 看板里一堆 test1、new |
| 生命周期 | 设计→评审→上线→观察→结论→决策→归档 | 僵尸实验长期占用流量 |
| 负面结果归档 | 失败实验也要写结论进知识库 | 同一错误被不同团队反复踩 |
| 下线机制 | 结论确认后强制关停,变体固化为新基线 | 实验变成永久分支,配置越积越乱 |
最重要的文化转变:负面实验也是成果。一个证伪的假设省下的是后续几个月的无效开发,把它记录进知识库,比一次"成功了但说不清为什么"的胜利更有价值。
八、三朵云与 SaaS 的实验平台能力对比
这是 2026 年 10 月出海团队必须知道的最新格局:
| 维度 | 阿里云国际 | AWS | 腾讯云国际 |
|---|---|---|---|
| 独立托管 A/B 实验平台 | 无独立产品 | CloudWatch Evidently 已于 2025-10-17 停服 | 无独立产品 |
| 现役实验能力 | 无独立产品;Quick Tracking 埋点 + Quick Audience 用户运营可自建 | AppConfig experimentation(定义假设/受众/分流/渐进放量) | 无独立产品 |
| 统计引擎 | 自建 | 不内置,导出分配数据到数仓(Redshift/Snowflake/Databricks)自行分析 | 自建 |
| 特性开关 | MSE Nacos | AppConfig 特性开关 | TSE Polaris |
| 官方口径 | — | Evidently 停服,AWS 建议迁移至 AppConfig | — |
AWS 这条线要讲清楚:AWS 官方博客原文是 "After careful consideration, we have made the decision to discontinue CloudWatch Evidently, effective 10/17/2025",文档页也写明"After October 16, 2025, you will no longer be able to access the Evidently console or Evidently resources"。替代品 AppConfig experimentation 官方描述是"run A/B tests and gradual feature rollouts using production traffic",能做假设定义、受众定向、流量分配、渐进放量、CloudWatch 监控、分配数据导出——但它不提供统计显著性分析,那部分要你在自己的数仓里做。
结论:三朵云卖的都不是实验平台,而是实验平台的"分流与下发管道"。统计层和治理层,无论用哪朵云,都得自己建。
九、开源 vs SaaS 选型对比
既然云厂商不提供完整平台,出海团队的现实选择是这几家:
| 平台 | 形态 | 统计能力 | 数据主权 | 适合谁 |
|---|---|---|---|---|
| GrowthBook | 开源自托管 / 云版 | 频率派 + 序贯 + 贝叶斯 + CUPED + SRM + 多重校正 + Bandit | 数据不出域,仓库原生 | 合规敏感、愿自建的中大型团队 |
| PostHog | 开源 / 云版 | 实验 + 特性开关 + 会话回放 + 分析一体 | 可自托管 | 想要"分析+实验"一体的产品团队 |
| Amplitude Experiment(原 Statsig) | SaaS | 完整统计引擎 + 仓库原生 | 数据上云 | 已用 Amplitude 分析栈的团队 |
| LaunchDarkly | SaaS | 实验 + 特性开关 + 渐进放量 | 数据上云 | 开关与发布耦合重的工程团队 |
| Optimizely | SaaS | Web 实验 + 特性实验 + 个性化 | 数据上云 | 营销/增长主导、预算充足 |
关于 Statsig:它于 2025-09-02 被 OpenAI 以 11 亿美元收购;随后在 2026-05-05,Amplitude 接手了 Statsig 的品牌与客户(官方措辞为战略合作/收购,原 Statsig 团队留在 OpenAI)。选型时请以 Amplitude 现在的产品页为准。
选型三条结论:
- 合规优先的出海业务默认"开源自建 + 仓库原生"。实验数据(尤其是用户 ID 与行为)在很多法域属于个人信息,能不出境就不出境,这一点和 10-01 数据主权篇的结论完全一致。
- 没有专职数据科学家的团队,优先选统计引擎完整的托管方案,不要自己从零写频率派检验——SRM、序贯、多重校正这些坑,自研团队几乎一定会踩。
- 仓库原生(warehouse-native)是被低估的架构选择:指标在你的数据仓库里算,实验平台只负责分流与分配,既省钱又符合数据治理的单一真源原则。
十、参考价格表
平台服务价格(官网公开口径,2026-10 采集):
| 平台 | 免费/入门 | 标准档 | 计费口径备注 |
|---|---|---|---|
| GrowthBook | 免费版:3 用户 / 1 项目,特性开关与实验不限量 | Pro $40 / 座 / 月(30 用户 / 3 项目,含 Bandit 与统计套件) | Enterprise 定制;托管仓库 100 万事件/月,超出约 $30/百万 |
| PostHog | 免费:每月 100 万事件(含实验、特性开关、回放) | 按用量阶梯 | 可自托管省托管费 |
| Amplitude Experiment(原 Statsig) | 免费:200 万事件/月 | Pro $150 / 月(500 万事件,超出 $0.05 / 千事件) | 事件口径随分析栈统一 |
| LaunchDarkly | 免费:$0/月,含 10 万实验 MAU/月与 A/B 测试 | 按量:$10 / 服务连接/月 + $8.33 / 千客户端 MAU/月 | 实验与开关同价体系 |
| Optimizely | — | 不公开定价,按报价(Web 实验约 $1,000/月起) | 需销售对接,年付为主 |
AWS 侧实验相关计费口径(官网公开):
| 计费项 | 单价 | 说明 |
|---|---|---|
| AppConfig 配置请求 | $0.0000002 / 请求 | 拉取配置的 API 调用 |
| AppConfig 配置下发 | $0.0008 / 下发 | 费用大头,按"目标数 × 更新频次"计 |
| AppConfig 实验小时 | $0.90 / 实验小时 | 不足 1 小时向上取整 |
| CloudWatch Evidently(历史) | $5 / 百万事件 + $7.50 / 百万分析单元 | 服务已于 2025-10-17 停服,仅供历史账单参考 |
| CloudWatch 自定义指标 | $0.30 / 指标 / 月 | 每个变体单独计 |
自建基础设施(新加坡区域,示意算例,非厂商报价):
| 成本项 | 示意规格 | 月成本(USD,示意) |
|---|---|---|
| 分流服务 | 2 × 2 核 4G 按量 | ≈ $170 |
| 指标/实验仓库 | 1 × 2 核 8G + 存储 | ≈ $110 |
| PostgreSQL(实验元数据) | 1 × 2 核 4G 托管 | ≈ $75 |
| 平台软件(开源自托管) | GrowthBook 自托管 | $0 |
| 合计 | — | ≈ $355 / 月(签 1 年节省计划后约 $240) |
说明:上表为非厂商报价的示意算例,用于量级判断,实际以各家官网实时报价为准;AWS Compute Savings Plans 官方标注最高省 66%、阿里云国际节省计划官方标注最高 76%(帮助文档口径最高 83%)。注意:平台订阅费往往不是大头,事件量与数仓查询费才是——一个日活 10 万的出海 App,每月实验事件随随便便上千万,用托管 SaaS 的事件阶梯会比基础设施贵得多。
十一、实操:分流、下发与 SRM 巡检
11.1 开源自托管(GrowthBook)最小部署
services:
growthbook:
image: growthbook/growthbook:latest
ports:
- "3000:3000"
- "3100:3100" # 行内注释:3100 为分流 SDK 端点
environment:
- MONGODB_URI=mongodb://mongo:27017/growthbook
- APP_ORIGIN=https://exp.example.com
depends_on:
- mongo
mongo:
image: mongo:7
volumes:
- gb_mongo:/data/db
volumes:
gb_mongo: {}
部署与健康检查:
// 拉起服务
docker compose up -d
// 校验分流端点存活
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:3100/healthcheck
// 查看分配日志是否持续写入(分流必须可回放)
docker compose logs --tail=50 growthbook | grep -i assignment
11.2 三云特性开关下发的"管道"命令
// AWS:建应用/环境/配置(AppConfig experimentation 的控制台入口在同一套资源下)
aws appconfig create-application --name checkout
aws appconfig create-environment --application-id <APP_ID> --name prod
aws appconfig create-configuration-profile --application-id <APP_ID> \
--name flags --location-uri hosted
aws appconfig create-hosted-configuration-version --application-id <APP_ID> \
--configuration-profile-id <PROF_ID> --content fileb://flags.json --content-type application/json
aws appconfig start-deployment --application-id <APP_ID> --environment-id <ENV_ID> \
--configuration-profile-id <PROF_ID> --configuration-version <VER> \
--deployment-strategy-id <STRATEGY_ID>
// 阿里云国际:MSE Nacos 发布开关(命名空间隔离环境)
// curl -X POST "https://<mse-endpoint>/nacos/v1/cs/configs" \
// -d "tenant=sg-prod&dataId=checkout.features&group=DEFAULT_GROUP&content=<json>"
// 腾讯云国际:TSE Polaris 用 tccli 管理配置
// tccli tse CreateConfigFile --InstanceId <ID> --Name checkout.features --Content <json>
11.3 实验元数据用 Terraform 固化(实验即代码)
resource "aws_appconfig_application" "exp" {
name = "checkout-experiments" # 尾随注释安全
}
resource "aws_appconfig_environment" "prod" {
name = "prod"
application_id = aws_appconfig_application.exp.id
}
resource "aws_appconfig_configuration_profile" "flags" {
application_id = aws_appconfig_application.exp.id
name = "checkout-flags"
location_uri = "hosted"
}
三条 IaC 纪律:开关默认值必须写进代码(配置中心挂了要能降级启动);实验的 salt 与层规划也进版本库(否则换层无从追溯);分配数据导出必须可重建。
11.4 SRM 日常巡检 SQL
-- 每天巡检:实际分流比例是否偏离设计值
SELECT variant,
COUNT(*) AS n,
COUNT(*) * 1.0 / SUM(COUNT(*)) OVER () AS ratio
FROM experiment_assignments
WHERE experiment_id = 'growth-homepage-20261012-01'
AND assigned_date = CURRENT_DATE
GROUP BY variant
ORDER BY variant;
-- 期望比例 0.50 / 0.50,若任一变体偏离超过 1%(大样本)即人工复核
十二、90 天四阶段落地路线
| 阶段 | 时间 | 目标 | 验收标准 |
|---|---|---|---|
| 一、管道先行 | 第 1–3 周 | 特性开关 + 确定性分桶 + 分流日志落库 | 同一用户跨服务桶号一致;分流日志可回放 |
| 二、单层跑通 | 第 4–6 周 | 跑通第一个单层实验,含 SRM 门禁 | 一个实验完整走完设计→结论→归档 |
| 三、分层扩容 | 第 7–10 周 | 引入域/层模型,2–3 个正交层并行 | 层间正交验证通过,无 SRM 告警 |
| 四、治理固化 | 第 11–13 周 | 注册流程 + 护栏指标 + 长期留白 + 知识库 | 10 分钟能回答"当前在跑哪些实验、各自结论" |
15 分钟验收四问:当前在跑多少实验、每个的 OEC 是什么、有没有 SRM 告警、最近三个实验的结论是什么。答不上来,说明平台只有工具没有治理。
十三、常见问题 FAQ
Q1:我们已经在用金丝雀发布了,还需要实验平台吗? 需要。金丝雀回答"新版本会不会挂",实验平台回答"这个改动值不值得上",两者目标函数不同。金丝雀通过 ≠ 改动有效。
Q2:正交分层是不是就是让多个实验同时跑? 不是。同时跑只是现象,正交的本质是"层间业务无交互 + 层间独立 salt"。业务上有交互的两个实验放不同层,结论照样被污染。
Q3:样本量怎么估算?
用 n ≈ 16 × p(1-p) / δ²。基线转化 10%、想检测 +1pp 时每组约 1.5 万。记住:可检测效应量减半,样本量涨四倍。
Q4:中途看了数据算不算偷看? 算。反复查看会抬高假阳性率。要么跑满再看,要么直接用序贯检验(always-valid)引擎,别用"名义 5%"硬扛。
Q5:AWS 现在还能用 CloudWatch Evidently 吗? 不能。AWS 已于 2025-10-17 停服 Evidently,控制台与资源均不可访问,官方建议迁移到 AppConfig。
Q6:只用 AppConfig 的实验功能够不够? 不够。AppConfig experimentation 提供分流、放量与分配数据导出,但不提供统计显著性分析,你得把数据导出到数仓(Redshift/Snowflake/Databricks)自行计算。
Q7:小团队(< 5 人)该自建还是买 SaaS? 建议先用 SaaS 免费档或开源托管版跑通流程,把精力放在"提假设、定指标、读结论"上。分流实现和统计引擎自研是最容易被低估的坑。
Q8:实验数据涉及 GDPR/个人信息怎么办? 把实验事件当成个人信息处理:能本地化的本地化,能用假名化 ID 的绝不用明文,跨境属于数据出境,须与 10-01 数据主权篇的合规框架一起设计。
十四、总结
三句话收尾:渐进式发布保证系统不出事,实验平台保证决策不出错,这是两条必须解耦的流水线;正交分层是"多跑实验"和"结论可信"之间唯一的桥,没有它就只能在"慢"和"脏"里二选一;三朵云都不卖实验平台,只卖分流管道,统计层与治理层永远是你自己的工程责任。先建管道、再跑单层、再做分层、最后上治理——顺序不可颠倒。
🚀 企业出海需要云架构咨询?通过 7.chengzicloud.cloud 联系我们,获取专属方案。我们提供多云架构设计、实验平台选型与数据合规落地的定制咨询。
相关阅读
- 企业出海多云渐进式发布(金丝雀/蓝绿/特性开关) — 先搞清"安全放量",再谈"效果验证"
- 企业出海多云配置中心架构(动态配置与配置治理) — 实验变体下发的底层管道
- 企业出海多云可观测与告警治理 — 实验结论所依赖的指标与护栏数据源
- 企业出海多云数据治理(元数据/血缘/质量/网格) — 实验指标口径的单一真源
- 企业出海多云研发效能治理(DORA × IDP) — 交付效率与业务价值的双轴度量
- 企业出海数据主权架构(边界/密钥主权/区域锁定/举证) — 实验数据的跨境合规框架
本文由 7.chengzicloud.cloud 提供,点击访问首页了解更多