鄭國(guó)英 張揚(yáng)
摘 要: 隨著互聯(lián)網(wǎng)的迅猛發(fā)展,越來(lái)越多的互聯(lián)網(wǎng)廣告開始出現(xiàn)?;ヂ?lián)網(wǎng)廣告以其精準(zhǔn),快速,高效的投放,給廣告主帶來(lái)了豐厚的回報(bào)。通過(guò)對(duì)廣告投放系統(tǒng)實(shí)時(shí)數(shù)據(jù)處理的分析,針對(duì)重定向和實(shí)時(shí)數(shù)據(jù)統(tǒng)計(jì)等問(wèn)題,提出了流式處理的方案,運(yùn)用Storm等技術(shù),設(shè)計(jì)并實(shí)現(xiàn)一種廣告投放的流式數(shù)據(jù)處理系統(tǒng),詳細(xì)論述了其設(shè)計(jì)與實(shí)現(xiàn)過(guò)程。
關(guān)鍵詞: 互聯(lián)網(wǎng)廣告; 實(shí)時(shí); 流式計(jì)算; Storm
中圖分類號(hào): TG4
文獻(xiàn)標(biāo)志碼: A
文章編號(hào):1007-757X(2019)06-0085-04
Abstract: With the rapid development of the Internet, more and more online advertising appeared. Because of its precise, fast and efficient delivery, online advertising makes advertisers obtain immense financial rewards. This paper analyzed the real-time data processing system for the online advertising, firstly. Then, in order to solve the problems of retargeting and real-time data statistics, a stream computing scheme was proposed. On the basis of the technology of Storm, we designed and implemented a kind of online advertising continuous computing system. The paper discussed the design and implementation procedure fully.
Key words: Online advertising; Real-time; Stream computing; Storm
0?引言
目前,流式處理[1]方案在國(guó)內(nèi)的互聯(lián)網(wǎng)企業(yè)中使用的越來(lái)越多,它被應(yīng)用在金融領(lǐng)域、互聯(lián)網(wǎng)領(lǐng)域、物聯(lián)網(wǎng)領(lǐng)域等,并且它在數(shù)據(jù)統(tǒng)計(jì)、流量計(jì)算方面有很大的作用。
流式處理的流程主要包括日志采集,消息隊(duì)列,日志解析,數(shù)據(jù)統(tǒng)計(jì),數(shù)據(jù)展示。互聯(lián)網(wǎng)廣告流式處理系統(tǒng)從客戶投放的需求和體驗(yàn)出發(fā),著重在提高廣告投放效率,實(shí)時(shí)展示投放數(shù)據(jù),充分利用大數(shù)據(jù)的優(yōu)勢(shì)向廣告主提供更加高效的服務(wù),建立實(shí)時(shí)的投放優(yōu)化機(jī)制,實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)處理[2]及效果展示,降低投放成本,實(shí)現(xiàn)更加精準(zhǔn)的投放,提供給客戶一個(gè)客觀真實(shí)的頁(yè)面數(shù)據(jù)。為運(yùn)營(yíng)人員及客戶提供輔助和決策服務(wù)?;ヂ?lián)網(wǎng)廣告流式處理系統(tǒng)主要能夠?qū)崟r(shí)地展現(xiàn)數(shù)據(jù)投放的效果,對(duì)穩(wěn)定性,容錯(cuò)性,實(shí)時(shí)性等方面的要求相對(duì)來(lái)說(shuō)比較高。
互聯(lián)網(wǎng)廣告投放時(shí)會(huì)產(chǎn)生大量的日志數(shù)據(jù),這些日志包含請(qǐng)求日志,競(jìng)價(jià)日志,曝光日志,點(diǎn)擊日志等等。對(duì)于這些日志,因?yàn)槠鋽?shù)據(jù)量大,處理邏輯相對(duì)復(fù)雜,同時(shí)又需要能及時(shí)高效的處理,如何采取處理框架是一個(gè)比較重要的選擇,這關(guān)系到投放的精準(zhǔn)性和高效性?;ヂ?lián)網(wǎng)廣告流式處理系統(tǒng)能夠?qū)崟r(shí)地處理這些日志數(shù)據(jù),滿足運(yùn)營(yíng)部門的需求,并能以一種高效的方式展現(xiàn)出來(lái),提高使用人員的使用體驗(yàn)。
1?Storm的技術(shù)分析
Storm[3]是一個(gè)分布式運(yùn)行的,能夠?qū)崟r(shí)處理的,可容錯(cuò)的流式計(jì)算框架。與大數(shù)據(jù)處理平臺(tái)的Hadoop相比,Storm也能夠處理大數(shù)據(jù)量的數(shù)據(jù),同時(shí)Storm還能在高容錯(cuò)的條件下更加實(shí)時(shí)地處理數(shù)據(jù)。Storm在在線機(jī)器學(xué)習(xí)計(jì)算,實(shí)時(shí)統(tǒng)計(jì)分析,持續(xù)性計(jì)算,分布式RPC等等場(chǎng)景下都能夠使用。Storm能夠根據(jù)運(yùn)行狀態(tài)隨時(shí)擴(kuò)展集群數(shù)量,提高集群的數(shù)據(jù)處理能力,并且能將每個(gè)消息都進(jìn)行處理,不丟失一條消息,在容錯(cuò)方面也有一定的保證,而且它的處理相當(dāng)迅速(在集群中,單個(gè)節(jié)點(diǎn)能處理數(shù)百萬(wàn)的消息數(shù)據(jù))。Storm能夠非常簡(jiǎn)單方便地安裝部署,同時(shí)后期的運(yùn)維也非常輕松,最重要的一點(diǎn)是它能夠利用多種語(yǔ)言來(lái)編寫程序,對(duì)研發(fā)人員的要求大大降低。
Storm集群[4]中有一個(gè)主節(jié)點(diǎn)以及多個(gè)工作節(jié)點(diǎn),如圖1所示。
主節(jié)點(diǎn)上又稱nimbus,因?yàn)榉?wù)器上啟動(dòng)一個(gè)nimbus的守護(hù)進(jìn)程,主要作用是分配代碼、布置任務(wù)及集群檢測(cè)。工作節(jié)點(diǎn)又叫做supervisor,因?yàn)樗姆?wù)器上運(yùn)行了一個(gè)supervisor的守護(hù)進(jìn)程,主要作用是監(jiān)聽工作,創(chuàng)建或者停止工作進(jìn)程。Topology任務(wù)必須在nimbus節(jié)點(diǎn)上進(jìn)行提交,然后nimbus根據(jù)每個(gè)supervisor的資源利用情況,合理地將Topology任務(wù)分配給supervisor。Nimbus和Supervisor能實(shí)現(xiàn)無(wú)狀態(tài)的快速失敗,保證了集群整體的健壯性,在這個(gè)過(guò)程中由ZooKeeper來(lái)協(xié)調(diào)這兩者的工作。
當(dāng)提交Topology任務(wù)之后,Nimbus節(jié)點(diǎn)先對(duì)它進(jìn)行分片,生成多個(gè)task,同時(shí)Task和Supervisor的有關(guān)信息會(huì)提交給zookeeper集群,Supervisor通過(guò)查詢zookeeper集群上,獲取各自的Task,然后將task交給worker進(jìn)行處理,如圖2所示。
Storm處理流程涉及Stream、Spout、Bolt、Stream Grouping。Stream是storm的關(guān)鍵抽象化,是一個(gè)無(wú)邊界的tuple序列,storm可以分布式并行對(duì)tuple序列進(jìn)行處理。Spout是數(shù)據(jù)源,用于生產(chǎn)數(shù)據(jù),一般是從外部數(shù)據(jù)源中進(jìn)行獲取并發(fā)送給tuple。Bolt用于處理數(shù)據(jù),主要對(duì)數(shù)據(jù)進(jìn)行過(guò)濾,聚合,讀寫數(shù)據(jù)庫(kù)等操作。Stream Grouping用于規(guī)定各個(gè)bolt接受什么樣的流數(shù)據(jù),然后以什么的分組方式進(jìn)行發(fā)送。Topology都通過(guò)Stream Grouping相連的Spout和Bolt節(jié)點(diǎn)而組成的網(wǎng)絡(luò)。Storm處理邏輯的結(jié)構(gòu)圖,如圖3所示。
2?系統(tǒng)需求分析與總體設(shè)計(jì)
根據(jù)系統(tǒng)設(shè)計(jì)方法,結(jié)合真實(shí)系統(tǒng)的開發(fā)實(shí)踐,該系統(tǒng)的架構(gòu)設(shè)計(jì)圖如圖4所示。
在圖4中,有三部分組成:第一部分是數(shù)據(jù)的收集匯總,表示將服務(wù)器中實(shí)時(shí)生成的數(shù)據(jù)采用一定的方式收集起來(lái),并匯總在一起,第二部分是數(shù)據(jù)的消息隊(duì)列,主要的作用是將會(huì)記得數(shù)據(jù)采用消息隊(duì)列的方式進(jìn)行管理分發(fā);第三部分是數(shù)據(jù)的業(yè)務(wù)處理,其作用是從消息隊(duì)列中讀取的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總,并更新后臺(tái)數(shù)據(jù)庫(kù)。
數(shù)據(jù)源是實(shí)時(shí)生成的,所以數(shù)據(jù)收集匯總時(shí),flume-ng[5]采用的是內(nèi)存模式,實(shí)時(shí)tail日志文件,并將其存到內(nèi)存中并發(fā)送出去,為防止數(shù)據(jù)丟失,將數(shù)據(jù)匯總后統(tǒng)一發(fā)送給kafka[6]消息隊(duì)列中間件,storm從消息隊(duì)列中實(shí)時(shí)讀取數(shù)據(jù),并根據(jù)業(yè)務(wù)需求,生成不同的數(shù)據(jù),將其更新到數(shù)據(jù)庫(kù)中。
互聯(lián)網(wǎng)廣告流式處理系統(tǒng)能實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)展現(xiàn),有利于運(yùn)營(yíng)人員和廣告主準(zhǔn)確了解當(dāng)前的投放效果,合理調(diào)整投放策略?;ヂ?lián)網(wǎng)廣告流式處理系統(tǒng)有日志預(yù)處理模塊,數(shù)據(jù)統(tǒng)計(jì)模塊,計(jì)費(fèi)模塊,重定向模塊。這四個(gè)模塊能夠處理完成業(yè)務(wù)需求對(duì)實(shí)時(shí)性要求高的任務(wù)。流式系統(tǒng)處理模塊示意圖如圖5所示。
1) 日志預(yù)處理模塊:
流式處理系統(tǒng)的數(shù)據(jù)源有兩類數(shù)據(jù),一類是競(jìng)價(jià)系統(tǒng)產(chǎn)生的日志數(shù)據(jù),另一類是廣告主回傳的用戶數(shù)據(jù)。日志解析模塊主要是實(shí)時(shí)獲取數(shù)據(jù),并且將數(shù)據(jù)進(jìn)行解析,以方便后續(xù)的處理。當(dāng)程序從Kafka中讀取到日志數(shù)據(jù)時(shí),能夠解析出該日志時(shí)什么部分的日志,是競(jìng)價(jià)系統(tǒng)還是廣告主回傳的數(shù)據(jù),然后能分別對(duì)不同的日志進(jìn)行處理,不僅如此,還要具體區(qū)分出是哪種類型的日志,日志的類型主要有競(jìng)價(jià)日志類型,曝光日志類型,點(diǎn)擊日志類型,營(yíng)銷點(diǎn)日志類型等等,同時(shí),對(duì)于不同版本的日志也需要進(jìn)行解析并給出相關(guān)的數(shù)據(jù)。
2) 數(shù)據(jù)統(tǒng)計(jì)模塊:
競(jìng)價(jià)系統(tǒng)每次對(duì)ad exchange所發(fā)送過(guò)來(lái)的請(qǐng)求進(jìn)行應(yīng)答,決定對(duì)請(qǐng)求的廣告位進(jìn)行購(gòu)買,將所報(bào)的價(jià)格和廣告的url返回給ad exchange,這就是一次競(jìng)價(jià),每次競(jìng)價(jià)成功之后,客戶端會(huì)展現(xiàn)競(jìng)價(jià)成功的廣告,這就是一次曝光,當(dāng)展示的廣告被用戶看見,并且用戶點(diǎn)擊該廣告,那么這就是一次點(diǎn)擊,點(diǎn)擊完之后,用戶能到達(dá)該廣告的所屬?gòu)V告主的網(wǎng)站頁(yè),這就是一次到達(dá)。該功能能將這些數(shù)據(jù)進(jìn)行實(shí)時(shí)統(tǒng)計(jì),并展現(xiàn)在后臺(tái)頁(yè)面上。除了競(jìng)價(jià),曝光,點(diǎn)擊等數(shù)據(jù),運(yùn)營(yíng)人員和廣告主還能查看到點(diǎn)擊率,曝光率,達(dá)到率。該功能不僅能統(tǒng)計(jì)這些數(shù)據(jù),還能根據(jù)其他的需求進(jìn)行統(tǒng)計(jì)。
3) 計(jì)費(fèi)處理模塊:
廣告競(jìng)價(jià)系統(tǒng)在競(jìng)價(jià)過(guò)程中,需要統(tǒng)計(jì)競(jìng)價(jià)成功后所需要花費(fèi)的每次曝光的計(jì)費(fèi)處理功能能記錄每次曝光點(diǎn)擊所需要花費(fèi)的展示價(jià)錢,能查看每天投放的錢款是如何花費(fèi)的,合理優(yōu)化廣告投放。該功能還能統(tǒng)計(jì)千次曝光的平均展示價(jià)格,和平均點(diǎn)擊價(jià)格以及完成一個(gè)轉(zhuǎn)化的價(jià)格。廣告主和運(yùn)營(yíng)人員需要這些計(jì)費(fèi)結(jié)果,合理控制預(yù)算。避免超出預(yù)算。
4) 重定向模塊:
在各種廣告投放中,重定向投放是相對(duì)來(lái)說(shuō)比較高效的投放方式。在廣告主頁(yè)面進(jìn)行埋點(diǎn),用戶訪問(wèn)廣告主的頁(yè)面,服務(wù)器會(huì)記錄下用戶的Cookie以及用戶的行為數(shù)據(jù),然后獲取到用戶瀏覽數(shù)據(jù)和cookie,通過(guò)這些數(shù)據(jù)進(jìn)行分析,在廣告投放時(shí),通過(guò)cookie mapping找到這些用戶的相關(guān)數(shù)據(jù),然后對(duì)這些用戶進(jìn)行廣告投放,這樣精準(zhǔn)的方式能更達(dá)到高效的投放效果。
3?系統(tǒng)的實(shí)現(xiàn)
互聯(lián)網(wǎng)廣告流式處理系統(tǒng)主要由四個(gè)模塊組成,日志解析模塊用來(lái)實(shí)現(xiàn)數(shù)據(jù)獲取和日志解析;
數(shù)據(jù)統(tǒng)計(jì)模塊能夠統(tǒng)計(jì)投放的實(shí)時(shí)狀況,對(duì)于運(yùn)營(yíng)人員有重要的價(jià)值;計(jì)費(fèi)處理模塊能夠?qū)崟r(shí)展示投放的金額,合理有效控制投放的預(yù)算;重定向模塊主要為了更加快速準(zhǔn)確的找到高價(jià)值的人群。
3.1?日志預(yù)處理模塊
日志解析模塊主要有兩方面的功能,其一是數(shù)據(jù)獲取,其二是日志解析。
數(shù)據(jù)獲取采用flume-ng,采用tail方式將系統(tǒng)生成的數(shù)據(jù)進(jìn)行收集,匯總,利用memory模式,批量將日志文件的數(shù)據(jù)讀取并寫入內(nèi)存中,然后將內(nèi)存中的數(shù)據(jù)發(fā)送到消息隊(duì)列Kafka中。在Kafka中進(jìn)行了分區(qū),提高kafka中數(shù)據(jù)讀取的性能。
日志解析部分主要是storm中的spout并行讀取kafka中分區(qū)數(shù)據(jù),因?yàn)橛袃煞N日志數(shù)據(jù),所以有兩套不同的解析邏輯。競(jìng)價(jià)系統(tǒng)日志記錄了投放的具體的信息,比如媒體,廣告位,時(shí)間,廣告交易平臺(tái),交易價(jià)格等,通過(guò)解析,將各個(gè)數(shù)據(jù)提取出來(lái),并且還需要區(qū)分是哪一種類型的數(shù)據(jù),比如競(jìng)價(jià),曝光,點(diǎn)擊等。還有廣告主回傳的數(shù)據(jù)包含了用戶瀏覽數(shù)據(jù),例如:cookie,ip,url,訪問(wèn)頁(yè)面類型(購(gòu)物車,訂單,單品)等。通過(guò)解析,需要將數(shù)據(jù)進(jìn)行解析,這一部分的解析相對(duì)來(lái)說(shuō)比較復(fù)雜,需要采用多種解密手段,數(shù)據(jù)分離,提取的手段。
3.2?數(shù)據(jù)統(tǒng)計(jì)模塊
數(shù)據(jù)統(tǒng)計(jì)模塊主要實(shí)現(xiàn)各項(xiàng)投放指標(biāo)的統(tǒng)計(jì),主要包括數(shù)據(jù)整合,數(shù)據(jù)統(tǒng)計(jì),數(shù)據(jù)庫(kù)更新等。
數(shù)據(jù)整合:將解析的數(shù)據(jù)進(jìn)行分解組合,因?yàn)榻馕鐾甑娜罩居袃刹糠?,其中一部分是?jìng)價(jià)系統(tǒng)的數(shù)據(jù),還有一部分是廣告主的數(shù)據(jù),兩種數(shù)據(jù)在這里需要整合在一起,每個(gè)頁(yè)面的PV能夠和競(jìng)價(jià)系統(tǒng)的投放相關(guān)聯(lián),這里我們采用了cookie的方式,當(dāng)用戶通過(guò)廣告點(diǎn)擊進(jìn)入廣告主頁(yè)面時(shí),系統(tǒng)會(huì)獲取一個(gè)cookie,主要是該次點(diǎn)擊的競(jìng)價(jià)id,通過(guò)這個(gè)id,我們能找到投放的具體信息,比如媒體,廣告位等,通過(guò)這樣的方式我們將廣告主數(shù)據(jù)和競(jìng)價(jià)系統(tǒng)的數(shù)據(jù)打通,方面后續(xù)的統(tǒng)計(jì)計(jì)算。
數(shù)據(jù)統(tǒng)計(jì):將整合好的數(shù)據(jù),按照運(yùn)營(yíng)提出需求,分時(shí)進(jìn)行統(tǒng)計(jì),統(tǒng)計(jì)的維度主要包括投放策略,廣告位,媒體,時(shí)段,創(chuàng)意等等,這里統(tǒng)計(jì)的數(shù)據(jù)包含競(jìng)價(jià)數(shù),曝光數(shù),點(diǎn)擊數(shù),到達(dá)數(shù),轉(zhuǎn)化數(shù)。
更新數(shù)據(jù)庫(kù):將統(tǒng)計(jì)好的數(shù)據(jù)批次更新mysql中的數(shù)據(jù)。這里因?yàn)閙ysql數(shù)據(jù)庫(kù)的讀寫性能的關(guān)系,我們將每次操作mysql的時(shí)間設(shè)置為5分鐘一次,避免mysql因?yàn)樽x寫太頻繁而導(dǎo)致數(shù)據(jù)后臺(tái)崩潰。
3.3?計(jì)費(fèi)處理模塊
計(jì)費(fèi)處理模塊主要實(shí)現(xiàn)投放金額的統(tǒng)計(jì),括金額統(tǒng)計(jì),數(shù)據(jù)庫(kù)更新等。
金額統(tǒng)計(jì):通過(guò)整合好的數(shù)據(jù)將每次消耗的金額數(shù)據(jù)提取出來(lái),也需要統(tǒng)計(jì)出其他維度的信息,然后和數(shù)據(jù)統(tǒng)計(jì)模塊的投放數(shù)據(jù)整合到一起,同時(shí),還需要計(jì)算總的消耗,以及千次曝光價(jià)格(cpm),點(diǎn)擊價(jià)格(cpc),轉(zhuǎn)化價(jià)格(cpa)。
更新數(shù)據(jù)庫(kù):將金額統(tǒng)計(jì)的結(jié)果寫入到mysql中,這里需要寫入兩部分?jǐn)?shù)據(jù),一部分是關(guān)于投放的消耗,例如曝光價(jià)格,點(diǎn)擊價(jià)格,轉(zhuǎn)化價(jià)格等等,這個(gè)需要和數(shù)據(jù)統(tǒng)計(jì)的結(jié)果合并輸出,另一部分財(cái)務(wù)統(tǒng)計(jì)部分,這里需要統(tǒng)計(jì)廣告主的財(cái)務(wù)情況,合理調(diào)整我們投放的利潤(rùn)。
3.4?重定向模塊
重定向模塊主要將訪問(wèn)過(guò)的用戶的cookie收集起來(lái),并根據(jù)收集的用戶的cookie進(jìn)行投放,主要有三部分組成:cookie獲取,cookie分析,更新數(shù)據(jù)庫(kù)。
cookie獲?。簭V告主回傳的數(shù)據(jù)經(jīng)過(guò)日志解析,提取過(guò)相關(guān)信息,在這里提取出用戶的cookie以及歷史瀏覽行為。
cookie分析:將過(guò)去的cookie和它對(duì)應(yīng)的瀏覽行為整理,并分析,多次訪問(wèn)單品頁(yè)的用戶,有很大的購(gòu)物趨勢(shì),更具訪問(wèn)的深度和次數(shù),通過(guò)設(shè)置閾值的方式分析出cookie的投放價(jià)值,并根據(jù)這些投放價(jià)值設(shè)置投放時(shí)的價(jià)格權(quán)重。
更新數(shù)據(jù)庫(kù):將分析得到的cookie針對(duì)每個(gè)交易平臺(tái)做一次cookie mapping,從而得到每個(gè)交易平臺(tái)對(duì)應(yīng)的uid,然后將uid和它的投放權(quán)重批量寫入到redis中,當(dāng)競(jìng)價(jià)系統(tǒng)投放時(shí),對(duì)比redis中的uid和由交易平臺(tái)傳過(guò)來(lái)的請(qǐng)求解析的uid是否匹配,如果匹配,根據(jù)價(jià)格權(quán)重進(jìn)行出價(jià),如果不匹配,則不然。重定向流程圖如圖6所示。
4?系統(tǒng)的測(cè)試
流式處理系統(tǒng)的測(cè)試主要分為兩個(gè)方面,其一是功能性測(cè)試,其二是性能測(cè)試。功能性測(cè)試主要是針對(duì)系統(tǒng)各功能模塊的測(cè)試。具體的功能模塊包括日志預(yù)處理模塊,數(shù)據(jù)統(tǒng)計(jì)模塊,擊飛處理模塊,重定向模塊這四個(gè)主要的功能模塊。針對(duì)這四個(gè)功能,測(cè)試各功能模塊的準(zhǔn)確性,保證各方面數(shù)據(jù)都能夠正確處理。性能測(cè)試主要測(cè)試流式處理系統(tǒng)的實(shí)時(shí)性以及極限壓力情況。保證數(shù)據(jù)能有規(guī)定的時(shí)間內(nèi)能處理完成,并且面對(duì)數(shù)據(jù)量比較大的情況下,也能達(dá)到相應(yīng)的響應(yīng)速度,以及準(zhǔn)確度。
4.1?系統(tǒng)模塊功能測(cè)試
系統(tǒng)模塊功能性測(cè)試分別對(duì)四個(gè)主要模塊進(jìn)行測(cè)試。分個(gè)模塊進(jìn)行準(zhǔn)確性以及代碼層面的測(cè)試,保證能夠?qū)崿F(xiàn)各模塊的功能,并且能對(duì)處理過(guò)程中的錯(cuò)誤進(jìn)行匯總,避免因?yàn)殄e(cuò)誤,導(dǎo)致系統(tǒng)各模塊的功能受到影響。
日志預(yù)處理模塊測(cè)試:主要針對(duì)日志預(yù)處理模塊進(jìn)行測(cè)試,首先測(cè)試程序能夠準(zhǔn)確對(duì)源日志的數(shù)據(jù)進(jìn)行讀取,其次測(cè)試程序模塊能正確解析各種系統(tǒng)以及各種類型的日志,主要能夠分別解析出競(jìng)價(jià)日志,曝光日志,點(diǎn)擊日志,營(yíng)銷點(diǎn)日志。需要注意的是:因?yàn)槿罩鞠到y(tǒng)的升級(jí),程序需要解析出不同版本的日志,并采用不同的日志解析邏輯。
數(shù)據(jù)統(tǒng)計(jì)模塊測(cè)試:主要是針對(duì)數(shù)據(jù)統(tǒng)計(jì)的結(jié)果進(jìn)行測(cè)試,針對(duì)統(tǒng)計(jì)的各項(xiàng)指標(biāo),包括競(jìng)價(jià)數(shù),曝光數(shù),點(diǎn)擊數(shù),以及轉(zhuǎn)化數(shù)等等,采用造數(shù)據(jù)的方式,對(duì)于處理結(jié)果和預(yù)期結(jié)果進(jìn)行對(duì)比,看是否數(shù)據(jù)是否一致。在這個(gè)過(guò)程中,重點(diǎn)測(cè)試的指標(biāo)是營(yíng)銷點(diǎn)統(tǒng)計(jì)數(shù)據(jù),其中包括營(yíng)銷點(diǎn)轉(zhuǎn)化數(shù)據(jù),到達(dá)數(shù)據(jù)等等。
計(jì)費(fèi)處理模塊測(cè)試:該測(cè)試主要針對(duì)的是設(shè)計(jì)投放金額的模塊的測(cè)試,測(cè)試投放金額的周期性刷新,能保證相關(guān)的曝光數(shù)據(jù)中統(tǒng)計(jì)實(shí)時(shí)花費(fèi)金額的多少,同時(shí)測(cè)試其他與計(jì)費(fèi)相關(guān)的指標(biāo)。
重定向模塊測(cè)試:主要測(cè)試重定向功能是否能夠?qū)崟r(shí)實(shí)現(xiàn),訪問(wèn)過(guò)廣告主頁(yè)面之后,在去瀏覽其他頁(yè)面,是否還會(huì)推送曾經(jīng)訪問(wèn)過(guò)的廣告主的產(chǎn)品。這里測(cè)試的方法比較復(fù)雜,因?yàn)檫@重定向數(shù)據(jù)并未展現(xiàn)出來(lái),所以每次測(cè)試都需要直接讀取數(shù)據(jù)庫(kù)中的數(shù)據(jù),或者直接尋找展現(xiàn)在該瀏覽器中投放媒體的廣告。各模塊測(cè)試情況,如表1所示。
4.2?系統(tǒng)性能測(cè)試
系統(tǒng)性能測(cè)試主要分成兩個(gè)部分,包括實(shí)時(shí)性測(cè)試以及壓力測(cè)試。實(shí)時(shí)性測(cè)試主要保證日志從讀取然后后臺(tái)處理到展現(xiàn)能夠在五分鐘以內(nèi)完成,壓力測(cè)試主要是保證在數(shù)據(jù)流量突然暴漲的情況下,流式系統(tǒng)也能夠正常的運(yùn)轉(zhuǎn),并且對(duì)日志數(shù)據(jù)進(jìn)行準(zhǔn)確處理。
在對(duì)整個(gè)系統(tǒng)進(jìn)行具體的測(cè)試之后,能保證系統(tǒng)數(shù)據(jù)在五分鐘內(nèi)處理完成,并且達(dá)到每秒2M的數(shù)據(jù)進(jìn)行正確處理。性能測(cè)試情況,如表2所示。
5?總結(jié)
本文中所涉及到的研究?jī)?nèi)容和所取得的階段性成果如下:
對(duì)互聯(lián)網(wǎng)廣告流式處理系統(tǒng)進(jìn)行需求分析,了解分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方法。通過(guò)對(duì)互聯(lián)網(wǎng)廣告的分析了解到互聯(lián)網(wǎng)廣告投放的投放時(shí)流量大和時(shí)效短的特點(diǎn),所以本次系統(tǒng)在設(shè)計(jì)中要考慮到實(shí)時(shí)響應(yīng),容錯(cuò)處理。
因?yàn)榱魇较到y(tǒng)需要和其他投放系統(tǒng)進(jìn)行數(shù)據(jù)交互,所以都是以數(shù)據(jù)庫(kù)方式進(jìn)行交換,流式系統(tǒng)將處理結(jié)果寫入到數(shù)據(jù)庫(kù)中,其他系統(tǒng)能讀取該數(shù)據(jù)庫(kù)信息。
雖然互聯(lián)網(wǎng)廣告流式處理系統(tǒng)的出現(xiàn)已經(jīng)提高了投放的效果,對(duì)于運(yùn)營(yíng)人員是相當(dāng)重要,但是目前仍然存在以下問(wèn)題。
(1) 數(shù)據(jù)庫(kù)寫入問(wèn)題
因?yàn)榱魇较到y(tǒng)處理的數(shù)據(jù)量相當(dāng)大,他們對(duì)應(yīng)的處理速度要相當(dāng)快,保證投放數(shù)據(jù)能最快展現(xiàn)出來(lái),但是因?yàn)榱魇较到y(tǒng)與數(shù)據(jù)庫(kù)交互采用的累計(jì)批量的方式,所以不是完全的實(shí)時(shí),仍然會(huì)有少許的延遲。
(2) 版本更新問(wèn)題
如果處理邏輯改變,那么就需要我們將在Storm中運(yùn)行的Topology kill掉之后,然后才能將新版本代碼提交到系統(tǒng)中,這樣數(shù)據(jù)會(huì)有一部分丟失。
參考文獻(xiàn)
[1] 亓開元,趙卓峰,房俊,等.針對(duì)高速數(shù)據(jù)流的大規(guī)模數(shù)據(jù)實(shí)時(shí)分析方法[J].計(jì)算機(jī)學(xué)報(bào),2012,35(3):477-490.
[2]?Qian Z P, He Y, Su C Z, et al. TimeStream: Reliable stream computation in the cloud[C]// Proc. of the 8th ACM European Conf. on Computer Systems (EuroSys 2013). Prague: ACM Press, 2013. 1-14.
[3]?Storm wiki[EB/OL]. 2017-08-12. https://en.wikipedia.org/wiki/Storm_(event_processor).
[4]?Storm tutorial[EB/OL]. 2017-08-23. https://storm.canonical.com/Tutorial.
[5]?Honghao G, Jinyu K, Jiaan Z, et al. Reliability analysis on Web-based service system using probabilistic model checking[J]. Journal of Southeast University, 2017(47):132-139.
[6]?Apache Kafka, A high-throughput distributed messaging system [EB/OL]. ?2017-08-30. http://kafka.apache.org/design.html.
(收稿日期: 2019.03.18)