分布式定时任务秒级调度解决方案

一、秒级调度解决问题

   基于调度平台已存在的基本功能,在业务系统使用调度表、缓存等方案,解决数据并发、实时性等问题。

   1.业务系统使用调度表控制并发,调度平台会到调度表取需要执行的任务,取到任务之后更新任务表该条任务的状态,防止任务并发执行,处理完成之后将状态更新到处理状态。

   2.任务执行不跳出,对于实时性要求较高的任务,等待指定时间之后继续取任务执行,不返回任务调度平台,做到准实时处理。

   3.减少调度平台强依赖,调度平台只配置触发URL,没有job执行必须依赖的参数,配置简单,调度平台正常会配置一个任务组(多个任务),某一个或者几个任务由于网络、系统等原因导致假死、调用异常等,其他调度能正常处理,不影响业务。

二、组件图

调度平台介绍:对各业务系统中的定时任务集中进行管理和调度。所有任务、触发规则统一在调度控制台定义、管理、删除;集中解决了集群环境下任务并发执行的控制;对任务调度执行情况的监控和异常短信告警、重试机制;提供跨业务系统的后继任务调度

三、任务调度表模型设计

任务调度表的目的是存放要执行的任务组,有执行状态、分库、分表等,每次调度执行前要先更新执行状态,避免并发,调度平台也有调度并发的控制,但是由于网络、发布等原因,无法精确判断业务是否实际执行,需要在业务系统控制。

字段名描述
JOB任务组名称调度的任务组名,调度平台发起调度请求要传改名称,然后从该表获取要处理的分库、分表
执行状态0:待处理,1:处理中
更新时间存放执行状态变更时间
待处理表名调度任务要扫描的表名称,用于备注,任务框架主要使用分库分表
分库号待处理表或者业务表数据量很大,要拆分到多个库多张分表,用于提高查询性能,例:1,3,5;就代表要处理1分库、3分库、5分库
分表号例:0,5,10;代表要处理0分表、5分表、10分表
调度平台的调度任务名调度平台每次调度,调度任务名(存redis)
调度应用ip存本次调度的执行应用ip,用于分析问题(存redis)

四、设计方案(非多活环境)

 

存在的问题:频繁查询db,使用redis优化

JOB在处理任务时,需要加载任务到任务队列中,但每次都需要查库,不走缓存,查询次数也相当频繁,对数据库的性能有一定的影响。

将秒级job进行优化,原本秒级job每次加载完redis待处理队列,处理完以后再次加载每次都会去查数据库。优化过后会将待处理的job任务加载到redis中,每次读取redis,并修改redis中的处理状态,不再去操作数据库。

五、优化后方案(支持多活环境)

 

直接看图,已很详细。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值