大型廣告系統(tǒng)架構概述

在互聯(lián)網江湖中,始終流傳著三大賺錢法寶:廣告闷供、游戲烟央、電商。三杰之中歪脏,又以大哥廣告的歷史最為悠久疑俭,地位也最為不可撼動。君不見很多電商和游戲公司婿失,也通過廣告業(yè)務賺的盆滿缽滿钞艇。其發(fā)跡于Y公司啄寡,被G公司發(fā)揚光大,又在F公司階段性地完成了其歷史使命哩照。F公司挺物,在移動互聯(lián)網興起之際,利用其得天獨厚的數(shù)據(jù)優(yōu)勢飘弧,終于能夠回答困擾了廣告主幾百年的問題:我的廣告究竟被誰看到了识藤?浪費的一半的錢到底去了哪里焙压?

從用戶角度來看旬蟋,廣告其實是充斥著互聯(lián)網的每個角落觅彰,但正如習慣成自然一樣自阱,對于越常見的事物技掏,越少有人究其根本幔崖。對于互聯(lián)網技術人員來說滋迈,由于廣告業(yè)務具有高度的壟斷性罪郊,能夠接觸到其本質的工程師相對較少版确,尤其有過大型系統(tǒng)經驗的人更加稀缺扣囊。本文的目的在于對大型廣告系統(tǒng)的整體架構和其中的設計權衡點有一個全面的介紹,為有志從事該行業(yè)的工程師提供一套思考的思路绒疗。

另外有幾點說明侵歇。第一,廣告系統(tǒng)一般分為搜索廣告和上下文廣告吓蘑,由于上下文廣告系統(tǒng)面臨的問題要比搜索廣告系統(tǒng)更加豐富惕虑,因此本文專注于討論上下文廣告系統(tǒng)。第二磨镶,本文適合對廣告業(yè)務有一定了解的工程師溃蔫,對于業(yè)務不了解的同學,推薦閱讀劉鵬博士的<<計算廣告>>琳猫。


俗話說伟叛,離開業(yè)務談架構都是耍流氓。用一句標準的報告性語言介紹大型廣告系統(tǒng)的特點就是:處理的數(shù)據(jù)量特別巨大脐嫂,響應速度要求特別快统刮,數(shù)據(jù)實時性要求特別高,系統(tǒng)可用性要求特別高账千。面對種種不可思議的困難侥蒙,最初的一批誤打誤撞進入廣告行業(yè)的的互聯(lián)網工程師們,本著賺錢的目的匀奏,通過演雜技一般的對各種技術的拼接鞭衩,出色地完成了任務。下面逐條分析一下系統(tǒng)特點。

一醋旦、數(shù)據(jù)量特別巨大

在上下文廣告中恒水,系統(tǒng)中一般主要包含四種數(shù)據(jù)(廣告系統(tǒng)所有問題的討論一般都圍繞這四種數(shù)據(jù)展開)

  • 廣告本身的數(shù)據(jù)

一般包括名字会放、出價饲齐、投放時間、有效性(預算)咧最、標題捂人、描述、跳轉鏈接矢沿、圖片滥搭、視頻等。這里的數(shù)據(jù)量一般不會特別巨大捣鲸。幾十萬的廣告主瑟匆,已經足以支撐起業(yè)內頂尖的廣告公司,廣告的數(shù)量會比廣告主的數(shù)量大2個數(shù)量級左右栽惶。

  • 廣告的定向數(shù)據(jù)

其數(shù)據(jù)量和系統(tǒng)提供的定向維度有關愁溜。例如用戶的搜索記錄定向,網頁分詞定向外厂,購買的商品記錄定向冕象,APP安裝列表定向,用戶人群定向等汁蝶。其中每一種定向維度中渐扮,廣告主都可以設置大量的定向數(shù)據(jù)。例如搜索記錄定向中掖棉,廣告+關鍵詞的組合個數(shù)甚至會超過int最大值墓律,如果在內存中高效地組織這些數(shù)據(jù),是一個挑戰(zhàn)幔亥。

插一條案例耻讽。在團購大戰(zhàn)時代,某美國團購鼻祖高調殺入中國紫谷,曾經創(chuàng)下過購買百萬級關鍵詞的記錄齐饮,當然最后被中國的資本市場實實在在地教訓了一把,結果大家都知道笤昨。類似的不理智行為還曾發(fā)生在視頻大戰(zhàn)祖驱、電商大戰(zhàn)、分類信息網站大戰(zhàn)瞒窒,最終要么合并捺僻,要么抱大腿,唯留得廣告公司內心竊喜,期待下一場大戰(zhàn)爆發(fā)匕坯。

  • 用戶的特征數(shù)據(jù)

其數(shù)據(jù)量和面向的市場有關束昵。如果面向的是中國市場,那么就要做好處理世界上最復雜問題的準備(下一個這樣體量的市場是印度)葛峻。君不見各家PR稿锹雏,沒有3億用戶都不好意思出來打招呼,且不說數(shù)據(jù)量是真是假以及是否有用术奖,起碼這表明了大家都認可“用戶數(shù)量是衡量廣告系統(tǒng)優(yōu)劣的一大標準”礁遵。進一步說,特征數(shù)據(jù)是根據(jù)用戶的行為數(shù)據(jù)計算出來的(例如瀏覽過哪些頁面采记,購買過什么物品)佣耐。數(shù)億的用戶,一般都會用歷史一段時間的行為數(shù)據(jù)和當天的行為數(shù)據(jù)唧龄,計算出用戶的歷史特征和實時特征兼砖。注意,用戶的行為數(shù)據(jù)包括用戶在廣告系統(tǒng)內部和外部兩種行為數(shù)據(jù)既棺。用戶在廣告系統(tǒng)內部的行為數(shù)據(jù)包括用戶看到廣告的展示讽挟、點擊廣告、以及發(fā)生轉化行為(CPA結算方式)等援制。用戶在廣告系統(tǒng)外部的行為數(shù)據(jù)包括網頁瀏覽記錄戏挡、交易記錄、APP使用記錄等晨仑『质總體數(shù)據(jù)量是TB級別,而且也涉及到大量的計算洪己,如何高效地計算和存儲這些數(shù)據(jù)妥凳,并且保證高效的查詢,是用戶數(shù)據(jù)處理的核心問題答捕。當然逝钥,用戶數(shù)據(jù)是需要實時更新的,如果保證實時性在下文中討論拱镐。

  • 廣告展示環(huán)境的特征數(shù)據(jù)

展示環(huán)境一般分為網頁和APP艘款。處理方法和用戶特征數(shù)據(jù)類似,區(qū)別在于量級更加大沃琅,涉及的運算更加多哗咆。試想,將中國所有(重要的)網站的頁面爬取下來并分詞益眉,再從其中提取出頁面的特征信息晌柬,需要處理的數(shù)據(jù)量級有多少姥份。同時,頁面可能會經常變化年碘,因此這項工作需要定期重做澈歉。這里存在著投入和產出的衡量,例如訪問量很小的網站就沒必要抓扔煨啤埃难;小說類網站頁面量巨大,但對廣告投放的指導性很差傲诵,也可以不抓瓤场;但垂直類網站一般都包含了明確的定向信息拴竹,是處理的重點。

一般來說剧罩,用戶特征和廣告展示環(huán)境特征的數(shù)據(jù)會存儲在獨立的分布式集群中栓拜。數(shù)據(jù)存儲在內存和磁盤兩級,內存中存放熱點數(shù)據(jù)惠昔,磁盤中存放全量數(shù)據(jù)幕与。同時,內存中的數(shù)據(jù)包括歷史數(shù)據(jù)和實時數(shù)據(jù)兩部分镇防,實時數(shù)據(jù)流會更新實時數(shù)據(jù)啦鸣,在查詢的時候,集群負責同時查歷史和實時兩份數(shù)據(jù)来氧,合并后將結果返回诫给。

廣告數(shù)據(jù)和廣告的定向數(shù)據(jù)一般存儲在檢索服務內部,在初期都是全內存的數(shù)據(jù)結構啦扬。當數(shù)據(jù)逐漸增長中狂,超出單機內存存儲極限之后,可以先進行水平拆分扑毡,即多個檢索服務器組成一個分組胃榕,一個分組維護全庫數(shù)據(jù),在查詢時同時查詢一個分組內的每臺機器瞄摊,由上游機器對結果做合并勋又。再進一步,因為并不是所有數(shù)據(jù)都可以進行拆分换帜,數(shù)據(jù)仍然可能超出單機存儲極限楔壤,這時可以采用內存-磁盤兩級存儲的結構,也可以拆分出單獨的服務膜赃。由于廣告系統(tǒng)一般都存在熱點數(shù)據(jù)挺邀,因此內存-磁盤兩級存儲是優(yōu)先的考慮方案。同時,仔細地設計內存中的數(shù)據(jù)結構端铛,高效地建立索引泣矛,能帶來巨大的收益。

一般系統(tǒng)使用的存儲結構是B+樹禾蚕,如果使用不當會造成內存的巨大浪費您朽,在后續(xù)的文章中會有專門的篇幅討論這個問題

二、響應速度要求特別快

這一點毋庸置疑换淆,廣告對于網站或者APP是附加功能哗总,只能比內容更快地展現(xiàn)給用戶。同時倍试,一些特定的廣告形式對用戶有跳出感讯屈,例如開屏、插屏廣告县习,對響應時間要求更加短涮母。另外,在RTB系統(tǒng)中躁愿,由于exchange的存在叛本,增加了一次網絡請求,DSP系統(tǒng)的響應時間就要更加短彤钟。一般來說来候,一次對廣告系統(tǒng)的請求必須在100ms以內完成。其中60%-70%的時間消耗在網絡中逸雹,另外的部分是主要消耗在核心檢索模塊中营搅。

網絡包括媒體和廣告系統(tǒng)之間的網絡,和廣告系統(tǒng)各模塊之間的網絡交互峡眶。在設計架構時剧防,既要保持系統(tǒng)一定的可擴展性和可伸縮性,也要考慮盡可能地減少內部網絡請求次數(shù)辫樱。同時峭拘,在設計和選擇RPC框架時,要充分考慮QPS狮暑,latency鸡挠,請求長度三個因素。

核心檢索模塊中搬男,一次請求會觸發(fā)多個定向策略同時檢索拣展,因此索引數(shù)據(jù)設計的是否高效是決定檢索性性能的核心要素。因為大量的查詢操作缔逛,CPU往往會成為檢索系統(tǒng)的瓶頸备埃,所以很多檢索模塊的QPS并不高姓惑。在實戰(zhàn)中,對索引的使用不當也會造成性能的下降按脚,因此需要工程能力比較強的人做 code review 把關于毙。

三、實時性要求特別高

實時性是指數(shù)據(jù)更新的實時性辅搬。下面逐條討論唯沮。

  • 廣告數(shù)據(jù)的實時性

這里最頻繁變化的是廣告有效性和出價。例如堪遂,廣告必須在廣告主指定的時間段內投放介蛉,時間變化時,必須及時上下線溶褪。廣告主出價發(fā)生變化時币旧,必須立即反饋到系統(tǒng)中。廣告預算消費完畢后竿滨,必須立即將廣告下線佳恬。

以CPC系統(tǒng)為例,曾經有很長一段時間于游,很多廣告主利用廣告系統(tǒng)計費的延遲性騙取大量的點擊。例如垫言,給廣告設定一個很小的預算(可能只夠一次點擊)贰剥,實際產生點擊和檢索系統(tǒng)接收到計費數(shù)據(jù)之間,可能會有分鐘級的延遲筷频,這期間發(fā)生的其他點擊蚌成,產生的費用廣告主就無需支付。

  • 廣告定向數(shù)據(jù)的實時性

與廣告數(shù)據(jù)類似凛捏,不展開討論担忧。

  • 用戶特征數(shù)據(jù)的實時性

用戶特征數(shù)據(jù)往往是根據(jù)用戶的歷史行為計算出的一些興趣點數(shù)據(jù),在起初對實時性的要求并不是很高坯癣,主要是因為用戶的興趣點形成往往是一個長期過程瓶盛,并且變化很平緩。例如示罗,喜歡足球的用戶可能每天都會看一下體育新聞的足球頁面惩猫,餐飲、母嬰蚜点、裝修轧房、軍事等垂直領域的用戶,也會長期關注相關網站绍绘。然而隨著電商的興起奶镶,以及移動互聯(lián)網將時間更加碎片化迟赃,用戶的興趣點轉移變得非常快厂镇。例如纤壁,某用戶最近對相機比較感興趣,在某電商網站瀏覽了10分鐘相機產品后離開剪撬,打開門戶網站開始瀏覽新聞摄乒,這時如果出現(xiàn)了相機廣告,將很可能引起轉化残黑,這其實是電商類廣告最有效的定向方式——retargeting馍佑。當然,這只是為了說明實時性的重要程度而舉的一個非常粗淺的例子梨水,其中有很多細節(jié)有待考量拭荤。例如用戶如果發(fā)生了購買行為之后,顯然不應該再推送相機廣告疫诽。有些快消類產品舅世,重復購買率高,可以定期給用戶推薦奇徒,但類似相機雏亚、汽車、房產等大宗商品摩钙,在用戶發(fā)生購買后罢低,顯然不應該再繼續(xù)投放,而應該投放與此相關的其他廣告胖笛。在策略處理上网持,對不同類型的興趣點的時效性應該區(qū)別對待。

另外长踊,在RTB系統(tǒng)中功舀,這一點尤為重要。試想相機的例子身弊,當用戶已經發(fā)生購買之后辟汰,DSP如果沒有識別出該行為,認為用戶仍然具有該興趣點佑刷,繼續(xù)出高價購買流量莉擒,顯然是收益極低甚至可能虧損的。

  • 廣告展示環(huán)境的特征數(shù)據(jù)的實時性

網頁和APP的內容一般不經常發(fā)生變化瘫絮,抓取一次可以在很長一段時間內是有效的涨冀。比較特殊的是新頁面,尤其是內容類網站(例如旅游攻略麦萤,實時新聞)鹿鳖,每天會產生大量的新頁面扁眯,如果不能及時抓取,在廣告投放過程中就無法利用廣告展示環(huán)境的數(shù)據(jù)翅帜。尤其在移動端姻檀,用戶的場景化更加強烈,在未來場景定向的重要程度很可能會超過用戶定向涝滴。在傳統(tǒng)的PC廣告系統(tǒng)中绣版,一般是將網站分級,優(yōu)先級越高的網站爬去的頻率越高歼疮,甚至是API對接杂抽。在移動端,有一種方案是在請求中帶入網頁的重要特征韩脏,例如標題缩麸、重要關鍵詞等,這需要媒體的支持赡矢,廣泛使用還有待時日杭朱。另外,實戰(zhàn)中還往往采用 near line 的設計模型吹散,即當發(fā)現(xiàn)請求中出現(xiàn)了新的頁面弧械,實時通知爬蟲立即爬去并分析,在處理后續(xù)的請求中使用空民。

用戶特征數(shù)據(jù)和網頁/APP的特征數(shù)據(jù)往往數(shù)據(jù)量巨大梦谜,為了能夠高效地利用內存,存儲這些數(shù)據(jù)的緩存集群往往使用了只能提供讀取功能的數(shù)據(jù)結構袭景。因此,一般是將歷史的特征和實時的特征分開存儲在不同的數(shù)據(jù)結構中闭树,實時的特征可以隨時更新耸棒,只存儲當天數(shù)據(jù),在查詢時报辱,同時查詢兩個數(shù)據(jù)結構与殃,將結果合并后返回。

四碍现、系統(tǒng)可用性要求特別高

這一點比較容易理解幅疼,分分鐘都是錢,所以廣告系統(tǒng)一般都有大量的熱備冗余機器昼接,部署在多地多個機房爽篷。除了常見的分布式系統(tǒng)高可用方案之外,廣告系統(tǒng)還有如下兩個重要的方案慢睡。

  • 自動降級

由于上文討論的實時性問題逐工,廣告系統(tǒng)很難像傳統(tǒng)用戶類網站一樣铡溪,提供一些靜態(tài)的只讀內容,以備在集群全體宕機的時候使用泪喊。但在系統(tǒng)內部設計中棕硫,可以做到模塊級別的容災,系統(tǒng)化點的稱為叫自動降級袒啼。即當某些模塊出現(xiàn)問題的時候哈扮,或者系統(tǒng)資源不夠用的時候,系統(tǒng)能夠自動地移除出問題的模塊蚓再,或者非核心模塊滑肉,保證基本功能可用。比較典型的例子是对途,如果某一種策略的計算邏輯出現(xiàn)問題赦邻,或者CTR預估集群整體宕機,系統(tǒng)還能夠正常返回廣告实檀,只是收益不如原來高惶洲。當然,自動降級只是一種防御手段膳犹,當發(fā)生這種情況的時候恬吕,應該視為線上集群整體宕機同等嚴重的事故,必須第一時間處理须床。例外的情況是自動降級是人為預期的铐料,例如有些業(yè)務激增場景一年只發(fā)生一次,公司不可能為此常年準備大量機器豺旬,此時也可以用自動降級的手段保證業(yè)務基本可用钠惩。

  • 減少啟動時間

前文提到,大型廣告系統(tǒng)使用的數(shù)據(jù)量甚至會超過單機內存極限族阅,這時系統(tǒng)的啟動時間會非陈耍可觀。例如筆者曾經開發(fā)過的廣告系統(tǒng)坦刀,即使進行了水平拆庫愧沟,單機使用內存仍然達到50G以上,啟動時間在30分鐘左右鲤遥,經過后續(xù)的優(yōu)化減少到15分鐘沐寺。減少啟動時間,主要好處有兩個:減少運維成本盖奈,減少容災成本混坞。

減少運維成本。和其他互聯(lián)網系統(tǒng)一樣卜朗,廣告系統(tǒng)也會采用快速迭代的上線方案拔第。有幾千臺服務器的廣告系統(tǒng)咕村,可能會一周多次上線。上線時蚊俺,為了使服務仍然可用懈涛,會分批操作,例如一次只操作5%的機器泳猬。這對運維人員是非常痛苦的一個過程批钠。例如1000臺機器,每次操作5%得封,每臺機器啟動時間在30分鐘埋心,整體上線流程將達到10小時,這樣的事情每周發(fā)生幾次忙上,顯然是無法接受的拷呆。當然,可以選擇流量低谷的時間段上線疫粥,增加每次操作的機器數(shù)量茬斧,這樣又引入了運維成本。因此減少系統(tǒng)啟動時間意義重大梗逮。

減少容災成本项秉。很長的啟動時間,會使系統(tǒng)在請求量激增的情況下無法及時使用冷備機器擴容慷彤,而增加很多熱備機器娄蔼,第一會增加成本,第二實際情況還是可能會超出預留底哗。而且岁诉,當熱備機器也難以處理所有請求時,很可能會導致剛剛啟動完畢的機器也被打滿而無法正常提供服務跋选,觸發(fā)雪崩效應唉侄。此時,必須切斷所有服務野建,重啟集群,等所有服務都重啟并檢驗數(shù)據(jù)完畢后恬叹,才能開始對外提供服務候生。一般來說,當我們聽說一些大型網站發(fā)生整體宕機绽昼,若干小時后才恢復唯鸭,很可能都是發(fā)生了雪崩事故。

據(jù)說硅确,歷史上某E字輩美國購物網站曾經發(fā)生過一次這樣的案例目溉,導致整體服務宕機8小時明肮。近兩年Amazon的公開的幾次事故恢復時間也都在小時甚至天級別,都和復雜的啟動流程有關缭付。


作為大型廣告系統(tǒng)架構的開篇柿估,本文主要闡述了大型廣告系統(tǒng)面臨的核心問題的業(yè)務來源、處理方案陷猫、以及選擇方案的時候考慮的一些權衡點秫舌。在接下來的文章中,會深入每個模塊绣檬,詳細地討論技術細節(jié)足陨。下一篇會重點討論檢索模塊,歡迎關注娇未。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末墨缘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子零抬,更是在濱河造成了極大的恐慌镊讼,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件媚值,死亡現(xiàn)場離奇詭異狠毯,居然都是意外死亡,警方通過查閱死者的電腦和手機褥芒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門嚼松,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锰扶,你說我怎么就攤上這事献酗。” “怎么了坷牛?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵罕偎,是天一觀的道長。 經常有香客問我京闰,道長颜及,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任蹂楣,我火速辦了婚禮俏站,結果婚禮上,老公的妹妹穿的比我還像新娘痊土。我一直安慰自己肄扎,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著犯祠,像睡著了一般旭等。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上衡载,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天搔耕,我揣著相機與錄音,去河邊找鬼月劈。 笑死度迂,一個胖子當著我的面吹牛,可吹牛的內容都是我干的猜揪。 我是一名探鬼主播惭墓,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼而姐!你這毒婦竟也來了腊凶?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拴念,失蹤者是張志新(化名)和其女友劉穎钧萍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體政鼠,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡风瘦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了公般。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡官帘,死狀恐怖瞬雹,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情刽虹,我是刑警寧澤酗捌,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站涌哲,受9級特大地震影響胖缤,放射性物質發(fā)生泄漏。R本人自食惡果不足惜阀圾,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一草姻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧稍刀,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至局齿,卻和暖如春剧劝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抓歼。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工讥此, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谣妻。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓萄喳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蹋半。 傳聞我的和親對象是個殘疾皇子他巨,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內容