XXL-JOB调度中心HA及高可用方案

                  

一 XXL-JOB一致性保证

  • 什么是一致性问题:“调度中心”通过DB锁保证集群分布式调度的一致性, 一次任务调度只会触发一次执行;
  • 为了避免多个服务器同时调度任务, 通过mysql悲观锁实现分布式锁(for update语句); 

二 具体实现过程

(可以参看JobScheduleHelper类代码,关键代码截图如下)

如上图所示

1 setAutoCommit(false)关闭隐式自动提交事务,

2 启动事务select lock for update(显式排他锁)

3 读db任务信息 -> 拉任务到内存时间轮 -> 更新db任务信息

4 commit提交事务,同时会释放for update的排他锁(悲观锁)

当任务处理完毕后,释放 悲观锁,准备等待下一次循环。

三 实现HA

 
        XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
        看这行解释平平无奇,但是不知道你在看官方网站的时候有没有注意到在Features(特性)一栏有一行解释尤其显眼:

        OK,没关系,你没看到那我就把官方链接贴后面,内容很完整,推荐好好拜读一遍,有个了解:https://github.com/xuxueli/xxl-job 

        了解完之后就该来说一下高可用方案了,先来一张图看看吧,我再来讲解:

        OK,看了上边的图,大家应该就知道我的意图了吧,其实就是使用Nginx做到了一个调度器的高可用。
        对于页面的请求操作是根据Nginx进行负载均衡转发到对应的调度中心机器上,他的每次调度都会通过一个远程任务代理的请求,触发到远程的执行器(这边没有画,因为上图主要是讲解调度器的高可用)。
 

         上边就完善了执行器的高可用,在部署远程执行器的时候,只要把每一台机器都指向同一个APP name,这样每个执行器都会以心跳方式向调度中心进行注册,也是30s注册一次,三次心跳,如果三次都失败的话,会把当前的执行器摘除掉。这样调度中心发现三次心跳之内都在存活的情况下,会将其视为是一个存活的执行器,在下次触发的时候回根据配置好的路由策略选择机器通过RPC方式进行调度执行。
        以为上边就已经是完善的了吗?不!不是!!!

        嗯~这样才是大部分完整形态嘛!因为你不能保证Nginx机器的高可用性,所以这边引入Keepalived,使用Vip的方式来保证Nginx的高可用(不知道的自己去查!)

        END

        当然这样还不是完整的高可用,因为不能保证数据库的高可用,还需要有数据库的集群部署,读写分离等操作,但是一般情况下使用上方的部署模式就可以满足大部分的需求…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值