【分布式任务调度】一、集中式和分布式任务调度

Elastic-Job

  • 一、什么是任务调度?
  • 二、集中式任务调度
  • 三、Java实现集中式定时任务方式
    • 1、while (true) + Thread.sleep
    • 2、 java.util.Timer + java.util.TimerTask
    • 3、ScheduledExecutorService
    • 4、Quartz
    • 5、Spring Task
    • 6、Spring Boot注解 @EnableScheduling + @Scheduled
  • 四、集中式任务调度的问题
  • 五、分布式任务调度解决方案
    • Elastic-Job
    • Saturn (土星)
    • XXL-JOB

一、什么是任务调度?

任务调度就是我们常说的定时任务,定时任务是指在指定时间、指定的频率去执行任务(业务代码);
任务调度是日常开发中非常常见的一个业务场景,我们经常需要去运行一些的周期性、指定时间点等方式自动触发的异步业务逻辑;

二、集中式任务调度

集中式任务是与分布式任务恰好相反的概念,集中式任务就是单机任务,一个项目,一台机器,也就是我们常说的单体应用;
对于集中式任务,也就是我们Java开发中常见的定时任务

三、Java实现集中式定时任务方式

1、while (true) + Thread.sleep

轮询 + 线程休眠的方式实现定时任务;(最古老的办法)

2、 java.util.Timer + java.util.TimerTask

Timer是一种定时器工具,用来在一个后台线程按计划执行指定任务,它可以按计划执行一个任务一次或反复多次;
TimerTask是一个抽象类,它的子类代表一个可以被Timer计划的任务;

3、ScheduledExecutorService

ScheduledExecutorService是从jdk1.5开始做为并发工具类被引入,是最理想的定时任务实现方式;

4、Quartz

Quartz是一个开源的定时任务调度框架,由Java编写而成,用于Java生态下的定时任务调度,是一个灵活方便、使用简单的定时任务调度框架,可以和Spring整合使用;
官网:http://www.quartz-scheduler.org/
Github:https://github.com/quartz-scheduler/quartz

5、Spring Task

Spring框架从3.0版本开始提供的轻量级的定时任务调用工具,使用方便;

6、Spring Boot注解 @EnableScheduling + @Scheduled

底层依然是采用Spring Task;

四、集中式任务调度的问题

如果采用集中式的任务调度方式,在分布式集群的模式下会带来一些问题,比如
1、多台机器集群部署的定时任务如何保证不被重复执行?
2、如何动态地调整定时任务的执行时间?(不重启服务的情况)
3、部署定时任务的机器发生故障如何实现故障转移?
4、如何对定时任务执行情况进行监控?
5、业务量较大,单机遭遇性能瓶颈问题,任务调度如何扩展?等等…

五、分布式任务调度解决方案

由于集中式的任务调度面临一系列问题,所以就产生分布式的任务调度解决方案;

Elastic-Job

当当网推出的分布式任务调度框架,现在被纳入到apache下,很多公司的产品在使用该分布式任务调度框架;
Gitbub:https://github.com/apache/shardingsphere-elasticjob

Saturn (土星)

唯品会推出的开源分布式任务调度平台,它是基于Elastic-Job而开发的,新增了一些特性,在唯品会内部及一些互联网公司在使用;
Github:https://github.com/vipshop/Saturn

XXL-JOB

XXL-JOB是美团开源的轻量级分布式任务调度平台,其核心设计目标是轻量级、易扩展、开发迅速、开箱即用,已有多家公司线上产品线采用了xxl-job;
Github:https://github.com/xuxueli/xxl-job

你可能感兴趣的:(04_分布式专题,分布式,java,spring)