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