浅谈分布式调度框架

1、定时任务使用场景
定时备份数据,订单超时自动取消,按时间段统计信息,优惠券要过期给用户发送一个提醒等等。

2、定时任务的基本概念
执行器:负责执行任务。
调度器:根据配置(cron表达式)详情,告知执行器去执行任务
任务:自己的业务实现,比如优惠券要过期给用户发送一个提醒。

3、spring中使用定时任务。
@Slf4j
@Component //使spring管理
@EnableScheduling //定时任务注解
public class Timer {
@Autowired
IPayRecordService iPayRecordService;

@Scheduled(cron = "0/10 * * * * ?")
public void notifyOrder(){
    log.info("timer notifyOrder ....");
    try {
        iPayRecordService.notifyOrder();
    }catch (Exception e){
        log.error("notifyOrder error:",e);
    }

}

}

4、spring定时任务存在的问题
不支持集群部署:比如你启动三个实例,每个实例都会去触发执行器去执行“优惠券要过期给用户发送一个提醒”这个任务,这时候就产生了重复执行的问题。
通常是单机部署的,单机就存在挂掉的风险。
不支持失败重试:出现异常后任务终结,不能根据执行状态,控制任务重新执行
不支持动态管理:不支持不重启任务情况下,关闭和启动任务,修改cron表达式等。
无报警:任务失败后不能发送报警通知
不支持分片任务
等等。
5、分布式定时任务框架的实现思路
在这里插入图片描述

调度中心会配置 cron表达式,路由策略,处理类的bean实例,比如demoHandler。

路由策略意思就是如何选择执行器,比如随机选择一个,轮训等。调度中心通过RPC 通知执行器去执行任务,会带上处理bean的名字(demoHandler),进入执行器的任务队列,执行器的执行引擎会从任务队列里取出任务,根据bean 的名字获取对应的bean实例进行执行。

执行器需要向调度中心发生心跳,对于长时间没有收到心跳的执行器,调度中心会将其剔除。

6、为什么要用XXL-JOB?
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易)等等…

7、为什么不用quartz?
XXL-JOB官网说明:Quartz作为开源作业调度中的佼佼者,是作业调度的首选。但是集群环境中Quartz采用API的方式对任务进行管理,从而可以避免上述问题,但是同样存在以下问题:

问题一:调用API的的方式操作任务,不人性化;
问题二:需要持久化业务QuartzJobBean到底层数据表中,系统侵入性相当严重。
问题三:调度逻辑和QuartzJobBean耦合在同一个项目中,这将导致一个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况下,此时调度系统的性能将大大受限于业务;
问题四:quartz底层以“抢占式”获取DB锁并由抢占成功节点负责运行任务,会导致节点负载悬殊非常大;而XXL-JOB通过执行器实现“协同分配式”运行任务,充分发挥集群优势,负载各节点均衡。
XXL-JOB弥补了quartz的上述不足之处。

8、XXL-JOB高可用调度中心会部署多台xxl-job-admin,如何保证多个调度中心分发任务只分发一次?(版本V2.0.1)

调度采用中心式设计,“调度中心”基于集群Quartz实现并支持集群部署,可保证调度中心HA;

调度的核心是quartz, 只是重写了其中的Job; 通过数据库悲观锁来实现任务在集群的多台机器中只执行一次

原文地址:https://my.oschina.net/suzheworld/blog/3122411

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。 Quartz的优势: 1、Quartz是一个任务调度框架(库),它几乎可以集成到任何应用系统中。 2、Quartz是非常灵活的,它让您能够以最“自然”的方式来编写您的项目的代码,实现您所期望的行为 3、Quartz是非常轻量级的,只需要非常少的配置 —— 它实际上可以被跳出框架来使用,如果你的需求是一些相对基本的简单的需求的话。 4、Quartz具有容错机制,并且可以在重启服务的时候持久化(”记忆”)你的定时任务,你的任务也不会丢失。 5、可以通过Quartz,封装成自己的分布式任务调度,实现强大的功能,成为自己的产品。6、有很多的互联网公司也都在使用Quartz。比如美团 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度。   课程说明:在我们的日常开发中,各种大型系统的开发少不了任务调度,简单的单机任务调度已经满足不了我们的系统需求,复杂的任务会让程序猿头疼, 所以急需一套专门的框架帮助我们去管理定时任务,并且可以在多台机器去执行我们的任务,还要可以管理我们的分布式定时任务。本课程从Quartz框架讲起,由浅到深,从使用到结构分析,再到源码分析,深入解析Quartz、Spring+Quartz,并且会讲解相关原理, 让大家充分的理解这个框架框架的设计思想。由于互联网的复杂性,为了满足我们特定的需求,需要对Spring+Quartz进行二次开发,整个二次开发过程都会进行讲解。Spring被用在了越来越多的项目中, Quartz也被公认为是比较好用的定时器设置工具,学完这个课程后,不仅仅可以熟练掌握分布式定时任务,还可以深入理解大型框架的设计思想。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值