背景
这篇文章主要讲分布式任务调度,说白了,就是分布式job。
因为以前的,都是单机job。
单机job,有个缺点,就是集群部署的时候,同一个数据会处理多次。即多个机器,从数据库读同样的数据,然后处理的也是同样的数据。这个就有问题。
分布式job,集群,避免多个机器处理同一个数据。
单机
Timer定时器
定时任务 + 线程池
spring 定时器
分布式
quartz
xxljob
elasticjob
为什么要多机/集群/分布式?
本质作用是提高处理速度。
因为一个线程太慢,就线程池/多线程。
但是,多线程是单机,不能集群/分布式处理任务,而且不冲突,即同一个数据不会被不同机器的线程处理多次。
最佳实践
现在用的最多的是xxljob,github star都1万多了。早期xxljob和elasticjob差不多,elasticjob现在都不怎么更新了。
而且xxljob满足绝大部分场景,简单易用。
quartz是早期的框架,elasticjob适合海量数据和特别复杂的情况。
核心
架构图
从这个架构图,可以看到,集群/分布式/水平扩展。通过调度中心的分片来分发不同的数据给不同的机器处理。


调度中心集群
作用 分片的集群。可用单机也可以集群——作用是调度器/注册中心的高可用。
执行器集群
作用 具体执行任务的机器。集群。可以单机也可以集群。
注册中心
分片
负载均衡
总结
一个分配,一个执行。
部署
Nginx——调度中心集群——执行器集群