摘" 要: 文中致力于開(kāi)發(fā)一種基于資源感知的分布式爬蟲(chóng)任務(wù)調(diào)度方法,以?xún)?yōu)化分布式環(huán)境中各節(jié)點(diǎn)的系統(tǒng)資源利用,提升爬蟲(chóng)任務(wù)的執(zhí)行效率。該方法通過(guò)引入資源感知調(diào)度算法和節(jié)點(diǎn)優(yōu)先級(jí)管理,實(shí)現(xiàn)對(duì)節(jié)點(diǎn)中CPU、內(nèi)存、網(wǎng)絡(luò)等資源的監(jiān)測(cè),以便均衡調(diào)度爬蟲(chóng)任務(wù),即確保爬蟲(chóng)任務(wù)在資源利用率較低的節(jié)點(diǎn)上執(zhí)行,從而有效減輕各個(gè)節(jié)點(diǎn)之間資源過(guò)度占用和不均衡問(wèn)題。另外,該方法引入的Flask提高了可擴(kuò)展性,實(shí)現(xiàn)了可視化爬蟲(chóng)監(jiān)控平臺(tái)。實(shí)驗(yàn)結(jié)果表明,文中提出的方法在提高爬蟲(chóng)任務(wù)執(zhí)行效率和適應(yīng)性方面取得了顯著效果,為分布式爬蟲(chóng)系統(tǒng)的進(jìn)一步優(yōu)化提供了有益指導(dǎo)。
關(guān)鍵詞: 分布式爬蟲(chóng); 任務(wù)調(diào)度; 資源感知; Flask; 數(shù)據(jù)采集; 資源利用率
中圖分類(lèi)號(hào): TN919?34; TP303; TP333""""""""""""" 文獻(xiàn)標(biāo)識(shí)碼: A"""""""""""""""" 文章編號(hào): 1004?373X(2024)09?0086?05
0" 引" 言
隨著互聯(lián)網(wǎng)的迅猛發(fā)展,數(shù)據(jù)量呈爆炸性增長(zhǎng)。巨大的數(shù)據(jù)量是數(shù)字時(shí)代的寶貴信息資源,各行各業(yè)通過(guò)整理和分析自身數(shù)據(jù)倉(cāng)庫(kù)以及外部數(shù)據(jù),以洞察行業(yè)趨勢(shì),分析消費(fèi)者行為,并利用數(shù)據(jù)解決問(wèn)題[1]。為了有效獲取特定信息和精準(zhǔn)數(shù)據(jù),“網(wǎng)絡(luò)爬蟲(chóng)”(Web Crawler)[2]技術(shù)應(yīng)運(yùn)而生,它是一種數(shù)據(jù)采集技術(shù),其目標(biāo)是自動(dòng)遍歷并提取互聯(lián)網(wǎng)上公開(kāi)、合法的數(shù)據(jù)。
然而,隨著網(wǎng)頁(yè)數(shù)量和數(shù)據(jù)規(guī)模的指數(shù)級(jí)增長(zhǎng),傳統(tǒng)的單機(jī)爬蟲(chóng)效率已經(jīng)無(wú)法滿(mǎn)足需求,因此需要將其擴(kuò)展為分布式爬蟲(chóng)以提高數(shù)據(jù)采集效率[3?4]。目前的分布式爬蟲(chóng)框架主要采用主從模式設(shè)計(jì),由一個(gè)主節(jié)點(diǎn)和多個(gè)子節(jié)點(diǎn)組成,主節(jié)點(diǎn)負(fù)責(zé)控制子節(jié)點(diǎn)并向其分發(fā)爬蟲(chóng)任務(wù)。常見(jiàn)的分布式爬蟲(chóng)框架包括PySpider、Scrapy?Redis[5]、Apache Nutch等,它們通常具備豐富的數(shù)據(jù)采集功能、完善的軟件生態(tài)和高度的可擴(kuò)展性等優(yōu)勢(shì)。
在當(dāng)前分布式爬蟲(chóng)技術(shù)研究中,一些優(yōu)化方法已經(jīng)涌現(xiàn),如網(wǎng)絡(luò)負(fù)載均衡、分布式隊(duì)列優(yōu)化等。然而,節(jié)點(diǎn)的CPU、運(yùn)行內(nèi)存等系統(tǒng)資源利用率也是影響爬蟲(chóng)任務(wù)執(zhí)行效率的關(guān)鍵因素。因此,本文從節(jié)點(diǎn)的系統(tǒng)資源利用率出發(fā),提出了一種基于資源感知的分布式爬蟲(chóng)任務(wù)調(diào)度方法。在該方法中,主節(jié)點(diǎn)會(huì)實(shí)時(shí)監(jiān)測(cè)子節(jié)點(diǎn)的CPU、運(yùn)行內(nèi)存、網(wǎng)絡(luò)等資源利用率,并根據(jù)資源利用率對(duì)節(jié)點(diǎn)進(jìn)行優(yōu)先級(jí)動(dòng)態(tài)排序,資源利用率低的節(jié)點(diǎn)將優(yōu)先調(diào)度爬蟲(chóng)任務(wù)。通過(guò)該方法實(shí)現(xiàn)各個(gè)節(jié)點(diǎn)的資源負(fù)載均衡。實(shí)驗(yàn)證明,這種任務(wù)調(diào)度方法能夠提高分布式爬蟲(chóng)任務(wù)的執(zhí)行效率。此外,本文還采用Flask[6]框架作為節(jié)點(diǎn)間的通信工具,并利用其RESTful API特性進(jìn)一步將該任務(wù)調(diào)度方法擴(kuò)展為一個(gè)可視化的分布式爬蟲(chóng)控制平臺(tái)。
1" 相關(guān)工作
隨著互聯(lián)網(wǎng)的發(fā)展和數(shù)據(jù)量的增長(zhǎng),傳統(tǒng)分布式爬蟲(chóng)執(zhí)行效率將面臨嚴(yán)峻的挑戰(zhàn),為了克服這些挑戰(zhàn),研究者們提出了各種創(chuàng)新性的方法和框架。
文獻(xiàn)[7]提出了使用AWS的混合P2P網(wǎng)絡(luò)分布式網(wǎng)絡(luò)爬蟲(chóng)(Hybrid P2P Networking Distributed Web Crawler Using AWS, HP2PNC?AWS)。HP2PNC?AWS利用亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)的云服務(wù)平臺(tái),以應(yīng)對(duì)傳統(tǒng)網(wǎng)絡(luò)爬蟲(chóng)在面對(duì)高流量的挑戰(zhàn)。在收集新聞數(shù)據(jù)方面,HP2PNC?AWS表現(xiàn)出極佳的性能,比常規(guī)的Web爬蟲(chóng)程序快,但是比服務(wù)器/客戶(hù)端分布式Web爬蟲(chóng)程序略慢,特別是在爬蟲(chóng)程序被服務(wù)端阻止的情況下。然而,HP2PNC?AWS有利于增強(qiáng)網(wǎng)絡(luò)爬蟲(chóng)執(zhí)行效率。
文獻(xiàn)[8]提出了一種基于分布式的網(wǎng)絡(luò)爬蟲(chóng)技術(shù),以實(shí)現(xiàn)對(duì)大量數(shù)據(jù)在網(wǎng)頁(yè)上的自動(dòng)收集、解析和格式化存儲(chǔ)。該技術(shù)采用了Nutch爬蟲(chóng)框架、Zookeeper分布式協(xié)調(diào)服務(wù)和高性能的Key?Value數(shù)據(jù)庫(kù)Redis用于數(shù)據(jù)存儲(chǔ),同時(shí)利用Solr引擎對(duì)抓取的信息進(jìn)行索引和展示。通過(guò)優(yōu)化提取頁(yè)面信息算法和關(guān)鍵詞匹配算法,實(shí)現(xiàn)了對(duì)抓取的數(shù)據(jù)進(jìn)行指標(biāo)相關(guān)數(shù)據(jù)的提取。
文獻(xiàn)[9]提出了一種基于Django的分布式爬蟲(chóng)框架設(shè)計(jì)方法,以?xún)?yōu)化分布式爬蟲(chóng)框架的性能并擴(kuò)展其功能。該框架引入了爬蟲(chóng)任務(wù)隊(duì)列技術(shù),實(shí)現(xiàn)了在爬蟲(chóng)運(yùn)行過(guò)程中隨時(shí)更新爬蟲(chóng)代碼時(shí)可自動(dòng)重新載入的功能,同時(shí)能夠接著從中斷點(diǎn)繼續(xù)執(zhí)行任務(wù),解決了重新載入程序過(guò)程中丟失之前數(shù)據(jù)的問(wèn)題。
文獻(xiàn)[10]采用對(duì)等式架構(gòu)的爬行器,使任務(wù)既是消費(fèi)者又是生產(chǎn)者,提出了本地執(zhí)行任務(wù)的優(yōu)化方向。該方法借助雙緩沖技術(shù)實(shí)現(xiàn)動(dòng)態(tài)負(fù)載均衡策略和基于高速緩存原理的URL(Uniform Resource Locator)判重方案,成功降低了通信頻次并提升了URL判重性能,使分布式系統(tǒng)的性能優(yōu)勢(shì)得到更充分的發(fā)揮。
文獻(xiàn)[11]探討了使用主題爬蟲(chóng)的Web信息數(shù)據(jù)挖掘,介紹了Web信息搜索和數(shù)據(jù)挖掘的體系結(jié)構(gòu)以及關(guān)鍵技術(shù)和操作原理。他們強(qiáng)調(diào)了爬蟲(chóng)獨(dú)有的特性和應(yīng)用,介紹了爬蟲(chóng)的工作原理和實(shí)現(xiàn)方法,并對(duì)其性能進(jìn)行了分析。實(shí)驗(yàn)結(jié)果表明,該爬蟲(chóng)能夠在萬(wàn)維網(wǎng)上收集各種信息資源,有助于網(wǎng)絡(luò)文化內(nèi)容的監(jiān)控和管理。此外,他們利用爬蟲(chóng)技術(shù)將整個(gè)網(wǎng)絡(luò)集成到數(shù)據(jù)倉(cāng)庫(kù),實(shí)現(xiàn)了全面的網(wǎng)絡(luò)內(nèi)容采樣、審計(jì)和監(jiān)控,以增強(qiáng)網(wǎng)絡(luò)文化中的安全性。
文獻(xiàn)[12]分析了在網(wǎng)絡(luò)上組織用戶(hù)搜索信息面臨的挑戰(zhàn),并深入探討了深度網(wǎng)絡(luò)層次的動(dòng)態(tài)特性,提出了一種新的兩階段深度學(xué)習(xí)數(shù)據(jù)爬蟲(chóng)框架(Novel and Efficient Two?phase Deep Learning Data Crawler Framewor,NTPDCF)。NTPDCF通過(guò)搜索引擎收集準(zhǔn)確的鏈接,并使用自適應(yīng)網(wǎng)站排名來(lái)探索相關(guān)網(wǎng)站鏈接,考慮了用戶(hù)偏好、動(dòng)態(tài)特征和自適應(yīng)權(quán)重,能夠進(jìn)行有效的數(shù)據(jù)探索。
2" 研究框架
2.1" Scrapy?Redis
作為一種開(kāi)源數(shù)據(jù)庫(kù),Redis[13]支持多種豐富的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),包括字符串、哈希表、列表、集合、有序集合等。而Scrapy引擎(Scrapy Engine)負(fù)責(zé)管理整個(gè)爬蟲(chóng)系統(tǒng)的數(shù)據(jù)流,根據(jù)不同的處理目標(biāo)將任務(wù)分發(fā)給不同的組件。如圖1所示,Scrapy?Redis架構(gòu)將Scrapy與Redis進(jìn)行整合,并采用了類(lèi)似主從模式的設(shè)計(jì),實(shí)現(xiàn)了多個(gè)爬蟲(chóng)節(jié)點(diǎn)之間的任務(wù)調(diào)度和協(xié)同工作。
圖1中,Redis被視為主節(jié)點(diǎn),其他子節(jié)點(diǎn)從Redis中讀取爬蟲(chóng)任務(wù)。調(diào)度器(Scheduler)負(fù)責(zé)接收來(lái)自Scrapy引擎的請(qǐng)求,并對(duì)這些請(qǐng)求進(jìn)行隊(duì)列化。下載器(Downloader)負(fù)責(zé)從互聯(lián)網(wǎng)上獲取任務(wù)目標(biāo)Web,并將其返回給Scrapy引擎進(jìn)行處理。蜘蛛(Spiders)根據(jù)Scrapy引擎分發(fā)的Web執(zhí)行不同的數(shù)據(jù)采集功能,而項(xiàng)目管道(Item Pipeline)則負(fù)責(zé)處理蜘蛛采集的數(shù)據(jù),包括解析數(shù)據(jù)、清洗數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)等操作。在Scrapy?Redis架構(gòu)中,每個(gè)爬蟲(chóng)節(jié)點(diǎn)都能獨(dú)立運(yùn)行,從而提高了整個(gè)架構(gòu)的伸縮性、可擴(kuò)展性,以及數(shù)據(jù)采集效率。
2.2" Flask
Flask是一款輕量而靈活的Python Web框架,包括多個(gè)組件,比如路由、視圖函數(shù)以及Web服務(wù)器網(wǎng)關(guān)接口(Web Server Gateway Interface, WSGI)等,可以降低Web應(yīng)用設(shè)計(jì)的成本,其框架如圖2所示。在該框架中,客戶(hù)端首先發(fā)起網(wǎng)絡(luò)請(qǐng)求,并由Werkzeug提供的WSGI進(jìn)行處理;接著,F(xiàn)lask應(yīng)用程序(由Python構(gòu)建)處理請(qǐng)求;最后,通過(guò)WSGI將結(jié)果返回給客戶(hù)端。作為微框架,F(xiàn)lask并未引入過(guò)多的開(kāi)發(fā)限制,而是提供了基本的Web構(gòu)建工具,實(shí)現(xiàn)了Web應(yīng)用的快速構(gòu)建,同時(shí)保持了極大的自由度和靈活性。
3" 資源感知的任務(wù)調(diào)度設(shè)計(jì)
3.1" 設(shè)計(jì)動(dòng)機(jī)
在每臺(tái)節(jié)點(diǎn)機(jī)器中,爬蟲(chóng)任務(wù)通常是重復(fù)、多次、持久的應(yīng)用程序。長(zhǎng)時(shí)間運(yùn)行的任務(wù)會(huì)導(dǎo)致系統(tǒng)的CPU、運(yùn)行內(nèi)存、網(wǎng)絡(luò)等資源處于高負(fù)荷使用狀態(tài)。盡管網(wǎng)絡(luò)資源對(duì)于爬蟲(chóng)任務(wù)的執(zhí)行效率至關(guān)重要,但其他系統(tǒng)資源也會(huì)顯著影響任務(wù)的執(zhí)行效率。例如,CPU和運(yùn)行內(nèi)存限制了可并發(fā)執(zhí)行的線(xiàn)程數(shù)量,以及臨時(shí)數(shù)據(jù)存取或數(shù)據(jù)交換。與Scrapy?Redis這類(lèi)分布式爬蟲(chóng)框架類(lèi)似,每個(gè)節(jié)點(diǎn)中的爬蟲(chóng)系統(tǒng)負(fù)責(zé)執(zhí)行從Redis返回的任務(wù)。然而,在實(shí)際的分布式爬蟲(chóng)任務(wù)執(zhí)行中,每個(gè)節(jié)點(diǎn)將承擔(dān)不同的資源負(fù)載[14?15],隨著時(shí)間推移,每個(gè)節(jié)點(diǎn)的資源負(fù)載可能存在較大差異,例如,某些節(jié)點(diǎn)可能長(zhǎng)時(shí)間高負(fù)荷運(yùn)行,而其他節(jié)點(diǎn)可能有相當(dāng)一部分系統(tǒng)資源處于空閑狀態(tài)。
圖3展示了Scrapy?Redis運(yùn)行時(shí)每個(gè)節(jié)點(diǎn)可能的系統(tǒng)資源使用情況。假設(shè)當(dāng)前的主節(jié)點(diǎn)為Redis,并在4個(gè)子節(jié)點(diǎn)Node 1、Node 2、Node 3和Node 4上運(yùn)行爬蟲(chóng)任務(wù)。在[T1]時(shí)刻,Node 1和Node 4的平均資源利用率分別高達(dá)80%和91.7%,而Node 2和Node 3的平均資源利用率則保持在73.4%和76.7%。此時(shí),Node 1和Node 4不應(yīng)該再繼續(xù)執(zhí)行爬蟲(chóng)任務(wù),而應(yīng)該等待這兩個(gè)節(jié)點(diǎn)正在執(zhí)行中的爬蟲(chóng)任務(wù)結(jié)束后再進(jìn)行爬蟲(chóng)任務(wù)調(diào)度。在[T2]時(shí)刻,如果在Node 1和Node 4上保持爬蟲(chóng)任務(wù)調(diào)度,它們的資源利用率會(huì)達(dá)到峰值,相反,Node 2和Node 3則保持較低的資源利用率,這會(huì)導(dǎo)致節(jié)點(diǎn)的資源負(fù)載嚴(yán)重不均衡。
本文模擬了類(lèi)似的實(shí)驗(yàn)環(huán)境,將Node 1和Node 2的平均資源利用率控制在99.8%和12.9%,然后讓這兩個(gè)節(jié)點(diǎn)執(zhí)行相同的100個(gè)爬蟲(chóng)任務(wù),并統(tǒng)計(jì)這些爬蟲(chóng)任務(wù)的響應(yīng)時(shí)間(單位:ms),如圖4所示。
實(shí)驗(yàn)結(jié)果表明,與Node 1相比,Node 2任務(wù)響應(yīng)效率平均提高了22.6%。Node 1的資源使用接近峰值,導(dǎo)致了響應(yīng)爬蟲(chóng)任務(wù)的時(shí)間波動(dòng)非常明顯,相反,Node 2的響應(yīng)時(shí)間相對(duì)平穩(wěn)。
3.2" 任務(wù)調(diào)度架構(gòu)
資源感知的爬蟲(chóng)任務(wù)調(diào)度設(shè)計(jì)集中在充分利用分布式環(huán)境中的節(jié)點(diǎn)資源,以提高爬蟲(chóng)任務(wù)執(zhí)行效率和系統(tǒng)可用性。圖5展示了基于資源感知的分布式爬蟲(chóng)任務(wù)調(diào)度系統(tǒng)架構(gòu)。該架構(gòu)實(shí)時(shí)監(jiān)測(cè)各節(jié)點(diǎn)的CPU利用率、內(nèi)存占用和網(wǎng)絡(luò)帶寬等資源狀態(tài),根據(jù)資源利用率為每個(gè)節(jié)點(diǎn)確定執(zhí)行優(yōu)先級(jí),并優(yōu)先選擇低優(yōu)先級(jí)的節(jié)點(diǎn)來(lái)執(zhí)行任務(wù)。節(jié)點(diǎn)的優(yōu)先級(jí)定義依賴(lài)于每個(gè)節(jié)點(diǎn)的資源利用率反饋,因此引入了Flask作為通信工具,以構(gòu)建高效的節(jié)點(diǎn)間通信機(jī)制,實(shí)現(xiàn)即時(shí)獲取各節(jié)點(diǎn)資源利用率信息的目的。這一信息將用于動(dòng)態(tài)調(diào)整節(jié)點(diǎn)優(yōu)先級(jí),系統(tǒng)將優(yōu)先選擇資源利用率較低的節(jié)點(diǎn)執(zhí)行爬蟲(chóng)任務(wù),以最大化資源利用效益,具體操作如算法1所示。
算法1:優(yōu)先級(jí)排序
// NodePriority用于排序優(yōu)先級(jí),同時(shí)用于后續(xù)的功能擴(kuò)展
class NodePriority:
def_init_(self, nodeName, nodePriority):
self. nodeName = nodeName
self. nodePriority = nodePriority
def_lt_(self, other):
return self. nodePriority lt; other. nodePriority
//使用公式(1)計(jì)算每個(gè)節(jié)點(diǎn)的平均資源利用率
np = [NodePriority (\"node1\", 80), NodePriority (\"node2\", 70), NodePriority (\"node3\", 95)]
//利用sorted的從小到大排序功能,隊(duì)列化一個(gè)優(yōu)先級(jí)隊(duì)列
sorted_tasks = sorted(np)
此外,本文為所有的節(jié)點(diǎn)引入了一個(gè)資源利用率閾值,該閾值是靜態(tài)的,根據(jù)實(shí)驗(yàn)經(jīng)驗(yàn),當(dāng)節(jié)點(diǎn)的資源利用率達(dá)到90%后,節(jié)點(diǎn)不應(yīng)繼續(xù)調(diào)度新的爬蟲(chóng)任務(wù)。相反,應(yīng)等待執(zhí)行中的爬蟲(chóng)任務(wù)結(jié)束,并且節(jié)點(diǎn)的資源利用率下降至90%以下,然后再調(diào)度新的爬蟲(chóng)任務(wù)。
同時(shí),引入具有高度靈活性的Flask也使系統(tǒng)更具可擴(kuò)展性,可以進(jìn)一步將其擴(kuò)展為一個(gè)可視化的分布式爬蟲(chóng)監(jiān)控平臺(tái)。這一平臺(tái)不僅能夠展示各節(jié)點(diǎn)的資源利用率,還能實(shí)現(xiàn)對(duì)爬蟲(chóng)任務(wù)的實(shí)時(shí)管理。通過(guò)該平臺(tái),用戶(hù)可以方便地啟動(dòng)、暫停、終止爬蟲(chóng)任務(wù),甚至動(dòng)態(tài)增加節(jié)點(diǎn)以適應(yīng)數(shù)據(jù)采集的需求。此外,本文還設(shè)計(jì)了Flask與數(shù)據(jù)庫(kù)的連接,能夠檢索采集的數(shù)據(jù)進(jìn)行臨時(shí)審查,以及進(jìn)行其他的數(shù)據(jù)操作。這種可視化監(jiān)控平臺(tái)將提供全面的任務(wù)管理和實(shí)時(shí)監(jiān)控功能,使得整個(gè)分布式爬蟲(chóng)系統(tǒng)智能化程度更高且更具可操作性。
4" 資源感知的任務(wù)調(diào)度實(shí)驗(yàn)
4.1" 實(shí)驗(yàn)環(huán)境設(shè)置
本文搭建了一個(gè)爬蟲(chóng)環(huán)境,以實(shí)現(xiàn)基于資源感知的分布式爬蟲(chóng)任務(wù)調(diào)度系統(tǒng),其中涉及的算法和爬蟲(chóng)均采用Python開(kāi)發(fā)。為了更貼近實(shí)際的爬蟲(chóng)任務(wù)運(yùn)行環(huán)境,并與常規(guī)的分布式爬蟲(chóng)架構(gòu)進(jìn)行區(qū)分,本文實(shí)驗(yàn)將每個(gè)節(jié)點(diǎn)的初始平均資源利用率控制在一定范圍內(nèi),具體如表1所示。
4.2" 實(shí)驗(yàn)結(jié)果與分析
本文對(duì)比了未優(yōu)化和采用資源感知任務(wù)調(diào)度的Scrapy?Redis,實(shí)驗(yàn)對(duì)象的數(shù)據(jù)采集目標(biāo)一致,執(zhí)行了多組爬蟲(chóng)任務(wù),每組包含多個(gè)子爬蟲(chóng)任務(wù),結(jié)果如圖6、圖7所示。
由圖6可知,對(duì)于目標(biāo)網(wǎng)絡(luò)延遲較低、網(wǎng)頁(yè)解析較快、對(duì)CPU和內(nèi)存的依賴(lài)程度不高的情況,優(yōu)化后的效果并不明顯,大約提高了5%。
由圖7可知,對(duì)于目標(biāo)網(wǎng)絡(luò)延遲較高、網(wǎng)頁(yè)解析較慢,對(duì)CPU、內(nèi)存資源的依賴(lài)程度更高的情況,基于資源感知的爬蟲(chóng)任務(wù)調(diào)度顯著降低了爬蟲(chóng)任務(wù)的執(zhí)行時(shí)間,大約提高了37%。
4.3" 可視化監(jiān)控平臺(tái)
Flask框架在基于資源感知的分布式爬蟲(chóng)任務(wù)調(diào)度方法中有著不可或缺的作用。在本文方法中,F(xiàn)lask不僅是各個(gè)節(jié)點(diǎn)通信的重要工具,還為分布式爬蟲(chóng)管理者提供了一個(gè)直觀、實(shí)時(shí)、全面了解各個(gè)節(jié)點(diǎn)的資源利用和數(shù)據(jù)采集情況的強(qiáng)大工具。該平臺(tái)的可視化界面如圖8所示??梢暬O(jiān)控平臺(tái)不僅僅是一個(gè)簡(jiǎn)單的監(jiān)控系統(tǒng),更是一個(gè)智能化的分布式爬蟲(chóng)工具,能夠展示各節(jié)點(diǎn)的CPU使用率、內(nèi)存占用率和網(wǎng)絡(luò)帶寬利用率等多維度性能指標(biāo)。
可視化監(jiān)控平臺(tái)還提供了全部暫停、全部啟動(dòng)、數(shù)據(jù)庫(kù)查詢(xún)、增加節(jié)點(diǎn)等功能。特別是節(jié)點(diǎn)增加功能,提高了本文提出的分布式爬蟲(chóng)系統(tǒng)的可擴(kuò)展性。在擴(kuò)展時(shí),本文采用了Docker容器技術(shù)[16],利用Docker實(shí)現(xiàn)了遠(yuǎn)程啟動(dòng)和一鍵部署爬蟲(chóng)環(huán)境等功能。同時(shí),可視化監(jiān)控平臺(tái)的所有請(qǐng)求也經(jīng)過(guò)修改后的AES加密[17],實(shí)現(xiàn)了密文傳輸。
5" 結(jié)" 論
本文提出了基于資源感知的分布式爬蟲(chóng)任務(wù)調(diào)度方法,旨在有效利用分布式環(huán)境中各個(gè)節(jié)點(diǎn)的系統(tǒng)資源,提高爬蟲(chóng)系統(tǒng)的性能和效率。通過(guò)采用資源感知的爬蟲(chóng)任務(wù)調(diào)度算法和節(jié)點(diǎn)的優(yōu)先級(jí)管理,本文實(shí)現(xiàn)了各個(gè)節(jié)點(diǎn)的CPU、內(nèi)存、網(wǎng)絡(luò)等資源的合理負(fù)載,以確保爬蟲(chóng)任務(wù)在資源利用率較低的節(jié)點(diǎn)上執(zhí)行,一定程度上緩解了節(jié)點(diǎn)資源過(guò)度占用和不均衡的情況。同時(shí),本文還結(jié)合了Flask,確保了各個(gè)節(jié)點(diǎn)之間的連接通信,并且實(shí)現(xiàn)了可視化操作平臺(tái),提高了該方法的可擴(kuò)展性。實(shí)驗(yàn)結(jié)果證明,該方法可以顯著提高分布式爬蟲(chóng)任務(wù)執(zhí)行的效率。此外,該方法還可以與多線(xiàn)程和多進(jìn)程等異步并發(fā)方案結(jié)合,進(jìn)一步提高爬蟲(chóng)任務(wù)調(diào)度的效率。
注:本文通訊作者為魏繼楨。
參考文獻(xiàn)
[1] 馬捷,郝志遠(yuǎn),李麗華,等.數(shù)字化轉(zhuǎn)型視域下的數(shù)據(jù)價(jià)值研究綜述:內(nèi)涵闡述、作用機(jī)制、場(chǎng)景應(yīng)用與數(shù)據(jù)創(chuàng)新[J].圖書(shū)情報(bào)工作,2023,67(15):4?13.
[2] 李培.基于Python的網(wǎng)絡(luò)爬蟲(chóng)與反爬蟲(chóng)技術(shù)研究[J].計(jì)算機(jī)與數(shù)字工程,2019,47(6):1415?1420.
[3] 潘曉英,陳柳,余慧敏,等.主題爬蟲(chóng)技術(shù)研究綜述[J].計(jì)算機(jī)應(yīng)用研究,2020,37(4):961?965.
[4] 曾健榮,張仰森,鄭佳,等.面向多數(shù)據(jù)源的網(wǎng)絡(luò)爬蟲(chóng)實(shí)現(xiàn)技術(shù)及應(yīng)用[J].計(jì)算機(jī)科學(xué),2019,46(5):304?309.
[5] 韓貝,馬明棟,王得玉.基于Scrapy框架的爬蟲(chóng)和反爬蟲(chóng)研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2019,29(2):139?142.
[6] 牛作東,李捍東.基于Python與flask工具搭建可高效開(kāi)發(fā)的實(shí)用型MVC框架[J].計(jì)算機(jī)應(yīng)用與軟件,2019,36(7):21?25.
[7] KIM Y Y, KIM Y K, KIM D S, et al. Implementation of hybrid P2P networking distributed web crawler using AWS for smart work news big data [J]. Peer?to?peer networking and application, 2020, 13(1): 659?670.
[8] 馬蕾,馮錫煒,竇予梓,等.分布式爬蟲(chóng)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2020,30(2):192?196.
[9] 趙宸,劉建華.基于Django的分布式爬蟲(chóng)框架設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2020,48(10):2495?2498.
[10] 盧照,師軍,張耀午,等.基于雙緩沖的分布式爬蟲(chóng)調(diào)度策略的設(shè)計(jì)與研究[J].計(jì)算機(jī)與數(shù)字工程,2022,50(8):1686?1690.
[11] GUO H J. Research on Web data mining based on topic crawler [J]. Journal of Web engineering, 2021, 20(4): 1193?1205.
[12] MURUGUDU M R, REDDY L S S. Efficiently harvesting deep web interfaces based on adaptive learning using two?phase data crawler framework [J]. Soft computing, 2023, 27(1): 505?515.
[13] 張杰,劉凱,周立軍.采用Redis高并發(fā)應(yīng)用系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)方法[J].計(jì)算機(jī)與數(shù)字工程,2020,48(5):1222?1226.
[14] 曾磊,白金明,劉琦.多群落粒子群優(yōu)化供應(yīng)鏈數(shù)據(jù)中心任務(wù)調(diào)度[J].應(yīng)用科學(xué)學(xué)報(bào),2023,41(3):419?430.
[15] 吳傳峰,朱偉.一種面向完成時(shí)間與負(fù)載均衡的任務(wù)調(diào)度算法[J].指揮控制與仿真,2023,45(2):82?87.
[16] 吳逸文,張洋,王濤,等.從Docker容器看容器技術(shù)的發(fā)展:一種系統(tǒng)文獻(xiàn)綜述的視角[J].軟件學(xué)報(bào),2023,34(12):5527?5551.
[17] 李昭容.數(shù)據(jù)加密技術(shù)在計(jì)算機(jī)網(wǎng)絡(luò)安全中的應(yīng)用研究[J].信息與電腦(理論版),2023,35(15):13?16.
Method of distributed crawler task scheduling based on resource awareness
ZHANG Jun, WEI Jizhen, LI Yubin
(School of Information Engineering, East China University of Technology, Nanchang 330013, China)
Abstract: This paper aims to develop a distributed crawler task scheduling method based on resource awareness, so as to optimize the system resource utilization of each node in a distributed environment and improve the execution efficiency of crawler task. By introducing resource awareness scheduling algorithm and node priority management, the monitoring of resources of CPU, memory and network in nodes is achieved to balance the scheduling of crawler task, that is, to ensure that crawler tasks are executed on nodes with low resource utilization, so as to effectively relieve the excessive resource occupation and imbalance among nodes. In addition, the introduction of Flask has improved the scalability of the method and achieved a visual crawler monitoring platform. Experimental results show that the proposed method can achieve significant results in improving the efficiency and adaptability of crawler task execution, which provides useful guidance for the further optimization of distributed crawler systems.
Keywords: distributed crawler; task scheduling; resource awareness; Flask; data collection; resource utilization rate
DOI:10.16652/j.issn.1004?373x.2024.09.016
引用格式:張軍,魏繼楨,李鈺彬.基于資源感知的分布式爬蟲(chóng)任務(wù)調(diào)度方法[J].現(xiàn)代電子技術(shù),2024,47(9):86?90.
收稿日期:2024?01?17"""""""""" 修回日期:2024?02?05
基金項(xiàng)目:國(guó)家自然科學(xué)基金資助項(xiàng)目(62162002);國(guó)家自然科學(xué)基金資助項(xiàng)目(61662002);江西省自然科學(xué)基金資助項(xiàng)目(20212BAB202002)
張" 軍,等:基于資源感知的分布式爬蟲(chóng)任務(wù)調(diào)度方法
張" 軍,等:基于資源感知的分布式爬蟲(chóng)任務(wù)調(diào)度方法
作者簡(jiǎn)介:張" 軍(1978—),男,湖南常德人,博士,教授,主要研究方向?yàn)樘幚砥?存儲(chǔ)器性能功耗優(yōu)化、大數(shù)據(jù)技術(shù)原理與應(yīng)用、自然語(yǔ)言處理。
魏繼楨(1998—),男,江西吉安人,碩士研究生,研究方向?yàn)镚PGPU微體系結(jié)構(gòu)、并行計(jì)算。
李鈺彬(1998—),女,廣東韶關(guān)人,碩士研究生,研究方向?yàn)閷W(xué)圖像處理、自然語(yǔ)言處理。