1-什么是 worker
在经典语境下的 Worker 通常是指集群中的执行者 —— 与之相对的,还有一个中心化的控制台,这是大企业最喜欢的架构,但不适合群众使用:
- 家用电脑就两三台,复杂的集群控制和容错无用武之地 —— 甚至集群控制不够细节,调度(分配、暂停)、性能优化(批次流式传输、双向事件传递)等细致的功能缺失。
为了在家庭环境中部署爬虫调度服务,需要解决以下问题:
- 家中闲置的电脑,大部分时间别人不用,但有时别人要用。因此集群中的任务调度策略比较复杂:
- 可能需要暂停、恢复、中止的进程管理。
- 可能需要 opencv 监控进程窗口,并在本机中处理 confirm 和模拟点击。
- 可能需要在某个节点下线时在另一个节点中启动任务,因此也需要提供恢复、去重策略。
- 需要给朋友提供一个傻瓜式GUI。
- 尽量让机主也能在本地控制,这样机主也乐意部署。
- 内网之外的用户如果也想使用,那么该分配内网之内的哪些资源给他。
由于以上的去中心化的理想的需求,就导致市面上没有能满足要求的框架,因此不得不自己写一个 worker 。
从 UI 设计的角度来看,需要给用户展示的内容如下:
- 节点列表
- 当前在线的节点
- 身份公钥
- 正在运行的任务
- 当前离线的节点
- 当前在线的节点
- 任务列表
- 创建新的任务
- 任务的类型和命令行参数
- 选取执行任务的节点
- 已创建的任务
- 当前节点相关的运行的任务列表
- 任务状态
- 所有与此相关的节点
- 创建的节点
- 正在运行的节点
- 当前节点相关的运行的任务列表
- 创建新的任务