python3爬虫(9)分布式爬虫与对等分布式爬虫
原文鏈接:http://www.dataguru.cn/thread-529666-1-1.html
談?wù)勚鲝姆植际脚老x與對等分布式爬蟲的優(yōu)劣
主從式(Master-Slave)
對于主從式而言,有一臺專門的Master服務(wù)器來維護待抓取URL隊列,它負(fù)責(zé)每次將 URL分發(fā)到不同的Slave服務(wù)器,而Slave服務(wù)器則負(fù)責(zé)實際的網(wǎng)頁下載工作。Master服務(wù)器除了維護待抓取URL隊列以及分發(fā)URL之外,還要負(fù)責(zé)調(diào)解各個Slave服務(wù)器的負(fù)載情況。以免某些Slave服務(wù)器過于清閑或者勞累。這種模式下,Master往往容易成為系統(tǒng)瓶頸。
?
對等式(Peer to Peer)
在這種模式下,所有的抓取服務(wù)器在分工上沒有不同。每一臺抓取服務(wù)器都可以從待抓取在URL隊列中獲取URL,然后對該URL的主域名的hash值H,然后計算H mod m(其中m是服務(wù)器的數(shù)量,以上圖為例,m為3),計算得到的數(shù)就是處理該URL的主機編號。
舉例:假設(shè)對于URL www.baidu.com,計算器hash值H=8,m=3,則H mod m=2,因此由編號為2的服務(wù)器進行該鏈接的抓取。假設(shè)這時候是0號服務(wù)器拿到這個URL,那么它將該URL轉(zhuǎn)給服務(wù)器2,由服務(wù)器2進行抓取。
這種模式有一個問題,當(dāng)有一臺服務(wù)器死機或者添加新的服務(wù)器,那么所有URL的哈希求余的結(jié)果就都要變化。也就是說,這種方式的擴展性不佳。針對這種情況,又有一種改進方案被提出來。這種改進的方案是一致性哈希法來確定服務(wù)器分工。其基本結(jié)構(gòu)如圖所示:
一致性哈希將URL的主域名進行哈希運算,映射為一個范圍在0-232之間的某個數(shù)。而將這個范圍平均的分配給m臺服務(wù)器,根據(jù)URL主域名哈希運算的值所處的范圍判斷是哪臺服務(wù)器來進行抓取。
如果某一臺服務(wù)器出現(xiàn)問題,那么本該由該服務(wù)器負(fù)責(zé)的網(wǎng)頁則按照順時針順延,由下一臺服務(wù)器進行抓取。這樣的話,及時某臺服務(wù)器出現(xiàn)問題,也不會影響其他的工作。
參考:http://www.dataguru.cn/article-5310-1.html
| 主從模式是指由一臺主機作為控制節(jié)點負(fù)責(zé)所有運行網(wǎng)絡(luò)爬蟲的主機進行管理,爬蟲只需要從控制節(jié)點那里接收任務(wù),并把新生成任務(wù)提交給控制節(jié)點就可以了,在這個過程中不必與其他爬蟲通信,這種方式實現(xiàn)簡單利于管理。而控制節(jié)點則需要與所有爬蟲進行通信,它需要一個地址列表來保存系統(tǒng)中所有爬蟲的信息。當(dāng)系統(tǒng)中的爬蟲數(shù)量發(fā)生變化時,協(xié)調(diào)者需要更新地址列表里的數(shù)據(jù),這一過程對于系統(tǒng)中的爬蟲是透明的。但是隨著爬蟲網(wǎng)頁數(shù)量的增加。控制節(jié)點會成為整個系統(tǒng)的瓶頸而導(dǎo)致整個分布式網(wǎng)絡(luò)爬蟲系統(tǒng)性能下降。 |
?
| 主從式分布爬蟲 優(yōu)點:由于由一臺管理服務(wù)器將待抓取URL分配給不同的抓取服務(wù)器,并對抓取服務(wù)器之間的工作進行負(fù)載均衡,使得抓取服務(wù)器可以得到有效合理地利用。 缺點:因為URL服務(wù)器承擔(dān)很多管理任務(wù),同時待抓取URL隊列數(shù)量巨大,所以URL服務(wù)器容易成為整個系統(tǒng)的瓶頸。 對等式分布爬蟲 優(yōu)點:由于沒有URL分發(fā)服務(wù)器,所以不存在系統(tǒng)瓶頸問題,另外其哈希函數(shù)不是針對整個URL,而只針對主域名,所以可以保證同一網(wǎng)站的網(wǎng)頁都由同一臺服務(wù)器抓取,這樣一方面可以提高下載效率(DNS域名解析可以緩存),另外一方面也可以主動控制對某個網(wǎng)站的訪問速度,避免對某個網(wǎng)站訪問壓力過大。 缺點:如果在抓取過程中某臺服務(wù)器宕機,或者新加入一臺抓取服務(wù)器,則每臺抓取服務(wù)器的取模算法都得更新。 |
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的python3爬虫(9)分布式爬虫与对等分布式爬虫的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3爬虫(8)爬虫框架scra
- 下一篇: python3 Async/Await