億級(jí)流量實(shí)驗(yàn)平臺(tái)設(shè)計(jì)實(shí)踐
大家好,我是蟲爸。今天給大家分享一款億級(jí)流量實(shí)驗(yàn)平臺(tái)。在互聯(lián)網(wǎng)行業(yè),要上線一個(gè)策略(CTR預(yù)估、CVR預(yù)估等),或者一個(gè)功能,如果貿(mào)然全量上線,那么如果新策略效果不佳,可能會(huì)造成不小的損失,要么丟失用戶,要么損失收入。
那么怎樣才能避免此問題發(fā)生呢?這就引入了實(shí)驗(yàn)平臺(tái),通過對(duì)流量打標(biāo)簽,然后分析實(shí)驗(yàn)效果,從而再?zèng)Q定是否實(shí)驗(yàn)推全還是下線。
一、概念
實(shí)驗(yàn)平臺(tái),從字面意思來看,就是一個(gè)用來做實(shí)驗(yàn)的平臺(tái)。其 基本原理 就是把流量進(jìn)行分流,特定流量,匹配特定策略。不同批次的用戶,看到的不同的策略。然后通過曝光、點(diǎn)擊等數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,得出實(shí)驗(yàn)效果的好壞,從而決定是否推全該實(shí)驗(yàn)。
換句話說,就是為同一個(gè)目標(biāo)制定兩個(gè)方案(比如兩個(gè)頁面),將產(chǎn)品的用戶流量根據(jù)特定策略分割成 A/B 兩組,一組實(shí)驗(yàn)組,一組對(duì)照組,兩組實(shí)驗(yàn)同時(shí)運(yùn)行一段時(shí)間后分別統(tǒng)計(jì)兩組用戶的表現(xiàn),再將相關(guān)結(jié)果數(shù)據(jù)(比如 pv/uv、商機(jī)轉(zhuǎn)化率等)進(jìn)行對(duì)比,就可以科學(xué)地幫助決策。
通過對(duì)流量進(jìn)行分流,運(yùn)行實(shí)驗(yàn),統(tǒng)計(jì)實(shí)驗(yàn)數(shù)據(jù),進(jìn)行數(shù)據(jù)分析,然后得出實(shí)驗(yàn)效果。如下圖所示:

再根據(jù)實(shí)驗(yàn)效果,進(jìn)行反向數(shù)據(jù)分析,定位出實(shí)驗(yàn)效果不好的源,進(jìn)行頭腦風(fēng)暴,再次做實(shí)驗(yàn),從而最終達(dá)到理想的實(shí)驗(yàn)?zāi)康摹H缦聢D所示:

二、分層實(shí)驗(yàn)?zāi)P?/h2>
在進(jìn)行實(shí)驗(yàn)平臺(tái)講解之前,先介紹下實(shí)驗(yàn)平臺(tái)的理論基礎(chǔ),以便大家能夠更好的理解后面的內(nèi)容。
現(xiàn)在業(yè)界大部分實(shí)驗(yàn)平臺(tái),都基于谷歌2017年的一篇論文《Overlapping Experiment Infrastructure: More, Better, Faster Experimentation》,其模型架構(gòu)如下圖所示:

在該模型中,有幾個(gè)概念:
域(domain):劃分的一部分流量 層(layer):系統(tǒng)參數(shù)的一個(gè)子集 實(shí)驗(yàn)(exp):在一個(gè)域上,對(duì)一個(gè)或者多個(gè)參數(shù)修改,都將影響效果 流量在每個(gè)層被打散(分配函數(shù)),層與層之間流量正交
下圖【圖四】為筆者線上實(shí)驗(yàn)的一個(gè)簡略圖,在該圖中,總共有三個(gè)實(shí)驗(yàn)層,分別為CTR預(yù)估層,用戶畫像層和頻次策略層。
從圖四可以看到,流量在層之間穿梭,而一個(gè)流量只能命中一個(gè)層中的一個(gè)實(shí)驗(yàn),一個(gè)流量請(qǐng)求過程可能會(huì)命中多個(gè)層中的多個(gè)實(shí)驗(yàn)(每層命中一個(gè)實(shí)驗(yàn))。
使用分層實(shí)驗(yàn)?zāi)P停枰獫M足以下幾點(diǎn):
相關(guān)聯(lián)的策略參數(shù)位于同一實(shí)驗(yàn)層(即都是做CTR預(yù)估,那么CTR預(yù)估相關(guān)的實(shí)驗(yàn),就放在同一層,即CTR預(yù)估層,以方便做實(shí)驗(yàn)對(duì)比) 相互獨(dú)立的策略參數(shù)分屬于不同的實(shí)驗(yàn)層(如上圖中 ,CTR預(yù)估的實(shí)驗(yàn)和頻次實(shí)驗(yàn)是兩種性質(zhì)不同的實(shí)驗(yàn),因此要放在兩層來實(shí)現(xiàn),如果在一層的話,由于實(shí)驗(yàn)性質(zhì)不同,難以比較實(shí)驗(yàn)效果) 一個(gè)流量只能命中一個(gè)層中的一個(gè)實(shí)驗(yàn) 層之間的流量正交,不會(huì)互相影響(即層與層之間的實(shí)驗(yàn)不會(huì)互相影響,如【圖五】)

使用該分層模型作為實(shí)驗(yàn)平臺(tái)理論基礎(chǔ)的好處有以下幾點(diǎn):
可以作為一個(gè)獨(dú)立的部分,不與系統(tǒng)中的其他業(yè)務(wù)或者功能相互 影響 每一層流量都是100%的全量,可以避免流量切分過細(xì),保證實(shí)驗(yàn)間的可對(duì)比性、客觀性 層與層之間,流量獨(dú)立正交,不會(huì)互相影響
三、功能特點(diǎn)
一個(gè)可用或者完善的實(shí)驗(yàn)平臺(tái),需要有以下幾個(gè)功能:
支持多實(shí)驗(yàn)并發(fā)迭代 支持白名單體驗(yàn) 提供便捷的管理工具 便捷的查看實(shí)驗(yàn)效果分析數(shù)據(jù) 支持實(shí)驗(yàn)的切流和關(guān)閉 保證線上實(shí)驗(yàn)安全性 支持實(shí)驗(yàn)推全 支持功能定制化
下面,我們將從幾個(gè)功能點(diǎn)出發(fā),詳細(xì)講述各個(gè)功能的原理。
支持多實(shí)驗(yàn)并發(fā)迭代,指的是一個(gè)完善的實(shí)驗(yàn)平臺(tái),在功能上,需要支持多個(gè)實(shí)驗(yàn)同時(shí)運(yùn)行(包括同一層和不同層之間)。
支持白名單體驗(yàn):因?yàn)閷?shí)驗(yàn)分流有自己的策略,創(chuàng)建實(shí)驗(yàn)的用戶不一定能夠命中這個(gè)實(shí)驗(yàn),而白名單的功能就是讓在白名單的用戶能夠每次都命中該實(shí)驗(yàn)。
便捷的管理工具:這個(gè)指的是實(shí)驗(yàn)后臺(tái),一個(gè)實(shí)驗(yàn)后臺(tái)需要能夠創(chuàng)建實(shí)驗(yàn),打開關(guān)閉實(shí)驗(yàn)等
查看實(shí)驗(yàn)效果分析數(shù)據(jù):判斷一個(gè)實(shí)驗(yàn)效果的好壞,就是通過實(shí)驗(yàn)標(biāo)簽分析實(shí)驗(yàn)數(shù)據(jù),能夠很直觀的觀察到實(shí)驗(yàn)效果,從進(jìn)行下一步實(shí)驗(yàn)決策
實(shí)驗(yàn)的切流和關(guān)閉:實(shí)驗(yàn)的切流,指的是該實(shí)驗(yàn)需要一定百分比的流量進(jìn)行實(shí)驗(yàn),而實(shí)驗(yàn)關(guān)閉,則指的是停掉該實(shí)驗(yàn)
支持線上安全性:實(shí)驗(yàn)平臺(tái),本身就是起錦上添花的作用,其只是用來打?qū)嶒?yàn)標(biāo)簽的,不可本末倒置,影響了線上業(yè)務(wù)的正常功能
支持實(shí)驗(yàn)推全:一個(gè)實(shí)驗(yàn)效果如果好的話,就需要將全部的流量都命中該實(shí)驗(yàn),而實(shí)驗(yàn)推全就是達(dá)到此效果
支持功能定制:沒有一個(gè)實(shí)驗(yàn)平臺(tái)能夠滿足不同公司,甚至同一個(gè)公司不同部門之間的業(yè)務(wù)需求,但是,為了盡可能的向這個(gè)目標(biāo)靠攏,實(shí)驗(yàn)平臺(tái)需要盡可能的靈活,低耦合,能夠盡量的配置化。
四、架構(gòu)及模塊
實(shí)驗(yàn)平臺(tái)必備的三個(gè)模塊,分別為:
管理后臺(tái) 實(shí)驗(yàn)后臺(tái) 分流平臺(tái)
管理后臺(tái)主要是管理實(shí)驗(yàn)的,包括創(chuàng)建和停止實(shí)驗(yàn)等。
實(shí)驗(yàn)后臺(tái)與管理后臺(tái)進(jìn)行數(shù)據(jù)上的交互,將管理后臺(tái)的消息轉(zhuǎn)換成特有的消息,進(jìn)行轉(zhuǎn)發(fā)和持久化。
分流平臺(tái),其一接收實(shí)驗(yàn)后臺(tái)的實(shí)驗(yàn)消息建立內(nèi)部維度索引,其二接收線上流量,根據(jù)流量屬性,給流量打上對(duì)應(yīng)的標(biāo)簽。

上圖,是一個(gè)實(shí)驗(yàn)平臺(tái)架構(gòu)圖,下面從創(chuàng)建實(shí)驗(yàn)角度,和流量的角度進(jìn)行講解。
創(chuàng)建實(shí)驗(yàn)角度:
1、在管理后臺(tái)創(chuàng)建對(duì)應(yīng)的實(shí)驗(yàn)
2、管理后臺(tái)將創(chuàng)建的實(shí)驗(yàn)信息發(fā)送給實(shí)驗(yàn)后臺(tái)
3、實(shí)驗(yàn)后臺(tái)將實(shí)驗(yàn)首先發(fā)送至消息系統(tǒng)(kafka等),然后將實(shí)驗(yàn)落地持久化(DB)
4、分流平臺(tái)消耗消息系統(tǒng)中的實(shí)驗(yàn)消息,加載至內(nèi)存
流量角度:
1、 流量攜帶其基本屬性(用戶畫像,app信息等)請(qǐng)求分流平臺(tái)
2、 分流平臺(tái)根據(jù)流量屬性,進(jìn)行定制化匹配,然后使用分流算法,計(jì)算實(shí)驗(yàn)標(biāo)簽
3、流量返回至調(diào)用方SDK后,SDK上報(bào)曝光、點(diǎn)擊等信息至數(shù)據(jù)總線(大數(shù)據(jù)集群)
4、數(shù)據(jù)計(jì)算服務(wù)分析大數(shù)據(jù)集群的數(shù)據(jù),計(jì)算對(duì)應(yīng)的指標(biāo)展示在管理后臺(tái)。
實(shí)驗(yàn)平臺(tái),從模塊劃分上 ,如下圖所示:
五、設(shè)計(jì)與實(shí)現(xiàn)
在具體介紹下文之前,我們先理解一個(gè)概念,以便能更方便的理解下述內(nèi)容。

bucket即桶。實(shí)驗(yàn)平臺(tái)最底層,將流量進(jìn)行hash之后,只能流入某一個(gè)桶里。
流量劃分
一般有以下幾種劃分方式:
完全隨機(jī) 用戶id哈希。 該流量劃分會(huì)使同一個(gè)用戶會(huì)一直命中同一實(shí)驗(yàn),從而保證了用戶體驗(yàn)的一致性;而且也滿足對(duì)同一用戶具有累積效應(yīng)的策略的實(shí)驗(yàn)需求。但存在的問題就是,對(duì)于一些工具類屬性,沒有用戶id一說,只有設(shè)備id比如idfa和imei這些標(biāo)記,但是隨著系統(tǒng)升級(jí),這倆標(biāo)記很難再獲取到,所以就需要系統(tǒng)能夠生成用戶唯一id 用戶id + 日期作為一個(gè)整體進(jìn)行哈希 這是一種更為嚴(yán)格的保證流量均勻性的分流方式,可以保證流量劃分在跨時(shí)間維度上更為均勻。 會(huì)犧牲用戶請(qǐng)求跨時(shí)間區(qū)間的一致性 跟上面這種用戶id哈希存在同樣的問題 用戶id尾號(hào)進(jìn)行哈希 流量不均勻 也會(huì)存在用戶id所存在的問題
為了兼容上述幾種哈希劃分方式的優(yōu)點(diǎn),而摒棄其缺點(diǎn),我們引入了第四種流量劃分方式:
bucket_id?=?hash(uid?+?layer_id)?%?1000
常見的哈希算法有md5,crc以及MurmurHash等。
MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個(gè)128位(16字節(jié))的散列值(hash value),MD5算法將數(shù)據(jù)(如一段文字)運(yùn)算變?yōu)榱硪还潭ㄩL度值,是散列算法的基礎(chǔ)原理。由美國密碼學(xué)家 Ronald Linn Rivest設(shè)計(jì),于1992年公開并在 RFC 1321 中被加以規(guī)范。 CRC循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check)是一種根據(jù)網(wǎng)絡(luò)數(shù)據(jù)包或電腦文件等數(shù)據(jù),產(chǎn)生簡短固定位數(shù)校驗(yàn)碼的一種散列函數(shù),由 W. Wesley Peterson 于1961年發(fā)表。生成的數(shù)字在傳輸或者存儲(chǔ)之前計(jì)算出來并且附加到數(shù)據(jù)后面,然后接收方進(jìn)行檢驗(yàn)確定數(shù)據(jù)是否發(fā)生變化。由于本函數(shù)易于用二進(jìn)制的電腦硬件使用、容易進(jìn)行數(shù)學(xué)分析并且尤其善于檢測(cè)傳輸通道干擾引起的錯(cuò)誤,因此獲得廣泛應(yīng)用。 MurmurHash 是一種非加密型哈希函數(shù),適用于一般的哈希檢索操作。由 Austin Appleby 在2008年發(fā)明,并出現(xiàn)了多個(gè)變種,與其它流行的哈希函數(shù)相比,對(duì)于規(guī)律性較強(qiáng)的鍵,MurmurHash的隨機(jī)分布特征表現(xiàn)更良好。
其中,第三種MurmurHash算法,已經(jīng)被很多開源項(xiàng)目使用,比如libstdc++ (4.6版)、Perl、nginx (不早于1.0.1版)、Rubinius、 libmemcached、maatkit、Hadoop以及redis等。而且經(jīng)過大量的測(cè)試,其流量分布更加均勻,所以筆者采用的是此種哈希算法。
白名單
白名單,在實(shí)驗(yàn)平臺(tái)中算是比較重要的功能,其目的就是存在于白名單中的用戶優(yōu)先于流量分桶,命中某個(gè)實(shí)驗(yàn)。
需要注意的一點(diǎn)是,假如白名單所在實(shí)驗(yàn)和流量經(jīng)過哈希分桶之后的實(shí)驗(yàn)是兩個(gè)不同的實(shí)驗(yàn),這就只能以白名單優(yōu)先級(jí)為最高,換句話說,如果白名單命中了某個(gè)實(shí)驗(yàn),那么在該層上,就不該再命中其他實(shí)驗(yàn)。
管理后臺(tái)
用來管理實(shí)驗(yàn)的,比如權(quán)限管理、層管理等,如下圖:
在上圖中,管理后臺(tái),主要有以下幾個(gè)模塊:
實(shí)驗(yàn)管理,顧名思義,管理現(xiàn)有實(shí)驗(yàn)和創(chuàng)建新實(shí)驗(yàn) 實(shí)驗(yàn)列表:現(xiàn)有已經(jīng)創(chuàng)建的所有實(shí)驗(yàn) 創(chuàng)建實(shí)驗(yàn):創(chuàng)建新實(shí)驗(yàn) 基礎(chǔ)配置,一些配置管理信息都在此模塊中 實(shí)驗(yàn)層:增刪改實(shí)驗(yàn)層 其他:針對(duì)實(shí)驗(yàn)做的一些定制化,比如增加廣告位定向、年齡定向等 系統(tǒng)管理,主要針對(duì)用戶及其分組 分組管理,管理用戶屬于某個(gè)分組 實(shí)驗(yàn)平臺(tái)的用戶權(quán)限管理,比如普通權(quán)限或者管理員權(quán)限
需要注意的是,用戶管理這塊的權(quán)限非常重要,因?yàn)閷?shí)驗(yàn)平臺(tái)可能涉及到很核心的實(shí)驗(yàn),比如商業(yè)化中策略影響的實(shí)驗(yàn),所以用戶之間不能看到其他人創(chuàng)建的實(shí)驗(yàn),這層物理隔離非常重要。
分流平臺(tái)
分流評(píng)估 ,顧名思義,對(duì)流量進(jìn)行分離,有兩個(gè)功能:
承接實(shí)驗(yàn)后臺(tái)的實(shí)驗(yàn)消息,建立維度索引 接收線上流量,根據(jù)維度索引、白名單以及對(duì)用戶設(shè)備哈希分桶后,給流量打標(biāo)簽
分流平臺(tái),是整個(gè)實(shí)驗(yàn)平臺(tái)的核心模塊,一定要高性能,高可靠。
六、實(shí)驗(yàn)效果
請(qǐng)求的實(shí)驗(yàn)信息會(huì)以標(biāo)簽的形式上報(bào)給sdk,sdk在進(jìn)行曝光點(diǎn)擊的時(shí)候,會(huì)將這些信息上報(bào),比如"123_456_789"格式。最終,這些會(huì)經(jīng)過廣告實(shí)時(shí)流系統(tǒng)進(jìn)行消費(fèi)、數(shù)據(jù)清洗、實(shí)驗(yàn)效果指標(biāo)計(jì)算等工作。由于廣告系統(tǒng)是多業(yè)務(wù)指標(biāo)系統(tǒng),包括售賣率,ECPM, CTR, ACPE,負(fù)反饋率、財(cái)務(wù)消耗計(jì)算等。廣告實(shí)時(shí)流系統(tǒng)還需要日志的關(guān)聯(lián)工作,比如關(guān)聯(lián)廣告互動(dòng)日志,廣告負(fù)反饋日志。實(shí)時(shí)流的計(jì)算的結(jié)果,會(huì)落地到druid 系統(tǒng),方便實(shí)驗(yàn)效果數(shù)據(jù)的快速檢索和二度加工。實(shí)驗(yàn)效果實(shí)時(shí)指標(biāo)數(shù)據(jù)計(jì)算延遲控制在一定的范圍內(nèi)。

七、結(jié)語
最后需要提的是,實(shí)驗(yàn)平臺(tái)在效果跟蹤決策方面是有一定的局限性的。實(shí)驗(yàn)平臺(tái)可以進(jìn)行實(shí)驗(yàn)效果的快速跟蹤,但是卻很難進(jìn)行實(shí)驗(yàn)效果好壞的決策。比如:如果對(duì)比實(shí)驗(yàn)效果指標(biāo)值全部提高或下降了,可以簡單認(rèn)為對(duì)比實(shí)驗(yàn)的策略調(diào)整起正向作用或者反向作用;如果對(duì)比實(shí)驗(yàn)的實(shí)驗(yàn)效果指標(biāo)值部分提高了,部分下降了,就不太好認(rèn)定了。還有,實(shí)驗(yàn)效果的短期效應(yīng)和長期效應(yīng)也可能是不一致,這將大大增加了實(shí)驗(yàn)效果好壞的決策難度。
因此,實(shí)驗(yàn)平臺(tái)是可以快速提升廣告業(yè)務(wù)策略迭代效率的工具,但是要想進(jìn)行實(shí)驗(yàn)好壞評(píng)定的決策,還需要很長的路要走。
