一种基于TCP长连接的分布式延迟调度方法和装置与流程

文档序号:34264816发布日期:2023-05-25 06:10阅读:54来源:国知局
一种基于TCP长连接的分布式延迟调度方法和装置与流程

本发明涉及计算机,具体而言,涉及一种基于tcp长连接的分布式延迟调度方法和装置。


背景技术:

1、伴随着商业银行数字化转型的浪潮,银行业务越来越线上化、自动化。在银行的线上交易、营销活动等业务场景中,经常有这样的业务诉求。比如,运营人员针对某项业务创建了一个营销活动,该活动有开始、结束时间。在到达活动结束时间后要能准时触发活动失效操作,避免活动过期后状态没有及时变更。再比如存款业务,用户存入了一笔一年期定期存款,那么要在365天后自动触发还本付息操作,避免未按时发放导致用户投诉。诸如此类的场景有很多,就其本质,都是在某个操作之后,延迟一段时间触发另一种操作,并且要准时触发。

2、针对上述业务场景,目前业界有如下解决方案:

3、方案1)使用jdk自身的调度工具,在应用系统本地起定时任务,在指定时间到达时触发。然而,这种方式在分布式环境下,应用多节点部署时存在任务重复触发问题,且随着任务数量增长,会增加本地内存、cpu的压力,性能开销激增,甚至会影响其它正常业务。

4、方案2)使用开源的调度解决方案,比如quartz和xxl-job,定时轮询到期的数据,并触发相应的逻辑。然而,定时轮询方案最明显的缺点是存在一定程度的延迟,不能实时触发延迟任务。而且,quartz框架不具备分布式的特性。xxl-job虽然支持分布式,但是只支持http明文方式发送调度指令,在通信实时性、安全性、集群节点容错性上有进一步提升的空间。

5、此外,不管是方案1还是方案2,都不支持应用端(客户端)以简洁、高效的api方式直接注册延迟任务,都无法直接满足当前银行内的业务需求。


技术实现思路

1、鉴于上述问题,本发明提供了一种基于tcp长连接的分布式延迟调度方法和装置,解决了现有技术方案在应用多节点部署时存在任务重复触发问题,且随着任务数量增长,性能开销激增,以及存在延迟,不能实时触发延迟任务的问题。

2、为解决上述技术问题,本发明采用的技术方案是:一种基于tcp长连接的分布式延迟调度方法,包括如下步骤:基于netty框架建立调度服务器和调度执行器之间的tcp长连接通信;根据本地配置地址和客户端jar包,向调度服务器进行api应用注册,所述调度服务器在关系数据库中保存应用节点信息;根据调度服务器提供的任务注册接口,进行api任务注册,执行任务注册逻辑,并将任务信息写入数据库;从数据库中获取待执行任务,基于时间轮算法进行任务编排;基于关系数据库的锁机制进行集群调度编排;接收调度服务器推送的任务执行请求,解码后触发任务执行,并通知调度服务器任务执行结果;接收任务执行结果,更新数据库中任务执行日志。

3、作为优选方案,所述tcp长连接通信的网络包分为固定头部、扩展包头和包体三个部分,所述固定头部包括2个字节snb标识、2个字节包头长度和4个字节包体长度,所述扩展包头用于存储元信息,所述包体为请求或响应的业务数据,是一个序列化的json串。

4、作为优选方案,所述tcp长连接通信,还包括:配置心跳间隔,调度执行器向调度服务器发送心跳包,若发送失败,则触发重连机制,再次与调度服务器建立tcp连接,实现网络容错性。

5、作为优选方案,所述根据本地配置地址和客户端jar包,向调度服务器进行api应用注册,包括:调度执行器集成客户端jar包,节点在启动时,根据本地配置地址自动注册到调度服务器建立tcp长连接;调用调度服务器的应用注册接口appregister注册应用信息;调度服务器收到调度执行器的应用注册请求报文,解码出应用注册请求报文的扩展包头中请求方法名称,即apiname字段值,若apiname字段值为appregister,则进行api应用注册。

6、作为优选方案,所述根据调度服务器提供的任务注册接口,进行api任务注册,包括:对接调度服务器提供的任务注册接口taskregister;调度服务器收到调度执行器的任务注册请求报文,解码出任务注册请求报文扩展包头中请求方法名称,即apiname字段值,若apiname字段值是taskregister,则进行api任务注册。

7、作为优选方案,所述基于时间轮算法进行任务编排,包括:从数据库获取待执行任务,根据任务的下次触发时间,计算出月、周、天三个层次的时间刻度;将任务按照其所属的时间轮,分别添加到三个层次的时间轮中;三个时间轮同时以各自的时间刻度不停地运行,当月时间轮和周时间轮运行到指定刻度时,取出该刻度下的任务下发到天轮上,天轮接管任务;当天轮运行到该时间点时,取出该时间点下的所有任务,触发执行。

8、作为优选方案,所述基于关系数据库的锁机制进行集群调度编排,包括:将在关系数据库中查询待执行调度任务的每个调度服务器节点上锁;获得锁的所述调度服务器节点获取任务列表;根据所述任务列表,将待执行任务放到时间轮中,等待执行;更新任务的下一次执行时间,并写入数据库;调度服务器提交数据库事务,释放其持有的数据库锁,进入下一轮循环。

9、作为优选方案,所述接收调度服务器推送的任务执行请求,解码后触发任务执行,包括:接收调度服务器推送的任务执行请求报文,利用解码器解码后获得任务推送信息,所述任务推送信息包括类方法和参数;利用本地java反射机制触发方法调用,或基于spring框架的方式获取到容器中的bean实例方法,触发任务执行。

10、本发明还公开了一种基于tcp长连接的分布式延迟调度装置,包括:长连接模块,基于netty框架建立调度服务器和调度执行器之间的tcp长连接通信;应用注册模块,用于根据本地配置地址和客户端jar包,向调度服务器进行api应用注册,所述调度服务器在关系数据库中保存应用节点信息;任务注册模块,用于根据调度服务器提供的任务注册接口,进行api任务注册,执行任务注册逻辑,并将任务信息写入数据库;时间轮模块,用于从数据库中获取待执行任务,基于时间轮算法进行任务编排;锁机制模块,基于关系数据库的锁机制进行集群调度编排;任务执行模块,用于接收调度服务器推送的任务执行请求,解码后触发任务执行,并通知调度服务器任务执行结果;结果更新模块,用于接收任务执行结果,更新数据库中任务执行日志。

11、与现有技术相比,本发明的有益效果包括:

12、1.本发明不仅能满足延迟调度的业务场景,也能够作为一种通用的分布式调度系统使用。

13、2.本发明调度服务器和调度执行器之间采用tcp全双工通信机制,通信更加高效,性能优于传统调度系统的http通信方式。

14、3.本发明采用自定义、可定制的通信协议,支持通信报文加密,具备高安全性、可扩展性。

15、4.本发明同时支持人工手动配置调度任务和api方式注册调度任务,业务系统直接通过api调用即可完成任务注册,相比传统定时轮询方式触发延迟任务更加具备实时性。

16、5.本发明支持调度服务器和调度执行器之间的心跳检测机制,及时剔除失效节点,保证每次调度指令都能发送到健康的节点,具备分布式环境下的容错性。

17、6.本发明涉及的分布式调度系统支持集群部署,调度服务器可以横向扩展。具备分布式环境下的高可用性。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1