任务调度设计

需求

满足日常任务调度需求,分布式任务调度。支持rpc调用写入任务,基于时间和自定义权重调度任务,并保障任务执行成功。可以支持:

架构设计

参考

实现

设置3个队列存放任务(可基于redis的zset),进程分别对3个队列进行轮训监控,通过状态转移(redis需要lua脚本实现)实现任务调度,同时任务的状态不会丢失。

  1. 任务首先创建任务,并计算执行时间(根据任务类型、任务权重等计算
  2. 基于执行时间讲任务写入就绪或等待队列
  3. 就绪队列立即执行,等待队列等到任务执行时间到时执行(就绪
  4. 执行后任务放入待确认队列,等待成功回调(执行
  5. 如果超时或失败,根据策略重新写入等待队列(挂起

image-20220512195049284

 

任务依赖处理

image-20220516153347795