







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