Sidekiq任务作业系统的golang实现分析
背景
Sidekiq
使用
直接上代码:
config
可以看到该作业系统有业务隔离能力、定时作业能力,其实还有失败重试能力
接下来逐一进行分析
整体架构
managerworkerschedulefetcher
- manager - 负责某个queue-name任务的处理,内含一个fetcher、多个worker
- worker - 负责具体任务处理
- schedule - 负责延迟发送任务处理、重试任务处理
- fetcher - 负责与redis交互,拉取或删除任务
大体流程
brpoplpushzrangebyscore-inf -> now
一致性分析
zremlpush
设计巧妙之处
- middleware - 通过该设计将日志、统计、重试等功能糅合到处理流程中,并可以方便添加其他处理器
- 延迟任务 - 通过redis的zset实现,以任务执行时间戳为score
- fetcher - 逻辑层与数据层分离,通过fetcher与redis交互