Zerg基于docker的分布式爬蟲服務(wù)
zerg
基于docker的分布式爬蟲服務(wù)
特性
-
多機(jī)多 IP,充分利用 IP 資源
-
服務(wù)自動(dòng)發(fā)現(xiàn)和注冊(cè)(基于 etcd 和 registrator)
-
負(fù)載均衡
-
服務(wù)端客戶端通信基于 gRPC,支持多種編程語(yǔ)言的客戶端
-
可設(shè)置抓取超時(shí)
-
支持 GET、HEAD、POST 方法
-
支持自定義 header
如何部署
第一步:配置 etcd
我把 etcd 容器化了,并開發(fā)了腳本使得部署 etcd cluster 非常容易,見 github.com/huichen/etcd_docker
為了容災(zāi),請(qǐng)至少在三臺(tái)服務(wù)器上運(yùn)行 etcd 實(shí)例。為了方便調(diào)用,你可以固定 etc endpoint 的端口號(hào),并在所有機(jī)器上手工添加 etcd host 的 hostname。
第二步:?jiǎn)?dòng) registrator 服務(wù)發(fā)現(xiàn)程序
你需要在集群的每一臺(tái)服務(wù)器上都運(yùn)行 registrator,這使得我們可以自動(dòng)發(fā)現(xiàn)和注冊(cè)分布式服務(wù)
docker run -d --name=registrator --net=host --volume=/var/run/docker.sock:/tmp/docker.sock \ gliderlabs/registrator etcd://<etcd 接入點(diǎn)的 ip:port>/services
請(qǐng)把上面的 etcd 接入點(diǎn)換成你的 etcd 地址。
第三步:部署 zerg 服務(wù)
進(jìn)入 service_container 子目錄,然后運(yùn)行
./build_docker_image.sh
這會(huì)生成 unmerged/zerg 容器。然后在集群的每臺(tái)服務(wù)器上啟動(dòng)容器:
docker run -d -P unmerged/zerg
registrator 會(huì)自動(dòng)注冊(cè)這些服務(wù)到 etcd。如果單機(jī)有多個(gè) IP,你可以單機(jī)啟動(dòng)多個(gè)容器,并在 -P 中分別指定 IP。
第四步:調(diào)用樣例代碼
進(jìn)入 examples 目錄,運(yùn)行
go run zerg_crawl.go --endpoints http://<你的 etcd host:ip> --url http://taobao.com
可選步驟
1、重新生成 protobuf service
protoc protos/crawl.proto --go_out=plugins=grpc:protos -I protos/
2、本地測(cè)試
啟動(dòng)本地服務(wù)。進(jìn)入 service_container 目錄,然后運(yùn)行
go run service.go
然后進(jìn)入 examples 目錄,運(yùn)行
go run single_machine_crawl.go --url http://taobao.com
