zerg - 基于docker的分布式爬蟲服務

zerg

基于docker的分布式爬蟲服務

68747470733a2f2f7261772e6769746875622e636f6d2f6875696368656e2f7a6572672f6d61737465722f646f632f7a6572672e706e67.png

特性

  • 多機多 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

    項目地址: https://github.com/huichen/zerg

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!