在軟體開發中,A/B 測試(A/B Testing,一種將用戶隨機分為兩組,分別體驗不同版本以比較成效的實驗方法)在單一小規模產品中並不複雜。但當面對像 Google 這樣擁有全球分佈式架構、數千個互連服務且流量巨大的環境時,簡單的隨機分組就不足以應對。如果每個服務都各自實作分組邏輯,會導致用戶在不同服務間切換時,實驗狀態不一致,進而導致數據污染,讓分析結果失去參考價值。
為了克服這個挑戰,Google 建立了一套協調式的全球服務集群實驗系統。這套系統的核心目的在於將整個數據中心視為一個實驗室,透過標準化的基礎設施,確保在極大規模下依然能獲得具有統計學意義的因果信號。
統一的分組層與決定性分配
在大型分佈式系統中,最困難的是確保用戶在經過多層基礎設施、不同後端系統或不同前端界面時,始終被分配到同一個實驗組。Google 透過建立一個統一的分組層(Unified Assignment Layer)來解決這個問題。
這個分組層不再讓每個產品或服務獨立決定用戶分組,而是使用共享的基礎設施來管理配置與分配邏輯。其關鍵在於決定性(Deterministic)的分配方式,也就是說,對於同一個用戶或會話,系統每次計算出的分組結果必須一致。此外,系統支持層級化分配(Hierarchical Allocation),這允許團隊在不同的技術棧層級運行實驗,同時有效減少多個重疊實驗之間的衝突,避免用戶同時被過多互斥的實驗影響。
從分配到暴露:精準的度量機制
對於工程師來說,必須區分分配(Assignment)與暴露(Exposure)這兩個概念。分配是指系統決定用戶屬於 A 組或 B 組;而暴露是指用戶實際上看到了該實驗功能。
如果僅根據分配數據來分析,會將那些雖然被分到實驗組但從未觸發該功能的用戶也算入分析,這會稀釋實驗效果,導致結果不準確。Google 的系統強調暴露日誌(Exposure Logging)的記錄,精確捕捉用戶何時且如何接觸到實驗處理。透過這種方式,後端分析系統能區分出真正受影響的人群,大幅提升指標的可靠性。
低延遲的配置傳播與安全護欄
在每秒處理數百萬次請求的高吞吐環境中,如果每次判斷用戶分組都要請求中央伺服器,會造成巨大的延遲。因此,Google 採用了配置傳播(Configuration Propagation)機制。實驗定義會預先分發到各個服務節點,讓服務能夠在本地端(Locally)快速評估實驗狀態,消除運行時對中央系統的依賴。
同時,為了防止實驗導致大規模系統崩潰,系統內建了安全護欄(Guardrails)。這些護欄能限制實驗流量的上限,或在觸發安全約束時自動停止實驗,確保在追求數據洞察的同時,不會犧牲系統的穩定性。
端到端的分析視角
這套體系將實驗基礎設施與分析流水線式的分析管道(Analytics Pipelines)緊密結合。這意味著團隊不再只能觀察單一服務的指標(例如:某個 API 的延遲是否降低),而是能觀察整個用戶旅程(End-to-End User Journey)的影響。
透過將實驗原語(Experimentation Primitives,指最基本的分配與度量邏輯)集中化,Google 降低了各產品團隊的維運成本,讓開發者能更快速地迭代,並在做出產品決策時擁有更高的信心。
來源:infoq.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。