







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