【Golang實(shí)現網(wǎng)路爬蟲(chóng)】分布式爬蟲(chóng)系統構架
優(yōu)采云 發(fā)布時(shí)間: 2020-05-03 08:01
分布式系統是一個(gè)硬件或軟件組件分布在不同的網(wǎng)路計算機上,彼此之間僅僅通過(guò)消息傳遞進(jìn)行通訊和協(xié)調的系統。簡(jiǎn)單來(lái)說(shuō)就是一群獨立計算機集合共同對外提供服務(wù),但是對于系統的用戶(hù)來(lái)說(shuō),就像是一臺計算機在提供服務(wù)一樣。分布式意味著(zhù)可以采用更多的普通計算機(相對于高昂的大型機)組成分布式集群對外提供服務(wù)。計算機越多,CPU、內存、存儲資源等也就越多,能夠處理的并發(fā)訪(fǎng)問(wèn)量也就越大。
從分布式系統的概念中我們曉得,各個(gè)主機之間通訊和協(xié)調主要通過(guò)網(wǎng)路進(jìn)行,所以分布式系統中的計算機在空間上幾乎沒(méi)有任何限制,這些計算機可能被置于不同的機柜上,也可能被布署在不同的機房中,還可能在不同的城市中,對于小型的網(wǎng)站甚至可能分布在不同的國家和地區。
不同的資料介紹起分布式系統的特性,雖然說(shuō)法不同,但都大同小異,此處我們針對于要實(shí)現的分布式爬蟲(chóng),總結為以下3個(gè)特征:
消息傳遞完成特定需求
消息傳遞的方式:
分布式系統的*敏*感*詞*:
一般對外會(huì )使用REST,模塊內部會(huì )使用RPC,效率會(huì )更高一些,模塊之前:中間件、REST
針對于目前我們遇見(jiàn)的問(wèn)題,我們給予解決方案分布式爬蟲(chóng)架構,來(lái)設計分布式爬蟲(chóng)項目的構架:
1.限流問(wèn)題
問(wèn)題:
單節點(diǎn)承受的流量是有限
解決:
將Worker放在不同的節點(diǎn)
2.去重問(wèn)題
問(wèn)題:
單節點(diǎn)承受的去重數據量有限
無(wú)法保存之前去重結果(因為是存入到顯存(map))
解決:
基于Key-Value Stroe(如Redis)進(jìn)行分布式去重
3.數據儲存問(wèn)題
問(wèn)題:
存儲部份的結構,技術(shù)棧和爬蟲(chóng)部份區別很大
進(jìn)一步優(yōu)化須要特殊的ElasticSearch技術(shù)背景
解決:
存儲服務(wù)
所以最終我們的分布式爬蟲(chóng)構架如下:
還有一個(gè)關(guān)鍵點(diǎn):從Channel進(jìn)化到分布式
之前我們?yōu)榱藢?shí)現并發(fā),使用了大量的goroutine以及Channel。那我們就可以開(kāi)啟一個(gè)遠程的RPC服務(wù)分布式爬蟲(chóng)架構,然后進(jìn)行同步的調用。
RPC有很多種做法,本文采用jsonrpc。
源代碼






