馬志強(qiáng),張澤廣,李昊甦,劉利民
(內(nèi)蒙古工業(yè)大學(xué) 信息工程學(xué)院,內(nèi)蒙古 呼和浩特010080)
主題信息采集系統(tǒng)是智能地在互聯(lián)網(wǎng)上采集符合設(shè)定專題的軟件系統(tǒng)[1,2]。它的核心問題是如何高速準(zhǔn)確得采集主題網(wǎng)頁信息。研究者主要集中在采集策略和體系結(jié)構(gòu)兩個(gè)方面進(jìn)行研究。采集策略的研究主要包括基于文字內(nèi)容的啟發(fā)式方法、基于web超鏈圖評價(jià)方法和基于分類器預(yù)測等方法[3-5]。體系結(jié)構(gòu)的研究較少,分布式體系結(jié)構(gòu)的核心問題是調(diào)度策略與數(shù)據(jù)同步的問題,主要開展了基于局域網(wǎng)和廣域網(wǎng)的采集系統(tǒng)體系結(jié)構(gòu)等方面的研究[6-11]。
針對主題采集系統(tǒng)存在的采集效率低和可擴(kuò)展性差等問題,提出了一種基于局域網(wǎng)的分布式架構(gòu)主題采集系統(tǒng),實(shí)驗(yàn)結(jié)果表明,相對于單服務(wù)器架構(gòu)系統(tǒng),基于分布式架構(gòu)的主題采集系統(tǒng)在采集效率和可擴(kuò)展性方面都得到了提高。
分布式網(wǎng)絡(luò)采集系統(tǒng)的架構(gòu)分為兩類:客戶/服務(wù)器模式和自治模式[6]。
客戶/服務(wù)器模式由多個(gè)客戶采集端和一個(gè)服務(wù)控制端組成。服務(wù)控制端負(fù)責(zé)所有客戶采集端的任務(wù)管理;客戶采集端只需要接收服務(wù)控制端發(fā)送的任務(wù),并不斷把新完成的任務(wù)提交給控制節(jié)點(diǎn)??蛻簦?wù)器模式實(shí)現(xiàn)簡單利于管理。但是隨著爬蟲網(wǎng)頁數(shù)量的增加,服務(wù)器控制端會(huì)成為整個(gè)系統(tǒng)的瓶頸,導(dǎo)致系統(tǒng)性能下降??蛻簦?wù)模式的架構(gòu)如圖1所示。
圖1 客戶/服務(wù)器模式架構(gòu)
自治模式是指系統(tǒng)中沒有服務(wù)控制端,每個(gè)系統(tǒng)都獨(dú)立運(yùn)行,但需要彼此交互抓取任務(wù)列表。自治模式根據(jù)通信方式可以分為全連接模式和環(huán)形模式,如圖2所示。全連接模式指所用采集端都可以相互發(fā)送信息,每個(gè)采集端都維護(hù)著一張全局任務(wù)表。環(huán)形模型是指采集端在邏輯上構(gòu)成一個(gè)環(huán)網(wǎng),數(shù)據(jù)在環(huán)上按照某種方向單向傳輸,每個(gè)客戶端的任務(wù)地址列表中只保存其前驅(qū)和后繼的信息。自治模式的缺點(diǎn)會(huì)增加網(wǎng)絡(luò)間的通信信息,網(wǎng)絡(luò)帶寬和數(shù)據(jù)延遲成為瓶頸。
為了彌補(bǔ)客戶/服務(wù)器模式在采集網(wǎng)頁數(shù)據(jù)增多時(shí),服務(wù)器控制端性能下降的問題;以及在自治模式下增加網(wǎng)絡(luò)間信息傳遞的數(shù)量,導(dǎo)致數(shù)據(jù)延遲的缺陷。我們在主題采集系統(tǒng)中設(shè)計(jì)了負(fù)載平衡下的多節(jié)點(diǎn)服務(wù)器控制模式,如圖3所示。
負(fù)載平衡下的多節(jié)點(diǎn)服務(wù)器控制模式架構(gòu)分為四層。分別是執(zhí)行層、服務(wù)層、面向消息的中間層和持久層。
(1)執(zhí)行層:主要工作是在收到服務(wù)器層下達(dá)的采集任務(wù)后,負(fù)責(zé)完成采集網(wǎng)頁操作,并與服務(wù)器交互采集任務(wù)的地址信息和數(shù)據(jù)信息。
圖3 負(fù)載平衡下的多服務(wù)器控制模式
(2)服務(wù)層:為執(zhí)行層提供采集任務(wù),分析執(zhí)行層采集到的數(shù)據(jù),進(jìn)行主題判斷,并在負(fù)載均衡服務(wù)器的控制下形成新的任務(wù)列表。服務(wù)層包括采集服務(wù)器和負(fù)載均衡服務(wù)器。負(fù)載均衡服務(wù)器的目的是實(shí)現(xiàn)采集服務(wù)器的均衡調(diào)度。
(3)面向消息的中間件層:負(fù)責(zé)服務(wù)器間消息傳遞,達(dá)到數(shù)據(jù)同步的目的。服務(wù)層各個(gè)服務(wù)器間的數(shù)據(jù)共享主要采用基于 “發(fā)布者/訂閱者”模型的消息總線來實(shí)現(xiàn)。各個(gè)服務(wù)器之間需要共享的信息主要是去重后的HTML文檔信息和鏈接信息,為保證在每一個(gè)服務(wù)器上請求過的目標(biāo)鏈接不會(huì)出現(xiàn)在其它服務(wù)器的連接緩沖池 (LinkPool)數(shù)據(jù)中,各服務(wù)器定時(shí)向其它爬行服務(wù)器發(fā)送一次各自的去重后HTML文檔和鏈接信息。本服務(wù)器架構(gòu)通過增加一臺(tái)JMS服務(wù)器來實(shí)現(xiàn)消息總線。
(4)持久層:將采集到的數(shù)據(jù)進(jìn)行保存,為后續(xù)工作服務(wù)。為提高系統(tǒng)的可擴(kuò)展性,使用接口實(shí)現(xiàn),用戶可以根據(jù)需要,通過定義不同的目標(biāo)存儲(chǔ),將數(shù)據(jù)存入數(shù)據(jù)庫或HDFS文件。
執(zhí)行層采用多線程實(shí)現(xiàn),包括一個(gè)任務(wù)線程和多個(gè)采集線程。任務(wù)線程負(fù)責(zé)向爬行服務(wù)器請求目標(biāo)鏈接資源;采集線程負(fù)責(zé)從爬行客戶端的鏈接池中取出目標(biāo)鏈接,發(fā)起HTTP請求,獲取主題網(wǎng)頁,并向爬行服務(wù)器返回網(wǎng)頁文檔。在獲得目標(biāo)文檔后,統(tǒng)一轉(zhuǎn)換成UTF-8編碼,實(shí)現(xiàn)與爬行客戶端的編碼統(tǒng)一。工作流程如圖4所示。
工作流程描述:
(1)執(zhí)行層客戶端程序啟動(dòng)后,任務(wù)線程向負(fù)載均衡服務(wù)器請求爬行服務(wù)器IP;
(2)根據(jù)爬行服務(wù)器IP,向爬行服務(wù)器發(fā)送HTTP請求,請求目標(biāo)鏈接資源;
(3)將請求得到的目標(biāo)鏈接資源,按照目標(biāo)鏈接的權(quán)值大小作為優(yōu)先級順序插入到爬行客戶端的鏈接緩沖池(LinkPool)中;
(4)多個(gè)采集線程并發(fā)的從鏈接緩沖池中取出目標(biāo)鏈接;
(5)向目標(biāo)鏈接發(fā)送HTTP請求,獲取對應(yīng)的HTML文檔 (目標(biāo)文檔);
(6)向采集服務(wù)器返回得到的目標(biāo)文檔。
圖4 執(zhí)行層工作流程
采集服務(wù)器的核心工作線程有5個(gè),分別是Crawler-Master、HtmlPusher、HtmlAnalyser、LinkPusher和 Distributer。LinkPool用來保存等待處理的HTML文檔對象緩沖池;HtmlMessageQueue和LinkMessageQueue,用于保存等待發(fā)送到消息總線上的去重信息。
CrawlerMaster線程負(fù)責(zé)響應(yīng)爬行客戶端的爬行數(shù)據(jù)請求。
HtmlPusher線程負(fù)責(zé)定時(shí)的從HTML數(shù)據(jù)庫中提取出等待處理的HTML文檔,并推入到HtmlPool中。
HtmlAnalyser線程負(fù)責(zé)從HTML文檔對象緩沖池(HtmlPool)中提取等待處理的HTML文檔,執(zhí)行具體的過濾、分析操作。
LinkPusher線程負(fù)責(zé)定時(shí)的從URL數(shù)據(jù)庫中提取出等待執(zhí)行的目標(biāo)鏈接資源,并推入到LinkPool中。
工作流程如圖5所示,具體描述:
(1)將采集種子加入鏈接緩沖池,爬行服務(wù)器開始工作;
(2)CrawlerMaster從LinkPool中提取目標(biāo)鏈接資源,等待采集客戶端的采集數(shù)據(jù)請求。將任務(wù)隊(duì)列發(fā)送給請求;將執(zhí)行層客戶端采集的HTML文檔進(jìn)行去重處理;將去重處理后的 HTML 文檔對象,則添加到HtmlMessageQueue中;
圖5 服務(wù)器工作流程
(3)將不重復(fù)的HTML文檔存儲(chǔ)到數(shù)據(jù)庫 (HTML數(shù)據(jù)庫);
(4)HtmlPusher定時(shí)的從HTML數(shù)據(jù)庫中提取等待進(jìn)行分析過濾的HTML文檔,將HTML文檔對象推入到HtmlPool中;
(5)HtmlAnalyser發(fā)現(xiàn)HtmlPool中有新的HTML文檔對象加入時(shí),將其取出進(jìn)行鏈接分析,提取HTML中的鏈接,并將重復(fù)的鏈接去除,按照采集策略計(jì)算每個(gè)新鏈接的權(quán)值;將經(jīng)過分析處理的連接對象添加到LinkMessageQueue中;
(6)將不重復(fù)的鏈接存儲(chǔ)到數(shù)據(jù)庫 (URL數(shù)據(jù)庫);
(7)LinkPusher定時(shí)從URL數(shù)據(jù)庫中提取出等待執(zhí)行的目標(biāo)鏈接資源,推入到LinkPool中;
(8)Distributer定時(shí)將 HtmlMessageQueue和LinkMessageQueue中的消息通過面向消息的中間件總線發(fā)送給其它服務(wù)器。
負(fù)載均衡服務(wù)器實(shí)際上就是一個(gè)調(diào)度中心,主要工作是將任務(wù)派給負(fù)載最輕的采集服務(wù)器,并通知執(zhí)行客戶端工作。它保存著各個(gè)采集服務(wù)器的負(fù)載信息 (Workload),元素中存儲(chǔ)著采集服務(wù)器的IP和在消息總線上發(fā)送的消息數(shù)量。并且用戶可以通過實(shí)現(xiàn)接口自行定義負(fù)載均衡服務(wù)器的調(diào)度策略。目前采用了最簡單的策略,任務(wù)最少的優(yōu)先提供服務(wù)。
負(fù)載均衡服務(wù)器工作流程描述:
(1)消息發(fā)布線程在消息總線上獲取各個(gè)爬行服務(wù)器發(fā)送的去重信息;并在Workload中查找發(fā)送消息的服務(wù)器IP,若不存在,則為Workload添加新元素,IP為發(fā)送消息的爬行服務(wù)器IP,初始發(fā)送消息數(shù)目為1;若存在,則將該元素的發(fā)送消息數(shù)目加1;
(2)負(fù)載均衡服務(wù)器每隔規(guī)定的時(shí)間,將Workload中所有元素的發(fā)送消息數(shù)重置為0,以實(shí)現(xiàn)各采集服務(wù)器的負(fù)載統(tǒng)計(jì);
(3)負(fù)載均衡服務(wù)器從Workload中選擇出發(fā)送消息數(shù)目最小的元素,將得到的IP(節(jié)點(diǎn)服務(wù)器地址)返回給執(zhí)行客戶端。
實(shí)驗(yàn)分別采用單服務(wù)器架構(gòu)和多服務(wù)器架構(gòu)進(jìn)行,仿真實(shí)驗(yàn)環(huán)境采用PC機(jī)做服務(wù)器,服務(wù)器與客戶端采用Hub相連,內(nèi)網(wǎng)帶寬為100M,外網(wǎng)帶寬為2M。具體配置見表1。單節(jié)點(diǎn)服務(wù)器架構(gòu)實(shí)驗(yàn)采用服務(wù)器1臺(tái) (PC模式),采集客戶端2臺(tái) (PC機(jī)1臺(tái),平板電腦1臺(tái))。多節(jié)點(diǎn)服務(wù)器架構(gòu)實(shí)驗(yàn)采用服務(wù)器2臺(tái) (PC機(jī)模擬服務(wù)器),采集客戶端4臺(tái) (PC機(jī)3臺(tái),平板電腦1臺(tái))。
表1 仿真實(shí)驗(yàn)環(huán)境配置
對采集系統(tǒng)進(jìn)行配置,采集主題設(shè)置為 “蒙古文”,采集策略使用啟發(fā)式策略進(jìn)行設(shè)計(jì)。分別采用架構(gòu)性能與主題采集策略指標(biāo)體系對實(shí)驗(yàn)結(jié)果進(jìn)行評價(jià)。架構(gòu)性能評價(jià)指標(biāo)包括:解析鏈接總數(shù)、采集網(wǎng)頁數(shù)和采集速度。主題采集策略評價(jià)指標(biāo)包括:目標(biāo)網(wǎng)頁個(gè)數(shù)、采集目標(biāo)網(wǎng)頁速度、準(zhǔn)確率和目標(biāo)網(wǎng)頁空間。
采集速度:表示單位時(shí)間里系統(tǒng)采集網(wǎng)頁的個(gè)數(shù),用于衡量系統(tǒng)的采集性能
式中:Ci——第i臺(tái)服務(wù)器采集的網(wǎng)頁數(shù);T——采集的時(shí)間。
平均采集速度:表示每臺(tái)機(jī)器的采集速度,用于衡量采集效率
其中:M——系統(tǒng)中機(jī)器的總臺(tái)數(shù)。
準(zhǔn)確率:表示已采集的指定主題網(wǎng)頁數(shù)量占網(wǎng)頁總數(shù)的比例,用于衡量主題識(shí)別性能。
其中:Zi——第i臺(tái)服務(wù)器采集到的目標(biāo)網(wǎng)頁數(shù)。
系統(tǒng)運(yùn)行3小時(shí)的實(shí)驗(yàn)結(jié)果,架構(gòu)性能見表2。多節(jié)點(diǎn)服務(wù)器架構(gòu)從采集速度和目標(biāo)網(wǎng)頁的采集速度上都優(yōu)于單點(diǎn)服務(wù)器架構(gòu)。主題采集性能見表3。通過實(shí)驗(yàn)結(jié)果可以看出,在主題采集準(zhǔn)確率上分布式結(jié)構(gòu)服務(wù)器系統(tǒng)略有下降,主要原因是在分布式情況下采集鏈接出現(xiàn)了重復(fù)采集的情況。
表2 架構(gòu)性能實(shí)驗(yàn)結(jié)果
表3 主題采集性能
通過對網(wǎng)絡(luò)信息采集系統(tǒng)的體系結(jié)構(gòu)分析,設(shè)計(jì)了基于局域網(wǎng)的分布式主題采集系統(tǒng)的體系結(jié)構(gòu)。實(shí)驗(yàn)結(jié)果表明,基于多節(jié)點(diǎn)服務(wù)器架構(gòu)的主題采集系統(tǒng)在采集速度和平均采集速度明顯優(yōu)于單節(jié)點(diǎn)服務(wù)器體系結(jié)構(gòu)。
進(jìn)一步研究的目標(biāo)是開展負(fù)載均衡服務(wù)器端調(diào)度策略的研究;開展服務(wù)器間消息協(xié)議的研究,減少服務(wù)器間信息的交互量,進(jìn)一步提升平均采集速度和主題采集準(zhǔn)確率等。
[1]Yakushev A V,Boukhanovsky A V,Sloot P M A.Topic crawler for social networks monitoring [M].Springer Berlin Heidelberg,2013:214-227.
[2]Jeffrey Dean,Sanjay Ghemawat.MapReduce:Simplified data processing on large clusters [J].Communication of the ACM,2008,5 (1):107-113.
[3]Denis Shestakov.Current challenges in web crawling [G].LNCS 7977:13th International Conference Web Engineering,2013:518-521.
[4]Faheem M,MinesTelecom I,ParisTech T.Intelligent and adaptive crawling of web applications for web archiving [C]//13th International Conference Web Engineering,2013:306-322.
[5]Banerjee S,Das A,Mazumder A,et al.On the impact of coding parameters on storage requirement of region-based fault tolerant distributed file system design [C]//International Conference on Computing,Networking and Communications.IEEE,2014:78-82.
[6]Patel P,Hasan M,Tanawala B.Distributed high performance web crawler [J].International Journal of Innovative Technology and Research,2013,1 (3):236-239.
[7]Jain N,Mangal M P.An approach to build a web crawler using clustering based K-means algorithm [J].Journal of Global Research in Computer Science,2014,4 (12):14-22.
[8]ZHOU Demao,LI Zhoujun.Survey of high-performance web crawler[J].Computer Science,2009,36 (8):26-30 (in Chinese). [周德懋,李舟軍.高性能網(wǎng)絡(luò)爬蟲:研究綜述[J].計(jì)算機(jī)科學(xué),2009,36 (8):26-30.]
[9]LI Yuejian,ZHU Chengrong.Study and improvement on system architectures of Larbin web crawler [J].Computer Technology and Development,2012,22 (7):147-151 (in Chinese). [李躍健,朱程榮.基于Larbin的網(wǎng)絡(luò)爬蟲體系結(jié)構(gòu)的研究與改進(jìn) [J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22 (7):147-151.]
[10]ZHANG Weizhe,ZHANG Hongli,F(xiàn)ANG Binxing,et al.WAN-based distributed Web crawling [J].Journal of Software,2010,21 (5):1067-1082 (in Chinese). [張偉哲,張宏莉,方濱興.廣域網(wǎng)分布式 Web爬蟲 [J].軟件學(xué)報(bào),2010,21 (5):1067-1082.]
[11]YANG Dingzhong,ZHAO Gang,WANG Tai.Application of Web crawler in information search and data mining [J].Computer Engineering and Design,2009,30 (24):5658-5661(in Chinese).[楊定中,趙剛,王泰.網(wǎng)絡(luò)爬蟲在 Web信息搜索和數(shù)據(jù)挖掘中應(yīng)用 [J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30 (24):5658-5661.]