Sidekiq任务作业系统的golang实现分析

背景

Sidekiq

使用

直接上代码:

config

可以看到该作业系统有业务隔离能力、定时作业能力,其实还有失败重试能力

接下来逐一进行分析

整体架构



managerworkerschedulefetcher
  • manager - 负责某个queue-name任务的处理,内含一个fetcher、多个worker
  • worker - 负责具体任务处理
  • schedule - 负责延迟发送任务处理、重试任务处理
  • fetcher - 负责与redis交互,拉取或删除任务

大体流程

brpoplpushzrangebyscore-inf -> now

一致性分析

zremlpush

设计巧妙之处

  1. middleware - 通过该设计将日志、统计、重试等功能糅合到处理流程中,并可以方便添加其他处理器
  2. 延迟任务 - 通过redis的zset实现,以任务执行时间戳为score
  3. fetcher - 逻辑层与数据层分离,通过fetcher与redis交互

参考资料