喬杰華 劉亞卓 翟曉寧
【摘 要】本文以一個(gè)定向新聞采集平臺(tái)的實(shí)現(xiàn)為例,詳細(xì)說(shuō)明了分布式內(nèi)容聚合平臺(tái)結(jié)構(gòu)的設(shè)計(jì)方案,并針對(duì)分布式特點(diǎn)在具體開(kāi)發(fā)實(shí)現(xiàn)過(guò)程中涉及的資源結(jié)構(gòu)、快照查重、標(biāo)識(shí)確定、消息同步、以及數(shù)據(jù)庫(kù)設(shè)計(jì)等技術(shù)要點(diǎn)進(jìn)行了闡述,對(duì)同類信息系統(tǒng)的研究開(kāi)發(fā)有一定的借鑒參考作用。
【關(guān)鍵詞】聚合;采集;分布式;消息
1 架構(gòu)設(shè)計(jì)
聚合平臺(tái)的主體功能包括三項(xiàng):一是,對(duì)已定義的新聞資源進(jìn)行采集,提取新聞的URL列表;二是,根據(jù)列表逐一采集新聞內(nèi)容頁(yè),提取需要的信息數(shù)據(jù)(標(biāo)題、發(fā)布時(shí)間、正文);三是,如果有需要,則對(duì)新聞相應(yīng)的圖片進(jìn)行采集。這里提到的新聞資源是指包含有多個(gè)新聞內(nèi)容頁(yè)鏈接的列表,比如新浪網(wǎng)的新聞?lì)l道首頁(yè)。容易想到,平臺(tái)按照功能劃分可設(shè)計(jì)三類功能節(jié)點(diǎn):資源采集、內(nèi)容采集和圖片采集,此外我們?cè)偌尤胭Y源產(chǎn)生和圖片服務(wù)兩種節(jié)點(diǎn)。嚴(yán)格來(lái)說(shuō),圖片服務(wù)不屬于新聞采集的范疇,它是為前端用戶提供圖片服務(wù)的,將其納入本文內(nèi)容是為了完整說(shuō)明一個(gè)新聞生成的完整過(guò)程。
如圖1所示,生產(chǎn)運(yùn)行過(guò)程中,資源產(chǎn)生節(jié)點(diǎn)從資源數(shù)據(jù)庫(kù)中取出已定義的資源并作為任務(wù)告知資源采集節(jié)點(diǎn),內(nèi)容采集節(jié)點(diǎn)的任務(wù)來(lái)自資源采集節(jié)點(diǎn)在資源中提取的新聞鏈接列表,而圖片采集節(jié)點(diǎn)的需求驅(qū)動(dòng)則來(lái)自內(nèi)容采集節(jié)點(diǎn)的在采集內(nèi)容時(shí)發(fā)現(xiàn)的圖片,最后圖片采集成功后會(huì)將圖片部署到圖片服務(wù)節(jié)點(diǎn),任務(wù)數(shù)據(jù)(或事件)將依次在五種節(jié)點(diǎn)間單向傳遞。新聞的生成在內(nèi)容采集節(jié)點(diǎn)發(fā)生,并由其存入新聞數(shù)據(jù)庫(kù),而新聞是否有圖片可用則由圖片服務(wù)節(jié)點(diǎn)來(lái)決定,這是因?yàn)橹挥袌D片部署完成可用才能說(shuō)明新聞的圖片是可用有效的,所以需要圖片服務(wù)節(jié)點(diǎn)完成部署后對(duì)新聞數(shù)據(jù)庫(kù)進(jìn)行“回寫(xiě)”以標(biāo)識(shí)新聞的圖片可用性。
圖1 新聞聚合采集平臺(tái)拓?fù)浣Y(jié)構(gòu)圖
由于新聞采集本身并沒(méi)有快速實(shí)時(shí)響應(yīng)的要求,所以各節(jié)點(diǎn)間的通知傳遞選用異步的消息方式,與同步方式(如RPC)相比消息方式能夠方便實(shí)現(xiàn)每一類節(jié)點(diǎn)的集群式擴(kuò)展,即每節(jié)點(diǎn)功能可以實(shí)現(xiàn)集群化。這種分布式的結(jié)構(gòu)有三個(gè)明顯優(yōu)點(diǎn):一是,功能分割實(shí)現(xiàn)了模塊或節(jié)點(diǎn)間的松耦合;二是,能過(guò)節(jié)點(diǎn)擴(kuò)展能夠應(yīng)對(duì)高負(fù)載需求;三是,避免單點(diǎn)故障。
2 實(shí)現(xiàn)要點(diǎn)
2.1 資源結(jié)構(gòu)
一個(gè)資源對(duì)象當(dāng)然包括有URL、分類、標(biāo)簽等要素,但更重要的是應(yīng)有如何提取新聞列表的信息。傳統(tǒng)搜索引擎會(huì)面對(duì)各式各樣的網(wǎng)頁(yè)內(nèi)容,所以通常會(huì)使用一些復(fù)雜的算法模型提取所需要的標(biāo)題內(nèi)容等信息,對(duì)無(wú)效信息(如廣告)進(jìn)行降噪處理。而定向采集的資源內(nèi)容結(jié)構(gòu)性穩(wěn)定,所以分析提取信息可以使用一些DOM工具來(lái)實(shí)現(xiàn),可以將新聞列表的XPATH描述作為提取要素,采集以此來(lái)解析資源頁(yè)面中的新聞列表。
2.2 資源“快照”
為了將資源中最新發(fā)布的新聞采集同步到本地,通常每天會(huì)一次或多次采集資源,但對(duì)有些更新不頻繁的資源的采集就會(huì)造成節(jié)點(diǎn)的“空載”運(yùn)行,這包括資源采集節(jié)點(diǎn)的掃描解析,內(nèi)容采集節(jié)點(diǎn)對(duì)新聞列表的逐一采集,而這些新聞實(shí)際上全是已采過(guò)的“舊聞”。因此設(shè)計(jì)資源“快照”,資源采集節(jié)點(diǎn)對(duì)從資源中的列表進(jìn)行“拍照”并與上一次的拍照結(jié)果進(jìn)行比較,如果未發(fā)生變化則表明列表無(wú)更新也就無(wú)需進(jìn)一步采集。
2.3 標(biāo)識(shí)問(wèn)題
首先,如何識(shí)別新聞是否已被采集過(guò)。“快照”檢測(cè)只是資源列表級(jí)的,當(dāng)一個(gè)列表有部分更新時(shí)就需要有識(shí)別某個(gè)具體新聞是否已被采集過(guò)以避免復(fù)采,顯然新聞的URL是最好的標(biāo)識(shí),可以對(duì)其進(jìn)行摘要(如HASH、MD5)取值建立索引快速檢查新聞是否已存在。其次,如何為新聞生成全局性ID。用URL的摘要值不適合做新聞的ID,畢竟摘要值有重復(fù)可能,再者如果后續(xù)需要使用Hadoop和Mahout等大數(shù)據(jù)工具進(jìn)行推薦等挖掘計(jì)算如用純數(shù)字的ID會(huì)更方便。容易想到用時(shí)間戳來(lái)設(shè)計(jì)ID,但在集群環(huán)境下多個(gè)節(jié)點(diǎn)產(chǎn)生ID也會(huì)有沖突可能,因而給每個(gè)節(jié)點(diǎn)配置一個(gè)ID前綴,節(jié)點(diǎn)產(chǎn)生的ID再冠以前綴可以避免ID沖突。
2.4 消息與同步
節(jié)點(diǎn)間的消息通信可以用rabbitmq、kafka等高效的消息平臺(tái),值得提出的是資源產(chǎn)生、資源采集、內(nèi)容采集和圖片采集節(jié)點(diǎn)之間的消息應(yīng)該選用單隊(duì)列topic主題模式,因?yàn)橐粋€(gè)采集任務(wù)被任意節(jié)點(diǎn)執(zhí)行都是無(wú)差別的,但圖片采集和圖片服務(wù)節(jié)點(diǎn)間則應(yīng)該用廣播方式傳遞消息,因?yàn)槊恳粡垐D片都需要被部署到所有圖片服務(wù)節(jié)點(diǎn)上。
2.5 數(shù)據(jù)庫(kù)設(shè)計(jì)
聚合采集平臺(tái)用于存放新聞的數(shù)據(jù)庫(kù)可以選用一些常規(guī)的數(shù)據(jù)庫(kù)(如Mysql),因?yàn)閮H供挖掘或推薦平臺(tái)提供數(shù)據(jù)源而不是直接面向用戶服務(wù)。但如果采集的數(shù)據(jù)量或集群規(guī)模很大則可以考慮分庫(kù),多個(gè)節(jié)點(diǎn)甚至單個(gè)節(jié)點(diǎn)使用一個(gè)數(shù)據(jù)庫(kù)。實(shí)際上,對(duì)于采集平臺(tái)直接以文本文件方式存放數(shù)據(jù)(以ID作為文件名)也是可行的,而且這樣還可以大幅提升存寫(xiě)速度,只是在存放結(jié)構(gòu)上需要根據(jù)數(shù)據(jù)的使用需求進(jìn)行設(shè)計(jì),比如可以選用多級(jí)散列目錄存放實(shí)現(xiàn)根據(jù)ID快速定位文件。
3 結(jié)論
本文限于篇幅原因還有較多采集中的細(xì)節(jié)未能提及,比如針對(duì)各種資源中不同的列表結(jié)構(gòu)(列表、相對(duì)、表格等形式)該如何定義XPATH以提取有效信息,又比如該如何設(shè)計(jì)消息的結(jié)構(gòu)以提升整個(gè)平臺(tái)的工作效能,再比如資源產(chǎn)生節(jié)點(diǎn)如何實(shí)現(xiàn)集群化以及對(duì)于一些“連續(xù)”性資源(比如有“下一頁(yè)”)又如何進(jìn)行自動(dòng)翻頁(yè)采集歷史數(shù)據(jù)等技術(shù)點(diǎn)都沒(méi)能在文中說(shuō)明。同時(shí),對(duì)于一個(gè)完善的信息流處理平臺(tái)來(lái)說(shuō)還有些應(yīng)該具備的功能還未考慮到,比如平臺(tái)運(yùn)行的在線監(jiān)控以及對(duì)各類節(jié)點(diǎn)所產(chǎn)生日志的分析挖掘等等,這些有待于下一步進(jìn)行研究和實(shí)現(xiàn)。
【參考文獻(xiàn)】
[1]鄧勝利.信息聚合服務(wù)的發(fā)展與演變研究.情報(bào)資料工作,2012.
[2]Web3.0技術(shù).https://baike.baidu.com/item/web%203.0/2587429?fr=aladdin.endprint