从零搭建分布式爬虫集群:NetDiscovery+Etcd/ZooKeeper注册发现与monitor监控实战
从零搭建分布式爬虫集群NetDiscoveryEtcd/ZooKeeper注册发现与monitor监控实战【免费下载链接】NetDiscoveryNetDiscovery 是一款基于 Vert.x、RxJava 2 等框架实现的通用爬虫框架/中间件。项目地址: https://gitcode.com/gh_mirrors/ne/NetDiscoveryNetDiscovery 是一款基于 Vert.x、RxJava 2 等框架实现的通用分布式爬虫框架。本文带你从零搭建一套分布式爬虫集群多个 SpiderEngine 节点通过 Etcd/ZooKeeper 完成服务注册发现再由 monitor 模块实时监控集群节点上下线状态并配合 agent 查看 CPU/内存指标一套完整的生产级爬虫集群监控方案就成型了 。一、NetDiscovery 分布式爬虫框架是什么NetDiscovery 的单个 Spider 遵循经典的流水线模型从队列轮询 Request经 Downloader 下载、Parser 解析、Pipeline 落地全程异步多线程底层为 RxJava 2在分布式场景下多个 Spider 节点的请求都汇入同一个 Queue共享消费能力这是集群化的基础 Spider 既可独立运行也可交给 SpiderEngine爬虫引擎容器统一管理。单节点不够用、或需要高可用时就是本文的集群场景。二、分布式爬虫集群架构Etcd/ZooKeeper 注册发现原理整体架构非常直观每个 SpiderEngine 启动时向 Etcd/ZooKeeper 集群register注册自己的地址monitor 则持续watch监听注册节点的变化实时掌握集群健康状态注册侧engine 模块核心机制SpiderEngine启动时若配置了 Registry会调用registry.register(provider, port)完成注册核心类见 core/engine/src/main/java/cn/netdiscovery/core/SpiderEngine.javaEtcd 注册使用租约Lease 心跳保活注册时申请 5 秒租约并持续 keepAlive心跳停止后租约过期、节点自动摘除天然实现宕机自动下线。关键实现见core/engine/src/main/java/cn/netdiscovery/core/registry/EtcdRegistry.java注册键的格式为/{path}/{IP}-{端口}-{时间戳}便于 monitor 解析出节点地址ZooKeeper 方式同理实现见core/engine/src/main/java/cn/netdiscovery/core/registry/ZKRegistry.java基于 Curator 创建临时节点监听侧monitor 模块EtcdWatchManager监听注册前缀下的 PUT/DELETE 事件节点新增标记为 ONLINE删除则标记 OFFLINE 并可触发自定义下线处理发邮件、短信、自动重启等见core/monitor/src/main/java/cn/netdiscovery/core/watch/etcd/EtcdWatchManager.javaZooKeeperWatchManager通过对比父节点下子节点列表的变化推导集群新增/宕机/恢复见core/monitor/src/main/java/cn/netdiscovery/core/watch/zookeeper/ZooKeeperWatchManager.javamonitor 内置 HTTP 接口默认 8316 端口访问/netdiscovery/monitor即返回所有节点的 IP、端口与在线状态JSON方便对接自己的大屏或告警系统见core/monitor/src/main/java/cn/netdiscovery/core/watch/AbstractWatchManager.java三、分布式爬虫集群搭建步骤步骤 1部署 Etcd 或 ZooKeeper 集群建议生产环境使用 3 节点集群保证高可用。Etcd 可直接用官方二进制/Docker 拉起ZooKeeper 则部署 3 台并组成 quorum。步骤 2创建并注册多个 SpiderEngine 节点参照官方示例example/src/main/java/cn/netdiscovery/example/TestSpiderEngine.java每个节点的核心流程是四步SpiderEngine engine SpiderEngine.create(); engine.addSpider(spider); // 添加爬虫 engine.setUseMonitor(true); // 打开监控 engine.httpd(8080); // 开启状态查询 HTTP 服务 engine.run(); // 启动run() 时自动向 Etcd/ZK 注册在多台服务器上部署相同代码配置不同的注册路径即可区分业务每台都会自动注册为一个 SpiderEngine 节点集群随即形成。步骤 3验证注册结果登录 Etcd 查看注册键etcdctl get --prefix /你的注册路径应能看到形如192.168.1.10-8080-1680000000000的节点列表权重为 50。步骤 4部署 monitor 监控进程monitor 是一个轻量进程示例见example/src/main/java/cn/netdiscovery/example/etcd/TestEtcdWatchManager.javaEtcdWatchManager manager new EtcdWatchManager(); manager.httpd().start(); // 默认 8316 端口/netdiscovery/monitor 查询节点状态浏览器访问http://monitor主机:8316/netdiscovery/monitor即可看到集群所有节点的在线状态。日志中会实时打印新增 SpiderEngine 节点SpiderEngine 节点【x】下线了等关键事件。四、monitor 监控实战从节点状态到资源指标1. 节点上下线感知杀掉某台 SpiderEngine 进程 → Etcd 租约 5 秒后过期 → monitor 日志输出节点下线/netdiscovery/monitor状态变为 OFFLINE重启后再次注册 → 状态恢复 ONLINE可实现自定义ServerOfflineProcess接口在下线时自动告警或拉起新进程2. 单节点资源实时监控agent 模块agent 模块会实时监控服务器 CPU 和内存并推送到 dashboard。使用方式见core/agent/README.md将 agent 模块导出 fat jar执行java -jar agent-all.jarSpiderEngine 中调用spiderEngine.setUseMonitor(true)之后即可在localhost:8080/netdiscovery/dashboard/看到 CPU、Mem 的实时曲线判断爬虫节点是否过载五、小结能力实现方式关键模块服务注册发现Etcd 租约心跳 / ZK 临时节点core/engine集群状态监听Etcd Watch / ZK Watchercore/monitor节点状态查询HTTP 接口/netdiscovery/monitorcore/monitor资源指标看板agent Prometheus 指标core/agentNetDiscovery 的分布式方案最大的特点是轻量不引入重量级微服务治理组件仅靠 Etcd/ZooKeeper 的租约与 Watch 机制就实现了注册、发现、下线感知三位一体的分布式爬虫集群管理配合 monitor 与 agent从能跑升级到看得见、管得住 ✅。【免费下载链接】NetDiscoveryNetDiscovery 是一款基于 Vert.x、RxJava 2 等框架实现的通用爬虫框架/中间件。项目地址: https://gitcode.com/gh_mirrors/ne/NetDiscovery创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考