go任务调度11(分布式crontab架构分析)

crontab是单机工具
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
(所有worker都在调度,如果有1000个任务,所有worker都在调用者1000个任务。对于编译型语言来说,排序一个一千万的数组只需要一秒,对于一千一万的调度,无需担心性能)
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
(相当于完成一个到worker集群的通知,通知它们杀死任务)
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
go任务调度11(分布式crontab架构分析)
(
1.etcd中的任务会实时同步给worker,worker的调度协程会更新内存中维护的任务列表。etcd在内存中会镜像一份和etcd完全一样的任务清单,通过监听机制实现。
2.调度协程会周期性检查所有任务的cron任务表达式,扫描到期任务,到期任务会交给执行协程去执行。
3.同时,调度协程还会监听一个任务控制事件(想要杀死某个任务),收到后,多个协程会强制中断执行中的子进程(shell命令)。
4.执行协程返回结果给调度协程,调度协程可以更新内存中任务状态,当任务调度给执行协程的时候,任务的状态就被更新为执行中了。任务结果返回就将状态改为执行完成。然后将执行结果投递给日志协程。
)
go任务调度11(分布式crontab架构分析)
(worker是个集群,每个workder任务清单都是从etcd中全量同步的,所以大家都按照每个任务的调度周期,在同时调度,对于同一个任务,比如每秒执行的任务,所有worker每隔一秒都会去执行这个任务。如果不做并发控制,所有worker会同一时刻全部执行一次这个任务。我们希望一个任务同一时刻只被执行一次,不允许任务并发调度。如何防止并发呢?去etcd中抢锁,大家都要调度,谁抢到谁调度,其他人等待下次过期,下次接着抢,抢到我就执行。这种很依赖各个时间节点的同步,校时不同会让有些机器老是先抢到锁。我们需要时间校准保障一致,还可以做些小策略,比如随机睡眠n-m毫秒)
go任务调度11(分布式crontab架构分析)