Twitter廣告之“道”

來(lái)源:知乎
作者: 經(jīng)濟(jì)系程序員
時(shí)間:2020-08-18
3098
Twitter完成了廣告平臺(tái)的重構(gòu),并用博文Accelerating ad product development at Twitter記錄了這一過(guò)程,對(duì)從事AdServer工作的我很有啟發(fā)。我根據(jù)自己有限的知識(shí),對(duì)全文進(jìn)行了翻譯,并在局部進(jìn)行了重寫。

譯者的話

我是酥酥,目前在Tubi用Akka和Scala搭建AdServer,此前在Twitter做廣告API的開(kāi)發(fā)。我在從經(jīng)濟(jì)系畢業(yè)生到硅谷程序員一文中提到,在我離開(kāi)Twitter前,Twitter的廣告平臺(tái)組剛開(kāi)始風(fēng)風(fēng)火火地對(duì)AdServer進(jìn)行微服務(wù)化重構(gòu),項(xiàng)目名稱Project Tao(道)。如今一年多過(guò)去,Twitter完成了廣告平臺(tái)的重構(gòu),并用博文Accelerating ad product development at Twitter記錄了這一過(guò)程,對(duì)從事AdServer工作的我很有啟發(fā)。我根據(jù)自己有限的知識(shí),對(duì)全文進(jìn)行了翻譯,并在局部進(jìn)行了重寫。

康威定律指出,"組織的架構(gòu)決定系統(tǒng)的架構(gòu)"。Twitter廣告團(tuán)隊(duì)也不例外。2010年,廣告團(tuán)隊(duì)有約15名工程師和2800萬(wàn)美元的收入,到了2019年,團(tuán)隊(duì)增長(zhǎng)至數(shù)百名工程師,有約34億美元的收入。期間,Twitter廣告系統(tǒng)的功能和復(fù)雜性一直在增加,而團(tuán)隊(duì)或服務(wù)的運(yùn)營(yíng)模式并沒(méi)有大幅改變。

團(tuán)隊(duì)早期的系統(tǒng)架構(gòu)很適合初創(chuàng)公司,有利于拋下之前的決策包袱,快速迭代。廣告后端大致分為三個(gè)團(tuán)隊(duì)。平臺(tái)(Platform)、科學(xué)(Science)和產(chǎn)品(Product)。團(tuán)隊(duì)的最終目標(biāo)是:快速構(gòu)建和迭代廣告產(chǎn)品,幫助Twitter實(shí)現(xiàn)盈利。

Twitter的廣告平臺(tái)由基礎(chǔ)設(shè)施和核心組件構(gòu)成,其中核心組件又包括AdServer、計(jì)費(fèi)(billing)、數(shù)據(jù)基礎(chǔ)設(shè)施、分析(analytics)等系統(tǒng)。其中,單體AdServer(Monolithic AdServer)是廣告平臺(tái)的核心服務(wù)。它從Twitter客戶端獲取廣告請(qǐng)求,根據(jù)用戶信息和廣告主的定向(targeting)條件,對(duì)廣告池里的候選廣告進(jìn)行排名,篩選出最符合條件的廣告,然后進(jìn)行次價(jià)拍賣(second price auction),最后為用戶發(fā)送最相關(guān)的廣告作為響應(yīng)。

團(tuán)隊(duì)分工方面,平臺(tái)團(tuán)隊(duì)負(fù)責(zé)搭建可靠、高性能的單體AdServer,并承擔(dān)部署和oncall的責(zé)任。產(chǎn)品團(tuán)隊(duì)的重點(diǎn)則是根據(jù)Twitter前端產(chǎn)品團(tuán)隊(duì)提的需求,在AdServer上做改動(dòng)。本質(zhì)上,平臺(tái)團(tuán)隊(duì)扮演一個(gè)把關(guān)的角色,對(duì)改動(dòng)和服務(wù)進(jìn)行全面的控制。產(chǎn)品團(tuán)隊(duì)則在平臺(tái)團(tuán)隊(duì)的把關(guān)下,在代碼庫(kù)的各處做改動(dòng)。

基于這種模式,Twitter打造了多款成功的廣告產(chǎn)品,它們的目標(biāo)各不相同,復(fù)雜度越來(lái)越高。Promoted Tweets(推廣推文)首先推出,它幫助品牌覆蓋廣大的受眾,以提高品牌產(chǎn)品的知名度。Promoted Trend(推廣趨勢(shì),類似于微博熱搜)使得品牌能夠占用全部Twitter用戶的探索欄全天的時(shí)間。Mobile App Promotion(移動(dòng)app推廣)鼓勵(lì)用戶下載廣告主所要推廣的手機(jī)app。Web Clicks(網(wǎng)頁(yè)點(diǎn)擊)鼓勵(lì)用戶訪問(wèn)品牌網(wǎng)站。Promoted Video(推廣視頻)讓品牌通過(guò)視頻這種更容易講故事的媒介來(lái)做推廣,還支持對(duì)廣告覆蓋面和效果的衡量。

這種模式在小規(guī)模的工程師團(tuán)隊(duì)中效果非常好,迭代速度很快。但隨著業(yè)務(wù)和團(tuán)隊(duì)的增長(zhǎng),平臺(tái)團(tuán)隊(duì)開(kāi)始成為功能迭代的瓶頸。為了更好地說(shuō)明這一點(diǎn),下面首先概述一個(gè)廣告請(qǐng)求的流程。

廣告請(qǐng)求的工作流

為了提供最相關(guān)的廣告,我們?cè)趶V告請(qǐng)求路徑中使用以下兩個(gè)組件:Ad Mixer和單體AdServer。

Ad Mixer是ad serving管道的網(wǎng)關(guān)(gateway)服務(wù)。每當(dāng)收到一個(gè)來(lái)自客戶端的廣告請(qǐng)求,它都會(huì):

·將請(qǐng)求轉(zhuǎn)發(fā)給單體AdServer,并接收來(lái)自AdServer的候選廣告響應(yīng)。

·執(zhí)行次價(jià)拍賣,根據(jù)拍賣結(jié)果決定將要展示的廣告。

·儲(chǔ)存被展示的廣告的信息,根據(jù)用戶與廣告的交互行為,向廣告商收費(fèi)。(譯者注:例如,如果用戶瀏覽了廣告,Twitter向廣告商收取x元。如果用戶瀏覽并下載了被推廣的app,Twitter可能向廣告商收取x+y元。)

單體AdServer負(fù)責(zé)對(duì)于每一個(gè)請(qǐng)求,考慮每一個(gè)符合條件的廣告,并將最佳的候選廣告返回給AdMixer。考慮到Twitter廣告產(chǎn)品的規(guī)模,該服務(wù)是分片(sharded)的,這樣每個(gè)分片只考慮全部候選廣告的一個(gè)子集。這種分片方案還使并行計(jì)算成為可能,滿足對(duì)廣告請(qǐng)求延遲的嚴(yán)格要求(要求在200-500毫秒不等)。

v2-7b3aec78f8862eafab05647f437d5046_720w.jpg

譯者注:拆分前,廣告請(qǐng)求的工作流。

譯者注:在此需要簡(jiǎn)單了解廣告的三級(jí)結(jié)構(gòu):廣告組/campaign-廣告計(jì)劃/line item-廣告創(chuàng)意/creative。一個(gè)廣告組對(duì)應(yīng)一到多個(gè)廣告計(jì)劃,一個(gè)廣告計(jì)劃對(duì)應(yīng)一到多個(gè)廣告創(chuàng)意。廣告組描述一次推廣,例如“Nike瑜伽裝備2020秋季推廣”。廣告計(jì)劃通常包含對(duì)目標(biāo)群體的描述,如“男性推廣”、“女性推廣”和“兒童推廣”,分別對(duì)應(yīng)于三個(gè)目標(biāo)群體。廣告創(chuàng)意描述具體要展示的內(nèi)容,可能是一段視頻、一張海報(bào)、或一段文字。

每個(gè)AdServer分片,都根據(jù)它的候選廣告子集,執(zhí)行以下步驟。

·候選廣告選擇。我們?yōu)橛脩籼蕹幌嚓P(guān)(不符合年齡、地區(qū)或興趣等)的廣告,篩選出符合條件的廣告計(jì)劃。(譯者注:例如,若請(qǐng)求來(lái)自一個(gè)女性用戶,則篩除有關(guān)“男性推廣”的廣告計(jì)劃。)

·廣告創(chuàng)意的擴(kuò)展和產(chǎn)品邏輯。我們根據(jù)Twitter的產(chǎn)品規(guī)則(因產(chǎn)品種類而異),將每一個(gè)候選廣告計(jì)劃擴(kuò)展為一組廣告創(chuàng)意,并根據(jù)產(chǎn)品規(guī)則作進(jìn)一步的過(guò)濾。(譯者注:將候選廣告擴(kuò)展為廣告創(chuàng)意的過(guò)程可能涉及實(shí)時(shí)競(jìng)價(jià),即Real-time bidding,指AdServer根據(jù)廣告計(jì)劃的定向信息和用戶信息,對(duì)廣告交易所等第三方進(jìn)行競(jìng)價(jià)請(qǐng)求,從第三方獲取動(dòng)態(tài)報(bào)價(jià)及創(chuàng)意信息。)

·候選廣告排名(包括早期過(guò)濾)。我們?cè)诋a(chǎn)品邏輯階段后,根據(jù)用戶點(diǎn)擊廣告的可能性(調(diào)用實(shí)時(shí)訓(xùn)練的機(jī)器學(xué)習(xí)模型)、廣告商的競(jìng)價(jià)信息和拍賣特征,對(duì)候選廣告進(jìn)行評(píng)分和排名。

從2010年到2018年,AdServer的邏輯日漸復(fù)雜。結(jié)果是:

·每次部署有包含數(shù)百個(gè)改動(dòng);(譯者注:Twitter出于各項(xiàng)考慮,沒(méi)有使用持續(xù)部署的方式,因此一次部署包含很多改動(dòng))

·雖然平臺(tái)團(tuán)隊(duì)管理著AdServer,但AdServer的主要改動(dòng)卻是來(lái)自產(chǎn)品團(tuán)隊(duì),導(dǎo)致兩個(gè)團(tuán)隊(duì)“互為掣肘”。

此外,AdServer的幾個(gè)步驟之間沒(méi)有劃定明確的邊界,缺乏有效的機(jī)制來(lái)確保屬于"廣告創(chuàng)意的擴(kuò)展和產(chǎn)品邏輯"的代碼不被加入到"候選廣告選擇"或"候選廣告排名"中。不清晰的邊界還給產(chǎn)品團(tuán)隊(duì)的工程師(譯者注:以下簡(jiǎn)稱產(chǎn)品工程師)帶來(lái)了額外的復(fù)雜性:?jiǎn)误wAdServer本就是一個(gè)黑盒子,組件間強(qiáng)耦合,缺了哪一塊,AdServer都無(wú)法正常工作。產(chǎn)品工程師只了解AdServer的局部,很難測(cè)試。有時(shí),一個(gè)很簡(jiǎn)單的改動(dòng)從開(kāi)始開(kāi)發(fā)到部署至生產(chǎn)中需要一個(gè)月的時(shí)間。

v2-69169220f47f5652fe56d17e9c71c3c2_720w.jpg

譯者注:?jiǎn)误wAdServer的邏輯復(fù)雜。

廣告產(chǎn)品功能的生命周期

在2018年,基于上述平臺(tái)團(tuán)隊(duì)和產(chǎn)品團(tuán)隊(duì)的結(jié)構(gòu),一個(gè)視頻廣告產(chǎn)品功能的生命周期如下:

v2-1f1946e1bf1792455b479102534c541b_720w.png

代碼考古

由于產(chǎn)品和平臺(tái)的耦合,業(yè)務(wù)邏輯和基礎(chǔ)架構(gòu)組件之間缺乏清晰的API邊界,AdServer代碼的復(fù)雜度指數(shù)爆炸。產(chǎn)品工程師首先需要理解錯(cuò)綜復(fù)雜的平臺(tái)組件和產(chǎn)品組件,并試圖弄清楚當(dāng)前AdServer是怎樣工作的。

設(shè)計(jì)

隨后,產(chǎn)品工程師將明確:需要對(duì)系統(tǒng)進(jìn)行哪些改動(dòng)?這里的挑戰(zhàn)包括:產(chǎn)品工程師難以完全理解視頻產(chǎn)品的改動(dòng)對(duì)運(yùn)行在同一單片AdServer中的其他廣告產(chǎn)品的影響。此外,他們也很難估計(jì)改動(dòng)對(duì)性能的影響。

咨詢平臺(tái)團(tuán)隊(duì)

一旦設(shè)計(jì)準(zhǔn)備就緒,產(chǎn)品團(tuán)隊(duì)的下一步將是與平臺(tái)團(tuán)隊(duì)對(duì)接,由平臺(tái)團(tuán)隊(duì)負(fù)責(zé)提供指導(dǎo)和代碼審查。然而現(xiàn)實(shí)中,由于平臺(tái)團(tuán)隊(duì)負(fù)責(zé)平臺(tái),而產(chǎn)品團(tuán)隊(duì)負(fù)責(zé)產(chǎn)品,兩個(gè)團(tuán)隊(duì)的激勵(lì)并不總是一致的,這導(dǎo)致產(chǎn)品的很多請(qǐng)求被平臺(tái)爭(zhēng)論甚至駁回,兩個(gè)團(tuán)隊(duì)都感到失望和沮喪。

發(fā)布

一旦代碼通過(guò)審查,被合并,產(chǎn)品團(tuán)隊(duì)需要再次依靠平臺(tái)團(tuán)隊(duì)進(jìn)行部署。新功能的測(cè)試往往十分困難,有時(shí)一個(gè)部署要包括多達(dá)200個(gè)改動(dòng)。此外,由于多個(gè)產(chǎn)品的邏輯運(yùn)行在同一個(gè)強(qiáng)耦合的單體AdServer中,一個(gè)錯(cuò)誤的改動(dòng)可能阻塞整個(gè)部署,從而影響到其它產(chǎn)品團(tuán)隊(duì)。最終的測(cè)試要到發(fā)布后才能完成,且需要不同團(tuán)隊(duì)的參與,因此修復(fù)突發(fā)bug的時(shí)間難以預(yù)測(cè)。

解決方案

引入產(chǎn)品競(jìng)價(jià)器,加速產(chǎn)品迭代

我們從多個(gè)方面解決這些問(wèn)題。我們首先將服務(wù)于不同廣告產(chǎn)品的基礎(chǔ)設(shè)施組件分離出來(lái)(例如選擇服務(wù)Selection Service,排名服務(wù)Ranking Service等,更多信息見(jiàn)我們之前的博文)。此外,提高產(chǎn)品團(tuán)隊(duì)迭代速度的關(guān)鍵在于引入產(chǎn)品競(jìng)價(jià)器(Product Bidder),并確保不同產(chǎn)品的競(jìng)價(jià)器共用一個(gè)框架,以保持乘法效應(yīng)。(譯者注:將拆分后的AdServer命名為bidder,可能因?yàn)楦?jìng)價(jià)是AdServer的一個(gè)重要環(huán)節(jié),不同產(chǎn)品之間的競(jìng)價(jià)邏輯可能差異較大。)

v2-c281cb57441fcf102be9f14665e913d7_720w.jpg

譯者注:拆分后,廣告請(qǐng)求的工作流。

將單體服務(wù)的每個(gè)模塊都拆分為一個(gè)微服務(wù)看似會(huì)大大提高產(chǎn)品迭代效率,但這也使得跨服務(wù)改動(dòng)經(jīng)常發(fā)生,降低開(kāi)發(fā)效率。因此,在拆分過(guò)程中,我們做了適當(dāng)?shù)娜∩幔?/span>

1.將單體AdServer拆分成不同的"產(chǎn)品競(jìng)價(jià)器"服務(wù),負(fù)責(zé)返回每個(gè)產(chǎn)品品種的"最佳"廣告。例如,視頻競(jìng)價(jià)器只負(fù)責(zé)返回最佳的視頻廣告,手機(jī)app推廣競(jìng)價(jià)器只負(fù)責(zé)返回最好的手機(jī)app推廣廣告。因此,每個(gè)競(jìng)價(jià)器可以有自己的部署節(jié)奏、oncall、性能和運(yùn)營(yíng)特點(diǎn)。

2.將AdServer代碼庫(kù)拆分成競(jìng)價(jià)器框架和產(chǎn)品專用邏輯,每個(gè)競(jìng)價(jià)器的實(shí)現(xiàn)是競(jìng)價(jià)器框架和產(chǎn)品邏輯的可配置組合。

v2-4835525185fe233b20752d3d24f02638_720w.jpg

譯者注:拆分后的AdServer流水線。

競(jìng)價(jià)器框架

如上圖所示,每個(gè)管道(pipeline)都包含F(xiàn)ilter和Enricher等多個(gè)步驟。競(jìng)價(jià)器框架規(guī)定了這條流水線的結(jié)構(gòu)和執(zhí)行機(jī)制,而每個(gè)產(chǎn)品競(jìng)價(jià)器可以根據(jù)具體產(chǎn)品需求做定制化執(zhí)行。

這種方法解耦了服務(wù)與產(chǎn)品,從而使平臺(tái)團(tuán)隊(duì)只負(fù)責(zé)競(jìng)價(jià)器框架,產(chǎn)品團(tuán)隊(duì)負(fù)責(zé)競(jìng)價(jià)器的具體實(shí)現(xiàn)。它最大程度地提高了開(kāi)發(fā)的敏捷性和速度,同時(shí)保留了乘數(shù)效應(yīng)。例如,框架升級(jí)會(huì)同時(shí)作用于所有產(chǎn)品競(jìng)價(jià)器;所有產(chǎn)品競(jìng)價(jià)器還能共享一套分析數(shù)據(jù)采集機(jī)制。

不同產(chǎn)品競(jìng)價(jià)器之間的相互獨(dú)立,使得工程師可以對(duì)特定產(chǎn)品(如視頻廣告)進(jìn)行更改,而完全不影響與視頻廣告不相關(guān)的產(chǎn)品。例如,如果一個(gè)新的視頻功能需要額外的計(jì)算資源,視頻產(chǎn)品競(jìng)價(jià)器可以增大其允許延時(shí),而不改變其它廣告產(chǎn)品的行為。

數(shù)據(jù)依賴框架

(譯者注:本段大量根據(jù)自己的理解寫成,可能與原文有出入)在AdServer的整條流水線中,每個(gè)步驟都涉及對(duì)通用數(shù)據(jù)結(jié)構(gòu)的直接改動(dòng),這使得我們很難找出數(shù)據(jù)具體是在哪一個(gè)步驟被修改的。我們開(kāi)發(fā)了一套數(shù)據(jù)依賴框架,嚴(yán)格規(guī)定了每個(gè)步驟的輸入輸出格式,禁止對(duì)通用數(shù)據(jù)結(jié)構(gòu)的直接改動(dòng),而需要通過(guò)immutable的方式做改動(dòng),這樣能使每個(gè)步驟的職責(zé)更為清晰。

分片服務(wù)的數(shù)據(jù)獲取與傳輸

v2-976afd0270245130fae59b7d079b70dc_720w.jpg

譯者注:在Ad Mixer處進(jìn)行數(shù)據(jù)抓取。

在原有系統(tǒng)中,Ad Mixer在每次廣告請(qǐng)求中,都會(huì)一次性獲取所需數(shù)據(jù)(比如用戶的個(gè)人信息、興趣、活動(dòng)等),并將數(shù)據(jù)傳遞給各個(gè)分片AdServer。在拆分后,每個(gè)競(jìng)價(jià)器需要不同的數(shù)據(jù)源,然而我們希望避免每個(gè)拆分的服務(wù)都各自進(jìn)行數(shù)據(jù)獲取,因?yàn)檫@可能會(huì)使數(shù)據(jù)的獲取量增加400倍。我們選擇仍然在Ad Mixer處做一次性數(shù)據(jù)獲取,并使用以下方法確保競(jìng)價(jià)器高效地獲取各自所需數(shù)據(jù):

1.對(duì)于不需要類型檢查的數(shù)據(jù),我們實(shí)現(xiàn)了直通(passthrough),中間服務(wù)只負(fù)責(zé)將原始字節(jié)傳輸?shù)街付ǖ南掠畏?wù),而不需要知道數(shù)據(jù)的格式和內(nèi)容。(譯者注:直通避免了序列化,降低數(shù)據(jù)傳輸成本。)

2.對(duì)于需要進(jìn)行類型檢查的數(shù)據(jù),我們對(duì)其進(jìn)行分類,并標(biāo)記它們的消費(fèi)者,以避免泄漏封裝,并確保下游服務(wù)不會(huì)錯(cuò)誤地使用數(shù)據(jù)。(譯者注:若將某數(shù)據(jù)的消費(fèi)者標(biāo)記為視頻廣告競(jìng)價(jià)器,則手機(jī)app推廣廣告競(jìng)價(jià)器的邏輯將不會(huì)消費(fèi)該數(shù)據(jù)。)

挑戰(zhàn)與經(jīng)驗(yàn)

可靠的逐步遷移

在我們進(jìn)行拆分之前,Twitter的單體AdServer上運(yùn)行著價(jià)值30億美元的廣告業(yè)務(wù)。因此,在做拆分的同時(shí),我們必須保持現(xiàn)有業(yè)務(wù)的運(yùn)行,以及支持正在進(jìn)行的產(chǎn)品開(kāi)發(fā)。

在項(xiàng)目過(guò)程中,我們進(jìn)行了廣泛的A/B實(shí)驗(yàn),由新系統(tǒng)支持小部分流量,由原有系統(tǒng)支持大部分流量,對(duì)產(chǎn)品指標(biāo)進(jìn)行詳盡分析,確保兩個(gè)系統(tǒng)在收入和各項(xiàng)指標(biāo)上都基本符合,希望在不影響正常廣告業(yè)務(wù)的前提下,及早發(fā)現(xiàn)問(wèn)題。

我們?cè)陂L(zhǎng)達(dá)4周的時(shí)間內(nèi),逐漸地給新系統(tǒng)增加流量比例。此外,我們還為每個(gè)產(chǎn)品競(jìng)價(jià)器部署了約20%額外的容量,并啟用了保證30秒內(nèi)完成回滾的機(jī)制。最后,我們?cè)陂L(zhǎng)達(dá)一個(gè)季度的時(shí)間內(nèi),將小比例的流量運(yùn)行在之前的單體AdServer上,用于研究季節(jié)性對(duì)各項(xiàng)指標(biāo)的影響。

代碼復(fù)雜度

拆分無(wú)可避免地需要直面非常復(fù)雜的遠(yuǎn)古代碼,我們要搞清楚這些好幾年沒(méi)人碰過(guò)的代碼到底在做什么。我們努力將數(shù)據(jù)處理邏輯歸類到“候選廣告選擇”、“候選廣告排名”等核心組件,或是“預(yù)算計(jì)算”、“頻率管理”等小組件中。在技術(shù)債的泥潭中,做這些改動(dòng)并不簡(jiǎn)單。

揭露潛藏的bug

過(guò)去的八年中,團(tuán)隊(duì)一直對(duì)AdServer做漸進(jìn)性的改動(dòng),這樣做的缺點(diǎn)是難以發(fā)現(xiàn)大bug。這次拆分對(duì)系統(tǒng)做根本性的改變,幫我們發(fā)現(xiàn)了軟件中潛藏的bug。發(fā)現(xiàn)、診斷并修復(fù)這些bug花了我們一個(gè)季度的時(shí)間,但這使我們的系統(tǒng)更為健康。

權(quán)衡取舍

任何解決方案都不是萬(wàn)能的,我們的團(tuán)隊(duì)充分認(rèn)識(shí)到這個(gè)決定的風(fēng)險(xiǎn)和收益,做出以下的“舍”:

失去對(duì)候選廣告做全局排名的能力

當(dāng)我們將單體AdServer垂直拆分為多個(gè)產(chǎn)品競(jìng)價(jià)器時(shí),每個(gè)產(chǎn)品競(jìng)價(jià)器都會(huì)分別給候選廣告排名。從而,我們失去了在AdServe內(nèi)以接近全局的方式對(duì)所有候選廣告進(jìn)行排名的能力。我們清楚利弊,決定通過(guò)增加最終拍賣所考慮的候選廣告的數(shù)量來(lái)彌補(bǔ)局部決策帶來(lái)的損失,以確保我們不會(huì)過(guò)濾掉原本有資格的候選廣告。(譯者注:假設(shè)有兩種廣告產(chǎn)品,視頻廣告和卡片廣告,二者分別有10個(gè)候選廣告。假定全局最優(yōu)的5個(gè)廣告中,有4個(gè)視頻廣告和1個(gè)卡片廣告。那么,如果我們?cè)诰植颗琶?,分別對(duì)視頻廣告和卡片廣告取前3名,匯總后再進(jìn)行全局排名,則我們錯(cuò)誤地過(guò)濾掉了一條視頻廣告。Twitter可能通過(guò)對(duì)二者各取前5名的方式來(lái)減少這種情況的發(fā)生。)

下游服務(wù)的流量增大

考慮到AdServer的規(guī)模,我們必選在項(xiàng)目開(kāi)始時(shí)就估計(jì)好服務(wù)的流量情況,并提前6個(gè)月告知基礎(chǔ)設(shè)施團(tuán)隊(duì)。我們使用一些原型(prototype)以及大量的壓力測(cè)試來(lái)確保估計(jì)的準(zhǔn)確。

從單體AdServer改為多產(chǎn)品競(jìng)價(jià)器架構(gòu)后,AdServer對(duì)直接下游服務(wù)的請(qǐng)求數(shù)量增加,進(jìn)而增加所有下游服務(wù)的壓力和成本??紤]到這一點(diǎn),我們謹(jǐn)慎地選擇了要分割的產(chǎn)品垂直領(lǐng)域,以使我們獲得最大的投資回報(bào)。

發(fā)布平臺(tái)改動(dòng)的發(fā)布周期變長(zhǎng)

把AdServer按產(chǎn)品切分還意味著每一個(gè)平臺(tái)層面的改動(dòng)都要在所有產(chǎn)品上完成測(cè)試和發(fā)布。我們清楚認(rèn)識(shí)到、并且愿意承擔(dān)這個(gè)成本。

哪怕有上述不足,在競(jìng)價(jià)器架構(gòu)正式上線后,我們還是看到了產(chǎn)品隔離的好處。一個(gè)具體的例子是,我們通過(guò)給Promoted Trend競(jìng)價(jià)器中的選擇服務(wù)配置一個(gè)緩存,實(shí)現(xiàn)延遲的降低,而完全不影響其它產(chǎn)品的行為。我們還看到產(chǎn)品功能的迭代不再被平臺(tái)團(tuán)隊(duì)所阻塞,解決了一個(gè)主要的痛點(diǎn)。

總結(jié)

所有定律都有局限性,康威定律也不例外。它適用于所有的組織,但我們也可以共同努力打破它,確保服務(wù)和組織都適合未來(lái)的需求,而不是受制于歷史。切分并不能解決所有問(wèn)題,但對(duì)團(tuán)隊(duì)以及服務(wù)確實(shí)有積極的影響,其結(jié)果是產(chǎn)品工程師在新架構(gòu)中添加新功能的工作流程得到了簡(jiǎn)化。當(dāng)我們開(kāi)始這個(gè)項(xiàng)目的時(shí)候,這似乎是一個(gè)幾乎不可能完成的任務(wù),但回過(guò)頭來(lái)看,它不僅幫助我們搭建了更健康的系統(tǒng),還加深了對(duì)系統(tǒng)工作方式的理解,為實(shí)現(xiàn)Twitter廣告部門的下一個(gè)宏偉目標(biāo)奠定了基礎(chǔ)。

立即登錄,閱讀全文
原文鏈接:點(diǎn)擊前往 >
文章來(lái)源:知乎
版權(quán)說(shuō)明:本文內(nèi)容來(lái)自于知乎,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開(kāi)掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家