01 技术选型采用quartz框架的集群模式
1.1 Quartz介绍
Quartz 是一个开源的任务调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中。使用Quartz可以非常快速实现一个定时任务调度程序,可与Spring进行整合.
1.2 Quartz集群
1.png
Quartz应用可以部署到多台机器上,每一个Quartz应用都是一个Quartz实例,配置文件完全一致,每一个Quartz实例的instance_id可以自动生成.多个实例之间通过jdbc与数据库交互,实现协同,可以实现:
- 负载平衡自动发生,群集的每个节点都尽可能快地触发jobs。当Triggers的触发时间发生时,获取它的第一个节点(通过在数据库表qrtz_locks上加锁)是将触发它的节点。
- 每次只有一个节点会触发任务执行,不会重复执行任务
- 当其中一个节点在执行一个或多个作业期间失败时发生故障切换
- Quartz可以将任务信息存储到数据库的方式,便于集群部署和单机故障后的重跑
2.png
1.3 为什么选用Quartz
- Quartz是比较成熟的任务调度框架
- 对于Quartz集群,同一个任务(例如同步一个endpoint的元数据),采用的是多线程方式,同一个时间点只有一台机器去执行同步任务,不是分布式作业,是集群模式,可以避免单机故障问题
- 多个节点之间通过数据库协同,多机部署对于环境依赖更加简单.
1.4 实现方式
- 将现在的Spring-Schedule任务调度方式修改为Quartz任务调度的方式
- 数据库需要建quartz集群相关的表
- quartz配置文件中开启集群模式和jdbc存储任务元信息.