Skip to content

1-什么是 worker

在经典语境下的 Worker 通常是指集群中的执行者 —— 与之相对的,还有一个中心化的控制台,这是大企业最喜欢的架构,但不适合群众使用:

  1. 家用电脑就两三台,复杂的集群控制和容错无用武之地 —— 甚至集群控制不够细节,调度(分配、暂停)、性能优化(批次流式传输、双向事件传递)等细致的功能缺失。

为了在家庭环境中部署爬虫调度服务,需要解决以下问题:

  1. 家中闲置的电脑,大部分时间别人不用,但有时别人要用。因此集群中的任务调度策略比较复杂:
    • 可能需要暂停、恢复、中止的进程管理。
    • 可能需要 opencv 监控进程窗口,并在本机中处理 confirm 和模拟点击。
    • 可能需要在某个节点下线时在另一个节点中启动任务,因此也需要提供恢复、去重策略。
  2. 需要给朋友提供一个傻瓜式GUI。
    • 尽量让机主也能在本地控制,这样机主也乐意部署。
    • 内网之外的用户如果也想使用,那么该分配内网之内的哪些资源给他。

由于以上的去中心化的理想的需求,就导致市面上没有能满足要求的框架,因此不得不自己写一个 worker 。

从 UI 设计的角度来看,需要给用户展示的内容如下:

  1. 节点列表
    • 当前在线的节点
      • 身份公钥
      • 正在运行的任务
    • 当前离线的节点
  2. 任务列表
    • 创建新的任务
      • 任务的类型和命令行参数
      • 选取执行任务的节点
    • 已创建的任务
      • 当前节点相关的运行的任务列表
        • 任务状态
        • 所有与此相关的节点
          • 创建的节点
          • 正在运行的节点