很容易想到做a/b test,我們可以用一種方式把全網流量分成100份,取其中兩份流量來進行實驗:乙份作為對照組,乙份作為實驗組。由於實驗所佔流量為全網的1%,故而影響範圍小,即使出現了負收益也不影響**。
假設每次請求中都有req_id,我們對req_id取模,然後根據餘數來劃分流量。在實際工程開發中,通常會對每個實驗產生乙個唯一的sample_id作為試驗標識,後端日誌記錄該sample_id的相關資訊,統計組對離線日誌進行統計,對乙個實驗下的兩個sample_id(對照組sample_id,實驗組sample_id)的各種統計指標進行對比,來確認試驗效果。如下圖所示:
有兩個實驗:實驗1和實驗n。 每個實驗又分為對照組(基線)和實驗組,每組流量大小相等。 實驗1對照組流量是req_id % 100 = 0,實驗組是req_id % 100 = 1;實驗n對照組流量是req_id % 100 = 98,實驗組是req_id % 100 = 99。只要req_id最後兩位分布夠均勻,那麼每份流量大小基本相同。
但是這麼做有乙個問題,就是最多允許同時進行50個實驗(每個實驗占用兩份流量)。在今天的網際網路企業中,可能同時進行成千上萬的功能開發,而每個功能背後都需要進行實驗,如何盡可能同時滿足這些需求呢?我們對實驗進行分層:即同乙份流量可能同時命中兩個或者多個實驗,如下圖所示,乙份流量可以同時命中實驗1和實驗n:
但是這麼做需要有乙個前提,就是兩個層的實驗不能互相衝突,每個層只能修改自己的引數,即如果實驗1和實驗n同時修改引數a,則這兩個實驗必須在同一層,層與層之間的劃分就看層間引數是否有交集。
最終我們根據引數來劃分層,有依賴關係的引數必須劃分在同一層(例如頁面背景顏色和字型顏色必須在同一層,如果頁面背景顏色和字型顏色都被設定成藍色,那麼我們就看不到頁面上的字了),沒有依賴關係的引數可以劃分在不同層,每個引數只出現在乙個層中,不會出現在多層中。
原來每層能做50個實驗,現在把引數分了n層,每層都可以同時進行50個實驗,那麼現在可同時進行50 * n 個實驗,n為實驗層數。
但是現在還有乙個問題,如上圖所示實驗1和實驗n用的是完全相同的流量,這可能會有一些問題:我們雖然確認實驗1和實驗n沒有引數衝突,但是無法確定實驗1和實驗n的實驗效果是否互相影響。比如實驗1進行頁面改版使得頁面更美觀,實驗n對後端推薦模型進行引數優化使得推薦內容更有趣,這兩個實驗不修改相同的引數所以可以分在不同的層中,但是這兩個實驗都會影響使用者頁面停留時長和使用者的點選率,如果流量完全一樣,我們統計的結果到底是實驗1產生的影響還是實驗n產生的影響呢?我們必須消除這個影響。
如下圖所示:
大多時候,我們需要保持使用者在產品使用上的體驗一致性,例如:不能前一次看到頁面字型顏色為藍色,重新整理一次頁面字型變成綠色。這就提醒我們在進行流量劃分的時候,不是所有實驗都能夠用req_id的雜湊值進行劃分,我們必須使用uid的雜湊值進行劃分,如果沒有uid我們可以使用cookie的雜湊值進行劃分。所以,這裡面有乙個流量優先順序劃分順序: uid > cookie > req_id。
當我們在小流量下驗證了一種改進是有效的,那麼如何把這個改進在全流量上生效呢?有如兩種方法。
我們針對第二種方式對試驗平台進行乙個改進,對每乙個引數增加乙個新的發射層(launch layer),如下圖所示:
當小流量實驗需要全量上線時,實驗進行層間轉移:把實驗從實驗層搬到發射層,通過調節發射層的實驗組與對照組(一般是基線,即線上流量用的引數預設值)比例來使得改進最終用於全流量,這樣既不影響原有的實驗流量分配,又能夠快速調節流量大小。在調節期間,如果發現問題,可以控制發射層實驗組與對照組的流量比例來止損。當我們的改進在發射層上全流量上線後,觀察一段時間沒有什麼問題,就可以放心通過修改**來把改進應用到線上全流量,並且撤掉發射層。
到此為止,我們討論了實驗平台的設計的理論依據,接下來就是工程開發。實驗平台應該在一次訪問的入口處,根據本次請求的相關資訊來決定命中哪個實驗並生成乙個唯一的sample_id,之後把sample_id傳遞到下游服務;下游各個服務根據sample_id來人為修改**,根據sample_id做不同的動作,並且記錄相關日誌。
對於乙個成熟的實驗平台來說,其應該具備如下幾個功能:
參考文獻
觸目驚心的網際網路流量劫持
這篇文章發出去的時候,我還是有點戰戰兢兢的,我怕萬一是自己 搞錯了,被騰訊的人懟回來,有點禁不住。以前在微博 某雲服務客戶批評某巨頭雲的文章時被人家技術專家懟過,這事我一直還都記著呢。結果沒想到,騰訊多個部門的技術人來跟我核實,尋求反饋,還說要送禮物給我。而且他們還主動跟我提及了一些更多的資訊,比如...
網際網路之父Vint Cerf 網際網路的下乙個十年
據國外 報道,谷歌在自己的官方部落格上發表了對網際網路未來發展的觀點。在採訪了10位頂級電腦專家後,google首席網際網路顧問 有網際網路之父美譽的 vint cerf發表文章認為,10年來網際網路的發展對人們的生活產生了巨大影響,改變了政治 娛樂 文化 商業 醫療 環境和所有能想到的東西。未來網...
什麼是網際網路?網際網路如何運作?
網際網路是乙個互聯計算機網路的全球系統,它使用網際網路協議套件 tcp ip 連線全球數十億臺裝置。它是乙個由數百萬個本地到全球範圍的私人 公共 學術 商業和 網路組成的網路中的網路,通過廣泛的電子 無線和光纖網路技術相互連線。網際網路承載廣泛的資訊資源和服務,例如互聯超文字文件和全球資訊網 www...