需求
如何实现分布式调度?
任务的触发
什么时候,知道任务需要触发?
任务的执行?
任务应该如何被执行?
任务的触发调度
要求
保证服务的触发是高可用的。
-
而不是为了让任务的触发,只保留一台触发调度,这种不满足 HA 的条件。
-
保证每次只有一台机器可以执行任务,这就需要分布式锁。
实现方式
可以参考:
或者其他分布式调度。
任务的执行。
本地异步线程池
可以放在本地的异步线程池中执行。
限制好最大的数量+内存队列大小。
每次异步放入队列中执行。
基于 rpc
基于远程访问,异步执行,但是执行均分到每一台机器。
基于 MQ
这种是比较推荐的方案。
天然异步。
实现
已有实现,放在了 github,暂时不开源。