Dodder分布式 DHT 網(wǎng)絡(luò)爬蟲
________ _________________
___ __ \___________ /_____ /____________
__ / / / __ \ __ /_ __ /_ _ \_ ___/
_ /_/ // /_/ / /_/ / / /_/ / / __/ /
/_____/ \____/\__,_/ \__,_/ \___//_/ 一個支持集群部署的分布式 DHT 網(wǎng)絡(luò)爬蟲。
快速開始
環(huán)境依賴
- Nacos-1.1.3 (http://nacos.io)
- Zookeeper-3.5.5 (http://zookeeper.apache.org/)
- Kafka-2.12-2.3.0 (http://kafka.apache.org/)
- Redis-2.6 (https://redis.io/)
- MongoDB-3.6.8 (https://www.mongodb.com/)
- Elasticsearch-7.3.2 (https://www.elastic.co/)
- elasticsearch-analysis-ik-7.3.2 (https://github.com/medcl/elasticsearch-analysis-ik)
演示地址
單機(jī)運(yùn)行環(huán)境:
- CPU: Intel Xeon E3-1230 v3 - 3.3 GHz - 4 core(s)
- RAM: 32GB - DDR3
- Hard Drive(s): 2x 1TB (HDD SATA)
- Bandwidth: Unmetered @ 1Gbps
整體架構(gòu)
說明:項(xiàng)目中的dht-server、download-service、store-service都是可以集群部署的, dht-server負(fù)責(zé)爬取 DHT 網(wǎng)絡(luò)中的 info_hash,然后寫入到 Kafka 消息隊列中去,download-service 負(fù)責(zé)讀取 info_hash 信息到指定 ip 去下載種子文件的 metadata(集群部署時,注意設(shè)置好 kafka 主題的分區(qū)數(shù)量, 分區(qū)數(shù)量 >= 服務(wù)部署個數(shù))。下載好的 metadata 解析出文件信息封裝成 Torrent 對象寫入 Kafka 的 torrentMessages主題中去,store-service負(fù)責(zé)讀取 Torrent 存儲到 Elasticsearch 中去。
去重:dht-server中使用Redis第一次進(jìn)行攔截過濾,download-service查詢Elasticsearch進(jìn)行 二次判斷去重,store-service中采用upsert進(jìn)行第三次去重。實(shí)際上upsert已經(jīng)完全可以進(jìn)行去重了, 前面兩次是用來減少下載次數(shù),提升爬取的速度。
部署
前面的環(huán)境全部搭好之后,clone 整個項(xiàng)目到本地,如果是集群部署請修改各個服務(wù)模塊里面的一些 ip 地址參數(shù), 我這里服務(wù)器有限,只拿了一臺服務(wù)器單機(jī)部署,集群部署有問題的歡迎提 issue。
注意
dht-server 需要公網(wǎng) IP 才能爬取到 info_hash
