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