- 添加项目: 名称、git链接、用户名、密码
- 在 git 服务上添加 WebHooks
- 在项目下面创建任务: 名称、cron、镜像选择、运行参数、备注
- WebHooks 回调接口: 检查 Tag 是否符合 $"{Release}:{Name}:{Version}",如果符合则执行 docker 镜像编译脚本,编译成功则把相应数据入库供创建任务使用选择
- 暂停任务: 任务订阅 “job name",发送
暂停消息
- 继续任务: 任务订阅 “job name",发送
继续消息
- 重启任务: 任务订阅 “job name",发送
退出消息
,重启 Docker 实例 - 查询所有下载器代理的状态
- 查询任务所用的下载器代理
- 查询任务队列的信息: Left、Total、Success、Faild
- 查询任务日志: 通过消息队列入库到 ES
- 下载器代理以心跳方式注册到下载管理中心,上报内容有: 下载器标识、下载服务器内存开销、CPU 开销、活跃的 Downloader 个数、QPS。注册和心跳的消息是分开的,以优化服务端的处理逻辑。
- 下载器代理订阅
下载器代理标识 (AgentId)
来收取命令: 分配下载器(初始化 Cookie)、下载、退出。 - 下载器代理以
任务标识
隔离 Downloader - 下载器代理定时释放不再使用的 Downloader
- 下载器代理支持按照规则截取下载内容(减少回传网络流量)
- 下载器代理支持设置代理、ADSL 并且支持使用正则判断切换代理或 ADSL
所有的下载请求统一到下载管理中心,下载管理中心通过任务配置的策略分发下载任务。
- 爬虫任务发送请求到下载管理中心要求分配下载器节点,管理中心依据分配策略以及实际注册的下载器代理情况做出分配,保存分配信息到数据库。此为同步操作,即爬虫需求等待分配完成,如果分配失败爬虫也会启动失败。
- 下载代理器分配策略有
- 所有下载器代理随机分配
- 随机分配 n 个下载器代理后固定使用这 n 个下载器代理
- 随机分配 n 个下载器代理后固定使用这 n 个下载器, 并且由 m 号下载器代理内容解析到的目标请求仍需要回到 m 下载器代理下载
分配下载器代理逻辑
1. 每隔 15 秒同步一次所有下载器代理、释放心跳上传时间小于 11秒的下载器代理
2. 取得缓存中心跳时间上传小于 11 秒内的下载器代理
3. 计算需要分配的下载器代理个数
4. 随机分配指定个数的下载器代理
5. 更新分配数据库
6. 更新分配缓存
分配下载请求逻辑
1. 从缓存中查询被分配的下载器代理,如果没有则尝试从数据库中取出,去掉心跳时间上传小于 11 秒
2. 如果分配策略是随机,则把所有请求随机分配到各下载器代理
3. 如果分配策略是链式,首先判断请求是否包含下载器代理标识,如果有则分配到对应下载器代理,如果对应下载器代理未存活,则跳过此请求,使得爬虫发生超时重试。如果没有包含下载器代理标识,则随机分配一个。
-
爬虫订阅消息队列失败,消息队列异常
重试 N(可配置) 次后, 退出。
-
爬虫分配下载器消息推送异常,消息队列异常
重试 N(可配置) 次后, 退出。
-
爬虫下载请求消息推送异常,消息队列异常
重试 N(可配置) 次后, 退出。
-
爬虫把下载请求消息推送到消息队列后,过了 N 秒没有收到回复。异常原因有多种可能:下载中心异常、下载器代理异常、消息队列异常
+ [DONE] 对单一某消息来说先重试 N(可配置) 次如果依然不正常代表整个系统或者爬虫本身有问题, 报告错误并退出 + [DONE] 对于总消息来说需要计算一个阀值: 已经发送下载请求数(重试的不记录在内) - 已经返回的消息数 > N(默认100)时,速度控制器暂停 N 秒,如果还是没有返回则退出。 + [DONE] 对于延迟导致再次返回结果,重复解析入库并不会产生致命影响,比如入库时使用忽略插入重复值
-
单一下载中心挂了
+ [DONE] 爬虫分配下载器的消息,保存在消息队列中,分配下载器代理超时导致爬虫退出,下载中心恢复后检测消息的时间戳,过期的丢弃。 + [DONE] 爬虫下载请求的消息,堆积在消息队列中,下载中心恢复后检测消息的时间戳,过期的丢弃。 + [DONE] 下载器代理循环发送的心跳消息,堆积在消息队列中,下载中心恢复后检测消息的时间戳,过期的丢弃。 + [DONE] 下载器代理发送的注册节点的消息,保存在消息队列中,下载中心恢复后不检测时间戳直接处理。
-
消息队列挂了
+ 下载器代理无限发送心跳,永不停止直到下载中心恢复。 + 下载器代理发送下载结果消息到消息队列失败,重试 N(可配置) 后抛弃下载结果,原因是爬虫会因为推送不了信息退出 + 下载器代理发送分配下载器成功/失败的消息到消息队列失败,重试 N(可配置) 次后抛弃,爬虫会因为收不到正确结果认定分配失败而退出 + 下载器代理可以无限尝试订阅消息队列
-
双下载中心
+ 挂了一个不影响
-
下载代理器挂了
+ 如果是链式采集,只会有一个下载代理器,下载中心在分发任务的时候,发现下载代理器下线了。爬虫退出。 + 随机分配多个的,下载中心不再分发给已经下线的下载代理器。 + 下载代理器收到分配消息后存成文件,释放后删除,启动时先加载。