開源通用爬蟲框架YayCrawler-框架的運行機制


這一節我將向大家介紹一下YayCrawler的運行機制,首先允許我上一張圖:

 

image

首先各個組件的啟動順序建議是Master、Worker、Admin,其實不按這個順序也沒關系,我們為了講解方便假定是這個啟動順序。

一、Master端分析

    Master啟動后會連接Redis查詢任務隊列狀態,Master維持了四個狀態的任務隊列:待執行任務隊列、執行中任務隊列、成功任務隊列和失敗任務隊列。Master內部有一個任務調度器,Master等Worker心跳包到來的時候,觀察Worker是否還有任務分配的余地(每個Worker可以設置自己本地的任務隊列的長度),如果Worker還能接收n個任務,任務調度器就會從待執行任務隊列中取至多n個任務分配給該Worker。分配成功后,Master會把這n個任務從待執行隊列移到執行中隊列。

image

     Master會定期掃描已注冊的Worker,如果某個Worker的上次心跳時間距離了現在已經超過了2倍Worker自身的心跳間隔,那么Master會認為此Worker已經失聯,不能再給它分配任務,因此會把它從已注冊列表移除。

image

    Master會定期掃描執行中隊列,如果發現某個任務的分配時間距離現在已經超過了某個預設值,我們可以認為這個任務出現了差錯,應該重新執行一遍,因此Master會重新把這個任務從執行中隊列移到待執行隊列,以便再次分配執行。

二、Worker端分析

    Worker的配置文件里面配置了Master的服務通信地址,Worker啟動的時候就會通過這個地址向Master注冊,注冊的信息包括Worker的通信地址、心跳間隔、任務配額等。Worker注冊成功后會定期向Master發送心跳,向Master匯報自己的狀態的同時領取任務。

image

    Worker執行任務的過程就是一個常規爬蟲的處理過程,這個過程我們后續會詳細講解,我們這里只需要明確一個事實:Worker執行完一個任務后會有兩個狀態和兩種類型的結果數據。如果Worker成功執行任務,那么結果會包括兩個部分:字段數據和子鏈接。字段數據會通知持久化組件進行持久化(默認字段數據是保存到MongoDB,圖片會被下載到文件服務器);子鏈接會通知到Master然后加入到待執行隊列。不管任務執行成功與否,Worker都會給Master一個通知讓其修改任務的狀態。
image

三、Admin端分析

     Admin端主要是為用戶提供一個操作的接口界面,這是一個Web工程,Admin端的配置文件里面也記錄了Master的服務通信地址。用戶在Admin端可以針對目標網頁編寫抽取規則,測試規則,直到保存到數據庫。用戶可以在界面上查看任務的執行情況,比如成功的任務,失敗的任務,任務的結果等;用戶也可以在界面上單個或批量發布普通任務/定時任務,這些任務最終會在Worker上執行,Worker在解析的時候會參考用戶設置的解析規則。

四、其他

    Master、Worker和Admin三者之間的通信是基於http協議的,為了安全,通信過程中都使用了token, timestamp, nonce來對消息體進行簽名並驗證,只有簽名正確才能通信成功。

   框架中的隊列、持久化方式都是基於接口編程的,您可以很方便的用自己的實現來替換原有的處理。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM