2.這就是搜索引擎:核心技術詳解 --- 網絡爬蟲

1.爬蟲框架:
	1.批量
	2.增量
	3.垂直

2.優秀爬蟲特性:
	1.高性能
	2.可擴展
	3.健壯
	4.友好性

3.爬蟲質量的評價標準:
	1.抓取網頁的覆蓋率
	2.抓取網頁時新性
	3.抓取網頁重要性

4.抓取策略:
	1.寬度優先遍歷策略
	2.非完全PageRank策略
	3.OCIP策略(在線頁面重要性計算)
	4.大站優先策略

5.網頁更新策略:
	1.歷史參考策略
	2.用戶體驗策略
	3.聚類抽樣策略

6.暗網抓取:
	1.查詢組合問題
	2.文本框填寫問題

7.分佈式爬蟲:
	1.主從式分佈爬蟲
	2.對等式分佈爬蟲

	通用爬蟲引擎的處理對象是互聯網網頁,目前網頁數量以百億級,所以搜索引擎首先面臨的問題就是:如何能夠設計出高效的下載系統,以將如此海量的網頁數據傳送到本地,在本地形成
  互聯網網頁的鏡像備份。

2.1 通用爬蟲框架 
	通用爬蟲框架流程:首先從互聯網頁面中精心挑選一部分網頁,以這些網頁的鏈接地址作爲種子url,將這些種子url放入待抓取的url隊列中,爬蟲從待抓取url隊列依次讀取,並將url
  通過dns解析,把鏈接地址轉換爲網站服務器對應的ip地址。然後將其和網頁相對路徑名稱交給網頁下載器,網頁下載器負責頁面內容的下載。對於下載到本地的網頁,一方面將其存儲到
  頁面庫中,等待建立索引等後續處理;另一方面將下載網頁的url放入已抓取url隊列中,這個隊列記載了爬蟲系統已經下載過的網頁url,以避免網頁的重複抓取。對於剛下載的網頁,從
  中抽取出所包含鏈接信息,並在已抓取url隊列中檢查,如果發現鏈接沒有被抓取過,則將這個url放入待抓取url隊列末尾,在之後的抓取調度中會下載這個url對應的網頁。如此這般,
  直到待抓取url隊列爲空,這代表着爬蟲系統已經能夠將抓取的網頁盡數抓完,此時完成了一輪完成的抓取過程。
  	對於爬蟲來說,往往還需要考慮進行網頁去重及網頁反作弊。

  	如果從更加宏觀的角度考慮,處於動態抓取過程中的爬蟲和互聯網所有網頁之間的關係,將互聯網頁面劃分爲5個部分:
  		1.已下載網頁集合
  			爬蟲已經從互聯網下載到本地進行索引的網頁集合。
  		2.已過期網頁集合
  			由於網頁數量巨大,爬蟲完整抓取一輪需要較長時間,在抓取過程中,很多已經下載的網頁可能過期。之所以如此,是因爲互聯網網頁處於不斷的動態變化過程中,所以易產生
  		  本地網頁內容和真實互聯網網頁不一致的情況。
  		3.待下載網頁集合
  			待抓取url隊列中的網頁,這些網頁即將被爬蟲下載。
  		4.可知網頁集合
  			這些網頁沒有被爬蟲下載,也沒有出現在待抓取url隊列中,不過通過已經抓取的網頁或者待抓取url隊列中的網頁,總是能夠通過鏈接關係發現它們,稍晚的時候會被爬蟲抓取
  		  並索引。
  		5.不可知網頁集合
  			有些網頁對於爬蟲來說是無法抓取的,這部分網頁構成了不可知網頁集合。事實上,這部分網頁所佔的比例很高。

  	從理解爬蟲的角度看,對於互聯網網頁給出如上劃分有助於深入理解搜索引擎爬蟲所面臨的主要任務和挑戰。
  	
  	大體而言,可以將爬蟲劃分爲如下3種類型:
  		1.批量爬蟲型
  			批量爬蟲型有比較明確的抓取範圍和目標,當爬蟲達到這個設定的目標後,即停止抓取過程。至於具體目標可能各異,也許是設定抓取一定數量的網頁即可,也許是設定抓取消耗
  		  的時間等。

  		2.增量爬蟲型
  			與批量爬蟲不同,會保持不斷抓取的過程,對於抓取的網頁,要定期更新,因爲互聯網網頁處於不斷變化中,新增的網頁,網頁被刪除或者網頁內容更改都很常見,而增量型爬蟲
  		  需要及時反映這種變化,所以處於持續不斷的抓取過程中,不是在抓取新的網頁,就是在更新已有的網頁。通用的商業搜索引擎爬蟲基本屬於此類。

  		3.垂直爬蟲型
  			垂直爬蟲關注特定主題內容或者屬於特定行業的網頁。垂直爬蟲一個最大的特點和難點就是:如何識別網頁內容是否屬於特定行業或者主體。從節省系統資源的角度來說,不太可能
  		  把所有互聯網頁面下載下來之後再去篩選,這樣浪費資源就太過分了,往往需要爬蟲在抓取階段就能夠動態識別某個網址是否與主題相關,並儘量不去抓取無關頁面,以達到節省資源
  		  的目的。垂直搜索網站或者垂直行業網站往往需要此種類型的爬蟲。

2.2 優秀爬蟲的特性 
	1.高性能
		這裏的性能主要是指爬蟲下載網頁的抓取速度,常見的評價方式是以爬蟲每秒能夠下載的網頁數量作爲性能指標,單位時間內能夠下載的網頁數量越多,則爬蟲的性能越高。要提高爬蟲的
	  性能,在設計時程序訪問磁盤的操作方法和具體實現時數據結構的選擇很關鍵,比如對於待抓取的url隊列和已抓取的url隊列,因爲url數量非常大,不同實現方式性能 表現迥異,所以
	  高效的數據結構對於爬蟲性能影響很大。

	2.可擴展性
		即很容易通過增加抓取爬蟲服務器和爬蟲數量來達到此目的。目前使用的大型網絡爬蟲一定是分佈式的,即多臺服務器專做抓取,每臺服務器部署多個爬蟲,每個爬蟲多線程運行,通過
	  多種方式增加併發性。對於商業搜索引擎來說,可能還要在全球範圍,不同地域分別部署數據中心,爬蟲也被分配到不同的數據中心。

	3.健壯性
		爬蟲要訪問各種類型的網站服務器,可能會遇到很多種非正常的情況,比如網頁html編碼不規範,被抓取服務器突然死機,甚至是爬蟲陷阱。對各種異常情況能夠正確處理非常重要,
	  否則可能會不定期停止工作,這是無法容忍的。

	4.友好性
		爬蟲的友好性包括2方面:一是保護網站的部分隱私,另外一個是減少被抓取網站的網絡負載。
		爬蟲抓取的對象是各種類型的網站,對於網站擁有者來說,有些內容不希望被爬取,所以需要設定協議,來告知爬蟲哪些內容是不允許抓取的。目前有2個主流方法可達到此目的:爬蟲
	  禁抓協議和網頁禁抓協議。
	  	爬蟲禁抓協議(Robot Exclusion Protocol)指的是由網站所有者生成一個指定的文件robot.txt,並放在網站服務器的根目錄下,這個文件指明瞭網站中哪些目錄下的文件是不允許
	  爬蟲抓取的。具有友好性的爬蟲在抓取該網站的網頁前,首先要讀取robot.txt,對禁止抓取的網頁一般不進行下載。

	  robot.txt
	  User-Agent:GoogleBot  // 針對哪個爬蟲
	  Disallow:/tmp/    //不允許抓取的目錄
	  Disallow:/cgi-bin/
	  Disallow:/users/paranoid/

	  	爬蟲禁抓協議一般以目錄爲單位,即整個目錄下的網頁或內容都不允許被抓取。如果只想讓單個網頁不被抓取,該如何做?網頁禁抓協議標記(Robot META tag)可在此場合派上用場。
	  即在網頁的html代碼裏面加入 meta name="robots" 標記,content字段指出允許或者不允許爬蟲的哪些行爲。可分爲2種,一種是告知爬蟲不要索引該網頁內容,以noindex作爲標記;
	  另外一種是告知爬蟲不要抓取網頁所包含的鏈接,以nofollow作爲標記。通過這種形式,可以達到對網頁內容的一種隱私保護。

	  //禁止索引網頁內容
	  <meta name="robots" content="noindex"> 

	  //禁止抓取網頁鏈接
	  <meta name="robots" content="nofollow">
	  
	  遵從以上協議的爬蟲可以被認爲是友好的,這是從保護私密性的角度考慮的。另外一種友好是,希望爬蟲對某網站的訪問造成的網絡負載較低。

2.3 爬蟲質量的評價標準 
	從搜索引擎用戶體驗的角度考慮,對爬蟲工作效果有不同的評價標準:
		1.抓取網頁的覆蓋率
			爬蟲系統抓取的網頁數量佔互聯網所有網頁數量的比例。
		2.抓取網頁時新性
			對於抓到本地的網頁來說,很多網頁可能已經發生變化,或者被刪除,或者內部被修改,因爲爬蟲完成抓取一輪需要較長的時間週期,所以
		  有一部分過期數據,網頁的時新性越好,對用戶體驗的作用不言而喻。
		3.抓取網頁重要性

	通盤考慮以上3個因素,可將爬蟲研發的目標簡單描述爲:在資源有限的情況下,既然只能抓取互聯網網頁的一部分,那麼就儘可能選擇比較重要的那部分網頁來索引;
  對於已經抓取的網頁,儘可能的更新其內容,使索引網頁和互聯網對應的網頁內容同步更新;在此基礎上,儘可能擴大抓取範圍,抓取到更多以前無法發現的網頁。
  	以google爲例,至少包含2套不同目的的爬蟲系統,一套被稱爲Fresh Bot,主要考慮網頁的時新性,對於內容更新頻繁的網頁,目前可以達到秒計的更新週期;而另外
  一套被稱爲Deep Crawl Bot,主要針對其他更新不是那麼頻繁的網頁抓取,以天爲更新週期。此外,還有對暗網抓取的系統。
  	其中,暗網抓取技術是爲了增加網頁覆蓋率,網頁更新策略也是爲了增加下載網頁的時效性,網頁重要性評價標準則是抓取策略的核心,而分佈式爬蟲的分佈機制也決定了
  爬蟲系統的性能。

2.4 抓取策略 
	在爬蟲系統中,待抓取url隊列是很關鍵的部分,需要爬蟲抓取網頁url在其中順序排列,形成一個隊列結構,調度程序每次從隊列頭取出某個url,發送給網頁下載器下載頁面
  內容,每個新下載的頁面包含url會追加到待抓取url隊列的末尾,如此形成循環,整個爬蟲系統可以說是靠這個隊列驅動的。
  	待抓取url隊列中的頁面順序是如何確定的?爬蟲的不同抓取策略,就是利用不同的方法來確定待抓取url隊列中url優先順序的。爬蟲的抓取策略有很多種,但不論方法如何,其
  基本目標一致:優先選擇重要網頁進行抓取。在爬蟲系統中,所謂網頁的重要性,其評判標準可以選擇不同的方法,但是大部分都是按照網頁的流行性來定義的。'鏈接分析'介紹的
  PageRank 就是評價網頁重要性的常用標準。
  	抓取的策略很多,包括4種:寬度優先遍歷策略,非完全PageRank策略,OCIP策略及大站優先策略。

 2.4.1 寬度優先遍歷策略(Breath First)
	寬度優先遍歷是一種非常簡單直觀且歷史悠久的遍歷方法,在搜索引擎爬蟲一出現就開始採用,新提出的抓取策略往往會將這種方法作爲比較基準。但應該注意到的是,這種策略
  也是一種相當強悍的方法,很多新方法實際效果不見得比寬度優先遍歷策略好,所以至今這種方法也是很多實際爬蟲系統優先採用的策略。
  	"將新下載的網頁包含的鏈接直接追加到待抓取url隊列的末尾",這就是寬度優先遍歷的思想。也就是說,這種方法沒有明確提出和使用網頁重要性衡量標準,只是機械的將新下載的
  網頁抽取鏈接,並追加到待抓取url隊列中,以此安排url的下載順序。
  	實驗表明這種策略效果很好,雖然看似機械,但實際上的網頁抓取順序基本是按照網頁的重要性排序的。之所以如此,有研究人員認爲:如果某個網頁包含很多入鏈,那麼更有可能被
  寬度優先策略遍歷策略早早的抓到,而入鏈個數從側面體現了網頁的重要性,即實際上寬度優先遍歷策略隱含了一些網頁優先級假設。
  	 
 2.4.2 非完全PageRank策略(Partial PageRank) 
	pagerank是一種著名的鏈接分析算法,可以用來衡量網頁的重要性。很自然的,可以想到用pagerank的思想來對url優先級進行計算排序。但這有個問題,pagerank是全局性算法,
  也就是說當所有網頁都下載完成後,其計算結果纔是可靠的,而爬蟲的目的就是去下載網頁,在運行過程中只能看到一部分頁面,所以在抓取階段的網頁是無法獲得可靠的pagerank得分的。
  	如果我們仍然堅持在這個不完整的互聯網頁面子集內計算pagerank呢?這就是非完全pagerank策略的基本思路:對於已經下載的網頁,加上待抓取url隊列中的url一起,形成網頁集合,
  在此集合內進行pagerank計算,計算完成後,將待抓取url隊列中的網頁按照pagerank得分由高到低排序,形成的序列就是爬蟲接下來應該依次抓取url列表。這也是稱之爲'非完全pagerank'
  的原因。
  	如果每次新抓取一個網頁,就將所有已經下載的網頁重新計算新的非完全pagerank值,明顯效率更低。一個折中的方法是:每當新下載的萬個億攢夠k個,然後就將所有的頁面重新計算一遍
  非完全pagerank。這樣的計算效率還能勉強接受,但是又引來新問題:在展開下一輪pagerank計算之前,從新下載的網頁抽取包含的鏈接,很有可能這些鏈接的重要性非常高,理應優先下載,
  這種情況如何解決?非完全pagerank賦予這些新抽取出來但是又沒有pagerank值的網頁一個臨時pagerank值,將這個網頁的所有入鏈傳導的pagerank值彙總,作爲臨時pagerank值,如果
  這個值比待抓取url隊列中已經計算出來的pagerank值的網頁高,那麼優先下載這個url。

 2.4.3 OCIP策略(Online Page Importance Computation) 
	OCIP的字面含義是'在線頁面重要性計算',可以將其看做是一種改進的pagerank算法。在算法開始之前,每個互聯網頁面都賦予相同的'現金'(cash),每當下載了某個頁面p後,p將自己的
  擁有的現金平均分配給頁面中包含的鏈接頁面,把自己的現金清空。而對於帶抓取url隊列中的網頁,則根據手頭擁有的現金金額多少排序,優先下載現金最充裕的網頁。ocip從大的框架上與pagerank
  思路基本一致,區別在於:pagerank每次需要迭代計算,而ocip策略不需要迭代過程,所以計算速度遠遠大於pagerank,適合實時計算使用。同時,pagerank在計算時,存在向無連接關係網頁的
  遠程的跳轉過程,而ocip沒有這一計算因子。實驗結果表明,ocip是種較好的重要性策略,效果略優於寬度優先遍歷策略。

 2.4.4 大站優先策略(Larger Sites First) 
	大站優先策略很直接:以網站爲單位來衡量網頁的重要性,對於待抓取url隊列中的網頁,根據所屬網站歸類,如果哪個網站等待下載的頁面最多,則優先下載這些鏈接。其本質思想傾向於優先下載
  大型網站,因爲大型網站往往包含更多的頁面。

2.5 網頁更新策略 
	對於已經抓取過的網頁,爬蟲還要負責保持其內容與互聯網網頁內容的同步,這取決於爬蟲採用的網頁更新策略。網頁更新策略的任務是要決定何時重新抓取之前已經下載過的網頁,一般有3種:歷史參考策略,
  用戶體驗策略和聚類抽樣策略。

 2.5.1 歷史參考策略 
	歷史參考策略是最直觀的一種更新策略,它建立在如下假設之上:過去頻繁更新的網頁,那麼將來也會頻繁更新。所以,爲了預估某個網頁何時進行更新,可以通過參考其歷史更新情況做出決定。
	這種方法常常利用泊松過程來對網頁的變化進行建模,根據每個網頁過去的變動情況,利用模型預測將來何時內容會再次發生變化,以此來指到爬蟲的抓取過程。

 2.5.2 用戶體驗策略 
	一般來說,搜索引擎用戶提交查詢後,相關的搜索結果可能成千上萬,而用戶沒有耐心看排在後面的結果。用戶體驗策略就是利用搜索引擎用戶的這個特點來設計更新策略的。
	這種更新策略以用戶體驗爲核心,即使本地索引的網頁內容是過時的,但是如果不影響用戶體驗,那麼晚些更新這些過時網頁也未嘗不可。用戶體驗策略保存網頁的多個歷史版本,並根據過去每次內容變化對搜索質量
  的影響,得出一個平均值,以此作爲判斷爬蟲抓取網頁時機的參考依據,對於影響越厲害的網頁,則越優先調度重新抓取。

 2.5.3 聚類抽樣策略 
	上面2種網頁更新策略嚴重依賴網頁的歷史更新信息,因爲這是能夠進行後續計算的基礎。但是現實中,爲每個網頁保存歷史信息,搜索系統會大量增加額外的負擔。從另外的角度看,如果是首次抓取的網頁,因爲沒有
  歷史信息,所以也就無法按照這2種思路去預估其更新週期。聚類抽樣策略即是爲了解決上述缺點而提出的。
  	聚類抽樣策略認爲:網頁具有一些屬性,根據這些屬性可以預測其更新週期,具有相似屬性的網頁,其更新週期也是類似的。於是,可以根據這些屬性將網頁歸類,同一類別的網頁具有相同的更新頻率。爲了計算某個類別
  的更新週期,只需對類別內的網頁進行採樣,以這些被採樣網頁的更新週期作爲類別內所有其他網頁的更新週期。與上述的2種方案對比,這種策略一方面無需爲每個網頁保存歷史信息;另一方面,對於新網頁,即使沒有歷史
  信息,也可以根據其所屬類別來進行更新。
  	研究中,將能夠體現網頁更新週期的屬性劃分爲2大類:靜態特徵和動態特徵。靜態特徵包括:頁面的內容,圖片數量,頁面大小,鏈接深度,pagerank值等十幾種;而動態特徵則體現了隨着時間的變化情況,比如圖片數量
  的變化情況,入鏈出鏈的變化情況等。根據這2類特徵,即可對網頁進行聚類。
  	實驗表明,聚類抽樣策略效果好於前述2種更新策略,但是對以億計的網頁進行聚類,其難度也是非常大的。

2.6 暗網抓取(Deep Web Crawling) 
	所謂暗網,是指目前搜索引擎爬蟲按照常規方式很難抓取到的互聯網頁面。如前面所說,搜索引擎的爬蟲依賴頁面中的鏈接關係發現新的頁面,但很多網站的內容是以數據庫方式存儲的,典型的例子就是垂直網站,比如攜程
  的機票數據,很難有顯式鏈接指向其數據庫內的記錄,往往是服務網站提供組合查詢頁面,只有用戶按照需求輸入查詢之後,纔可能獲得相關數據。所以,常規的爬蟲是無法索引這些數據內容,這是暗網的命名由來。
  	爲了能夠對暗網的數據進行索引,需要研發與常規爬蟲機制不同的系統,這類爬蟲被稱爲暗網爬蟲。暗網爬蟲的目的是將暗網數據從數據庫中挖掘出來,並將其加入搜索引擎的索引,這樣用戶在搜索時變可利用這些數據,
  增加信息覆蓋的程度。
  	垂直網站提供的搜索頁面,往往需要人工選擇或者填寫內容,比如機票搜索需要選擇出發地,目的地等。而暗網爬蟲爲了能夠挖掘數據庫的記錄,必須模擬人的行爲,填寫內容並提交表單。對於暗網爬蟲來說,其技術挑戰有
  2點:一是查詢組合太多,如果一一組合,那麼會給被訪問網站造成太大的壓力,所以如何精心組合查詢選項是個難點;第二點在於:有的查詢是文本框,比如圖書中輸入書名,爬蟲怎樣才能填入合適的內容?也是個挑戰。

 2.6.1 查詢組合問題 	
	暗網爬蟲希望能夠將某個垂直網站的數據庫記錄儘可能多的下載到索引庫中,但這是約束和前提條件的,即不能給被訪問網站造成過大的訪問壓力,同時儘可能節省爬蟲本身的資源。
	垂直網站往往會給用戶提供多個查詢輸入框,不同輸入框代表了搜索對象某方面的屬性,通過組合這些屬性來將搜索範圍縮小。對於暗網爬蟲來說,一個簡單粗暴的方式就是:將各種輸入框的可能輸入值組合起來遍歷一遍。
  這種沒有必要,因爲很多組合是無效的,也給網站造成壓力。
  	google對此提出瞭解決方案,稱之爲富含信息查詢模板技術。
  	對於一個固定的垂直搜索來說,其查詢模板組合起來很多,我們的任務是找到富含信息的查詢模板,那麼什麼又是富含信息的查詢模板?google給的技術方案是如此定義的:對於某個固定的查詢模板來說,如果給模板內的
  每個屬性都賦值,形成不同的查詢組合,提交給垂直搜索引擎,觀察所有返回頁面的內容,如果相互之間內容差異比較大,則這個查詢模板就是富含信息查詢模板。
  	這樣規定,是基於如下考慮:如果返回結果頁面內容重複太多,很可能這個查詢模板的維度太高,導致很多種組合無搜索結果,抑或構造的查詢本身就是錯誤的,搜索系統返回了錯誤頁面。
  	假設按照上面方式對所有查詢模板一一試探,判斷其是否富含信息查詢模板,則因爲查詢模板數量太多,系統效率還是會很低。google爲此提出了技術方案是使用ISIT算法。
  	ISIT算法的基本思路是:首先從一維模板開始,對一維查詢進行逐個考察,看其是否爲富含信息模板,如果是的話,則將這個一維模板擴展到二維,再觀察,逐步增加維數,直到再也無法找到富含信息的查詢模板爲止。
  通過這種方式,就可以找到大多數富含信息查詢模板,同時也儘可能減少了提交的查詢總數。

 2.6.2 文本框填寫問題 
	對於輸入中的文本框,需要爬蟲自動生成查詢。
	在爬蟲運轉起來之前,因爲對目標網站一無所知,所以必須提供一些提示。通過人工觀察網站進行定位,提供一個與網站內容相關的初始種子查詢關鍵字,對於不同的網站,需要人工提供不同的詞表,以此作爲爬蟲能夠
  繼續工作的基礎條件。爬蟲根據初始種子詞表,向垂直搜索引擎提交查詢,並下載返回的結果頁面。之後從返回結果中自動挖掘出相關的關鍵字,並形成一個新的查詢列表,依次將新挖掘的查詢提供給搜索引起。如此反覆,
  直到無法下載到新的內容爲止。這種通過人工啓發結合遞歸迭代的方式,儘可能的覆蓋數據庫裏的記錄。

2.7 分佈式爬蟲 
	對於商業搜索引擎來說,分佈式爬蟲架構是必須採用的技術。
	分佈式架構可以分爲若干個分佈式層級,不同的應用可能由其中部分層級構成。如,分佈式數據中心,分佈式抓取服務器以及分佈式爬蟲程序。整個爬蟲系統由全球多個分佈式數據中心構成,每個數據中心負責抓取本
  地域周邊的互聯網網頁。每個數據中心又由多臺高速網絡連接的抓取服務器組成,而每臺服務器又可能部署多個爬蟲程序。對於同一數據中心的多臺抓取服務器,不同機器之間的分工協作方式會有差異,常見的分佈式
  架構有2種:主從分佈式和對等式分佈式爬蟲。

 2.7.1 主從式分佈爬蟲(Master-Slave) 
	不同的服務器承擔不同的角色分工,其中一臺專門負責對其他服務器提供url分發服務,其他機器則進行實際的網頁下載。url服務器維護待抓取url對壘,並從中獲得待抓取網頁的url,分配給不同的抓取服務器,另外
  還要對抓取服務器之間的工作進行負載均衡,使得各個服務器承擔的工作量大致相等。抓取服務器之間沒有通信聯繫,每個抓取服務器只和url服務器盡心消息通信。url服務器容易成爲瓶頸。

 2.7.2 對等式分佈爬蟲(Peer to Peer)
	在對等分佈式爬蟲體系中,服務器之間不存在分工差異,每個服務器承擔相同的功能,各自負擔一部分url的抓取工作。Mercator爬蟲採用此種體系架構。
	由於沒有url服務器存在,每臺抓取服務器的任務分工就成爲問題。由服務器自己來判斷某個url是否應該由自己來抓取,或者將這個url傳遞給相應的服務器。至於採用的判斷方法,則是對網址的主域名進行哈希,之後
  取模(即hash[域名]%m,這裏的m對應服務器個數),如果計算所得的值和抓取服務器編號匹配,則自己下載該網頁,否則將該網址轉發給對應編號的抓取服務器。
  	缺點是,如果抓取過程中某臺服務器宕機,或者此時新加入一臺服務器,因爲取模的m是固定的,此時m發生變化,會導致大部分url哈希取模後的值跟着變化。可以採用一致性哈希。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章