大型廣告系統架構概述

2022-05-08 02:33:12 字數 3153 閱讀 3961

大型廣告系統架構概述

2016-04-03 王秋實 架構叢談

在網際網路江湖中,始終流傳著三大賺錢法寶:廣告、遊戲、電商。三傑之中,又以大哥廣告的歷史最為悠久,地位也最為不可撼動。君不見很多電商和遊戲公司,也通過廣告業務賺的盆滿缽滿。其發跡於y公司,被g公司發揚光大,又在f公司階段性地完成了其歷史使命。f公司,在移動網際網路興起之際,利用其得天獨厚的資料優勢,終於能夠回答困擾了廣告主幾百年的問題:我的廣告究竟被誰看到了?浪費的一半的錢到底去了**?

從使用者角度來看,廣告其實是充斥著網際網路的每個角落,但正如習慣成自然一樣,對於越常見的事物,越少有人究其根本。對於網際網路技術人員來說,由於廣告業務具有高度的壟斷性,能夠接觸到其本質的工程師相對較少,尤其有過大型系統經驗的人更加稀缺。本文的目的在於對大型廣告系統的整體架構和其中的設計權衡點有乙個全面的介紹,為有志從事該行業的工程師提供一套思考的思路。

另外有幾點說明。第一,廣告系統一般分為搜尋廣告和上下文廣告,由於上下文廣告系統面臨的問題要比搜尋廣告系統更加豐富,因此本文專注於討論上下文廣告系統。第二,本文適合對廣告業務有一定了解的工程師,對於業務不了解的同學,推薦閱讀劉鵬博士的《計算廣告》。

俗話說,離開業務談架構都是耍流氓。用一句標準的報告性語言介紹大型廣告系統的特點就是:處理的資料量特別巨大,響應速度要求特別快,資料實時性要求特別高,系統可用性要求特別高。面對種種不可思議的困難,最初的一批誤打誤撞進入廣告行業的的網際網路工程師們,本著賺錢的目的,通過演雜技一般的對各種技術的拼接,出色地完成了任務。下面逐條分析一下系統特點。

在上下文廣告中,系統中一般主要包含四種資料(廣告系統所有問題的討論一般都圍繞這四種資料展開)

一般來說,使用者特徵和廣告展示環境特徵的資料會儲存在獨立的分布式集群中。資料儲存在記憶體和磁碟兩級,記憶體中存放熱點資料,磁碟中存放全量資料。同時,記憶體中的資料報括歷史資料和實時資料兩部分,實時資料流會更新實時資料,在查詢的時候,集群負責同時查歷史和實時兩份資料,合併後將結果返回。

廣告資料和廣告的定向資料一般儲存在檢索服務內部,在初期都是全記憶體的資料結構。當資料逐漸增長,超出單機記憶體儲存極限之後,可以先進行水平拆分,即多個檢索伺服器組成乙個分組,乙個分組維護全庫資料,在查詢時同時查詢乙個分組內的每台機器,由上游機器對結果做合併。再進一步,因為並不是所有資料都可以進行拆分,資料仍然可能超出單機儲存極限,這時可以採用記憶體-磁碟兩級儲存的結構,也可以拆分出單獨的服務。由於廣告系統一般都存在熱點資料,因此記憶體-磁碟兩級儲存是優先的考慮方案。同時,仔細地設計記憶體中的資料結構,高效地建立索引,能帶來巨大的收益。

一般系統使用的儲存結構是b+樹,如果使用不當會造成記憶體的巨大浪費,在後續的文章中會有專門的篇幅討論這個問題

網路包括**和廣告系統之間的網路,和廣告系統各模組之間的網路互動。在設計架構時,既要保持系統一定的可擴充套件性和可伸縮性,也要考慮盡可能地減少內部網路請求次數。同時,在設計和選擇rpc框架時,要充分考慮qps,latency,請求長度三個因素。

核心檢索模組中,一次請求會觸發多個定向策略同時檢索,因此索引資料設計的是否高效是決定檢索性效能的核心要素。因為大量的查詢操作,cpu往往會成為檢索系統的瓶頸,所以很多檢索模組的qps並不高。在實戰中,對索引的使用不當也會造成效能的下降,因此需要工程能力比較強的人做 code review 把關。

實時性是指資料更新的實時性。下面逐條討論。

廣告資料的實時性。這裡最頻繁變化的是廣告有效性和出價。例如,廣告必須在廣告主指定的時間段內投放,時間變化時,必須及時上下線。廣告主出價發生變化時,必須立即反饋到系統中。廣告預算消費完畢後,必須立即將廣告下線。

以cpc系統為例,曾經有很長一段時間,很多廣告主利用廣告系統計費的延遲性騙取大量的點選。例如,給廣告設定乙個很小的預算(可能只夠一次點選),實際產生點選和檢索系統接收到計費資料之間,可能會有分鐘級的延遲,這期間發生的其他點選,產生的費用廣告主就無需支付。

廣告定向資料的實時性。與廣告資料類似,不展開討論。

另外,在rtb系統中,這一點尤為重要。試想相機的例子,當使用者已經發生購買之後,dsp如果沒有識別出該行為,認為使用者仍然具有該興趣點,繼續出**購買流量,顯然是收益極低甚至可能虧損的。

這一點比較容易理解,分分鐘都是錢,所以廣告系統一般都有大量的熱備冗餘機器,部署在多地多個機房。除了常見的分布式系統高可用方案之外,廣告系統還有如下兩個重要的方案。

自動降級。由於上文討論的實時性問題,廣告系統很難像傳統使用者類**一樣,提供一些靜態的唯讀內容,以備在集群全體宕機的時候使用。但在系統內部設計中,可以做到模組級別的容災,系統化點的稱為叫自動降級。即當某些模組出現問題的時候,或者系統資源不夠用的時候,系統能夠自動地移除出問題的模組,或者非核心模組,保證基本功能可用。比較典型的例子是,如果某一種策略的計算邏輯出現問題,或者ctr預估集群整體宕機,系統還能夠正常返回廣告,只是收益不如原來高。當然,自動降級只是一種防禦手段,當發生這種情況的時候,應該視為線上集群整體宕機同等嚴重的事故,必須第一時間處理。例外的情況是自動降級是人為預期的,例如有些業務激增場景一年只發生一次,公司不可能為此常年準備大量機器,此時也可以用自動降級的手段保證業務基本可用。

減少啟動時間。前文提到,大型廣告系統使用的資料量甚至會超過單機記憶體極限,這時系統的啟動時間會非常可觀。例如筆者曾經開發過的廣告系統,即使進行了水平拆庫,單機使用記憶體仍然達到50g以上,啟動時間在30分鐘左右,經過後續的優化減少到15分鐘。減少啟動時間,主要好處有兩個:減少運維成本,減少容災成本。

減少運維成本。和其他網際網路系統一樣,廣告系統也會採用快速迭代的上線方案。有幾千臺伺服器的廣告系統,可能會一周多次上線。上線時,為了使服務仍然可用,會分批操作,例如一次只操作5%的機器。這對運維人員是非常痛苦的乙個過程。例如1000臺機器,每次操作5%,每台機器啟動時間在30分鐘,整體上線流程將達到10小時,這樣的事情每週發生幾次,顯然是無法接受的。當然,可以選擇流量低谷的時間段上線,增加每次操作的機器數量,這樣又引入了運維成本。因此減少系統啟動時間意義重大。

減少容災成本。很長的啟動時間,會使系統在請求量激增的情況下無法及時使用冷備機器擴容,而增加很多熱備機器,第一會增加成本,第二實際情況還是可能會超出預留。而且,當熱備機器也難以處理所有請求時,很可能會導致剛剛啟動完畢的機器也被打滿而無法正常提供服務,觸發雪崩效應。此時,必須切斷所有服務,重啟集群,等所有服務都重啟並檢驗資料完畢後,才能開始對外提供服務。一般來說,當我們聽說一些大型**發生整體宕機,若干小時後才恢復,很可能都是發生了雪崩事故。

據說,歷史上某e字輩美國購物**曾經發生過一次這樣的案例,導致整體服務宕機8小時。近兩年amazon的公開的幾次事故恢復時間也都在小時甚至天級別,都和複雜的啟動流程有關。

???企企csvcsvcsvcsvcsvcsv

《大型站點技術架構》1 概述

參考自 大型站點技術架構 第1 3章 1 大型站點架構演化發展歷程 1 初始階段的站點架構 一台server分別作為應用 資料 檔案server 2 應用服務和資料服務分離 三颱server分別承擔上述三項工作,當中應用server要求cpu強大 資料庫server需求更快的硬碟和記憶體,檔案ser...

大型網際網路架構概述

一 dns 1 當使用者在 瀏覽器中輸入 位址 後,瀏覽器會檢查 瀏覽器快取 中是否存在對應 網域名稱的解析結果 如果有,則解析過程結束 否則進入下乙個步驟 2 瀏覽器查詢 作業系統快取 中是否存在這個 網域名稱的解析結果 這個快取的內容 就是作業系統的 hosts檔案 如果有,則解析過程結束 否則...

mySAP ERP系統架構概述

mysap erp將世界上最完整的可公升級高效企業資源計畫 enterprise resource planning 軟體與靈活的開放技術平台相結合,該平台可充分利用sap和非sap系統並對兩者進行整合。因此,您可以提高生產效率 增強業務認識並適應加速業務戰略實施的需要。所有這些都使mysap er...