zerg - 基于docker的分布式爬蟲服務
zerg
基于docker的分布式爬蟲服務
特性
- 多機多 IP,充分利用 IP 資源
- 服務自動發現和注冊(基于 etcd 和 registrator)
- 負載均衡 + 一致性哈希
- 服務端客戶端通信基于 gRPC,支持多種編程語言的客戶端
- 可設置抓取超時,頁面重新抓取頻率等
- 基于 docker volume 和文件系統的持久化存儲 </ul>
如何部署
第一步:配置 etcd
我把 etcd 容器化了,并開發了腳本使得部署 etcd cluster 非常容易,見 github.com/huichen/etcd_docker
為了容災,請至少在三臺服務器上運行 etcd 實例。為了方便調用,你可以固定 etc endpoint 的端口號,并在所有機器上手工添加 etcd host 的hostname。
第二步:啟動 registrator 服務發現程序
你需要在集群的每一臺服務器上都運行 registrator,這使得我們可以自動發現和注冊 dist_crawl 服務
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 服務
進入 service_container 子目錄,然后運行
./build_docker_image.sh
這會生成 unmerged/zerg 容器。然后在集群的每臺服務器上啟動容器:
docker run -d -P -v /opt/zerg_cache:/cache unmerged/zerg
registrator 會自動注冊這些服務到 etcd。如果單機有多個IP,你可以單機啟動多個容器,并在 -P 中分別指定IP。
抓取的頁面內容會通過 docker volume 存儲在 /opt/zerg_cache 目錄下。
第四步:調用樣例代碼
進入 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、本地測試
啟動本地服務。進入 service_container 目錄,然后運行
go run service.go
然后進入 examples 目錄,運行
go run single_machine_crawl.go --url http://taobao.com
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
