分布式_定时任务

----------------读书笔记《可伸缩服务架构--李艳鹏》----------------

1. 实现定时任务方法

Linux操作系统:crontab

JAVA:ScheduledExecutor定时任务线程池;

Spring: TaskScheduler、TaskExcecutor

现成框架:Quartz, 可创建成千上万个JOB的复杂定时程序;

2. 传统定时任务存在的问题;

修改定时任务时间,需要重新部署;

集群时无法保证在一个触发时刻只有一个任务执行,解决方案:只在一台服务器执行、通过配置参数让任务分散运行、通过分布式锁互斥执行;

3. 分布式任务:保证同一时刻只有一个集群定时任务在执行

原理:基于分布式锁实现协调;

框架:Quartz, Elastic-job, TBSchedule

Quartz:

(1)支持单点和集群模式,利用数据库的行锁来保证一次只有一个线程来操作;利用配置Job和Trigger来实现定时任务配置,这两种配置可存储在RAM或数据库;有点是高可用,缺点是同一任务只能在一个节点上执行;

(2)定时任务错过执行misfired的原因和处理方法:

原因:系统重启、线程池被占满; 处理方法:trigger定了处理策略:可配置为马上执行一次和等待下次触发;

(3)任务类型:无状态任务(一般指可以并发执行的任务,只要触发时间到就会被执行,而不管还有没有后其他任务)

有状态任务(不能并发执行的任务,如果触发时间到还有任务在执行,则当做misfired处理,基于misfire策略)

TBschedule:

(1)阿里巴巴开元框架,设计定时任务降低业务耦合度,使批量动态变化的任务动态分配到多个机器的JVM中并行执行,且支持实效转移,目前被互联网公司大量使用;

(2)基于zookeeper实现注册中心;详见《可伸缩服务架构-李艳鹏》6.3.2

Elastic-Job:

是当当网开元的分布式调度解决方案,支持任务分片功能,这也是Quartz所做不到的地方;基于zookeeper实现注册中心;

-------------------------网上信息----------------------------

1. https://www.cnblogs.com/xuxueli/p/5021979.html 《分布式任务调度平台XXL-JOB》

猜你喜欢

转载自blog.csdn.net/zxb448126/article/details/81190963