本发明专利技术提出了一种基于TCP长连接的分布式延迟调度方法和装置,该方法包括如下步骤:建立调度服务器和调度执行器TCP长连接通信;通过本地配置地址和客户端jar包,进行API应用注册,调度服务器在关系数据库中保存应用节点信息;根据任务注册接口,进行API任务注册,执行任务注册逻辑,并将任务信息写入数据库;从数据库中获取待执行任务,基于时间轮算法进行任务编排;基于关系数据库的锁机制进行集群调度编排;接收调度服务器推送的任务执行请求,解码后触发任务执行,并通知调度服务器任务执行结果;接收任务执行结果,更新任务执行日志。本发明专利技术同时支持人工手动配置调度任务和API方式注册调度任务,直接通过API调用即可完成任务注册,具备实时性。具备实时性。具备实时性。
【技术实现步骤摘要】
一种基于TCP长连接的分布式延迟调度方法和装置
[0001]本专利技术涉及计算机
,具体而言,涉及一种基于TCP长连接的分布式延迟调度方法和装置。
技术介绍
[0002]伴随着商业银行数字化转型的浪潮,银行业务越来越线上化、自动化。在银行的线上交易、营销活动等业务场景中,经常有这样的业务诉求。比如,运营人员针对某项业务创建了一个营销活动,该活动有开始、结束时间。在到达活动结束时间后要能准时触发活动失效操作,避免活动过期后状态没有及时变更。再比如存款业务,用户存入了一笔一年期定期存款,那么要在365天后自动触发还本付息操作,避免未按时发放导致用户投诉。诸如此类的场景有很多,就其本质,都是在某个操作之后,延迟一段时间触发另一种操作,并且要准时触发。
[0003]针对上述业务场景,目前业界有如下解决方案:
[0004]方案1)使用JDK自身的调度工具,在应用系统本地起定时任务,在指定时间到达时触发。然而,这种方式在分布式环境下,应用多节点部署时存在任务重复触发问题,且随着任务数量增长,会增加本地内存、CPU的压力,性能开销激增,甚至会影响其它正常业务。
[0005]方案2)使用开源的调度解决方案,比如Quartz和xxl
‑
job,定时轮询到期的数据,并触发相应的逻辑。然而,定时轮询方案最明显的缺点是存在一定程度的延迟,不能实时触发延迟任务。而且,Quartz框架不具备分布式的特性。xxl
‑
job虽然支持分布式,但是只支持HTTP明文方式发送调度指令,在通信实时性、安全性、集群节点容错性上有进一步提升的空间。
[0006]此外,不管是方案1还是方案2,都不支持应用端(客户端)以简洁、高效的API方式直接注册延迟任务,都无法直接满足当前银行内的业务需求。
技术实现思路
[0007]鉴于上述问题,本专利技术提供了一种基于TCP长连接的分布式延迟调度方法和装置,解决了现有技术方案在应用多节点部署时存在任务重复触发问题,且随着任务数量增长,性能开销激增,以及存在延迟,不能实时触发延迟任务的问题。
[0008]为解决上述技术问题,本专利技术采用的技术方案是:一种基于TCP长连接的分布式延迟调度方法,包括如下步骤:基于Netty框架建立调度服务器和调度执行器之间的TCP长连接通信;根据本地配置地址和客户端jar包,向调度服务器进行API应用注册,所述调度服务器在关系数据库中保存应用节点信息;根据调度服务器提供的任务注册接口,进行API任务注册,执行任务注册逻辑,并将任务信息写入数据库;从数据库中获取待执行任务,基于时间轮算法进行任务编排;基于关系数据库的锁机制进行集群调度编排;接收调度服务器推送的任务执行请求,解码后触发任务执行,并通知调度服务器任务执行结果;接收任务执行结果,更新数据库中任务执行日志。
[0009]作为优选方案,所述TCP长连接通信的网络包分为固定头部、扩展包头和包体三个部分,所述固定头部包括2个字节SNB标识、2个字节包头长度和4个字节包体长度,所述扩展包头用于存储元信息,所述包体为请求或响应的业务数据,是一个序列化的JSON串。
[0010]作为优选方案,所述TCP长连接通信,还包括:配置心跳间隔,调度执行器向调度服务器发送心跳包,若发送失败,则触发重连机制,再次与调度服务器建立TCP连接,实现网络容错性。
[0011]作为优选方案,所述根据本地配置地址和客户端jar包,向调度服务器进行API应用注册,包括:调度执行器集成客户端jar包,节点在启动时,根据本地配置地址自动注册到调度服务器建立TCP长连接;调用调度服务器的应用注册接口appRegister注册应用信息;调度服务器收到调度执行器的应用注册请求报文,解码出应用注册请求报文的扩展包头中请求方法名称,即apiName字段值,若apiName字段值为appRegister,则进行API应用注册。
[0012]作为优选方案,所述根据调度服务器提供的任务注册接口,进行API任务注册,包括:对接调度服务器提供的任务注册接口taskRegister;调度服务器收到调度执行器的任务注册请求报文,解码出任务注册请求报文扩展包头中请求方法名称,即apiName字段值,若apiName字段值是taskRegister,则进行API任务注册。
[0013]作为优选方案,所述基于时间轮算法进行任务编排,包括:从数据库获取待执行任务,根据任务的下次触发时间,计算出月、周、天三个层次的时间刻度;将任务按照其所属的时间轮,分别添加到三个层次的时间轮中;三个时间轮同时以各自的时间刻度不停地运行,当月时间轮和周时间轮运行到指定刻度时,取出该刻度下的任务下发到天轮上,天轮接管任务;当天轮运行到该时间点时,取出该时间点下的所有任务,触发执行。
[0014]作为优选方案,所述基于关系数据库的锁机制进行集群调度编排,包括:将在关系数据库中查询待执行调度任务的每个调度服务器节点上锁;获得锁的所述调度服务器节点获取任务列表;根据所述任务列表,将待执行任务放到时间轮中,等待执行;更新任务的下一次执行时间,并写入数据库;调度服务器提交数据库事务,释放其持有的数据库锁,进入下一轮循环。
[0015]作为优选方案,所述接收调度服务器推送的任务执行请求,解码后触发任务执行,包括:接收调度服务器推送的任务执行请求报文,利用解码器解码后获得任务推送信息,所述任务推送信息包括类方法和参数;利用本地Java反射机制触发方法调用,或基于Spring框架的方式获取到容器中的Bean实例方法,触发任务执行。
[0016]本专利技术还公开了一种基于TCP长连接的分布式延迟调度装置,包括:长连接模块,基于Netty框架建立调度服务器和调度执行器之间的TCP长连接通信;应用注册模块,用于根据本地配置地址和客户端jar包,向调度服务器进行API应用注册,所述调度服务器在关系数据库中保存应用节点信息;任务注册模块,用于根据调度服务器提供的任务注册接口,进行API任务注册,执行任务注册逻辑,并将任务信息写入数据库;时间轮模块,用于从数据库中获取待执行任务,基于时间轮算法进行任务编排;锁机制模块,基于关系数据库的锁机制进行集群调度编排;任务执行模块,用于接收调度服务器推送的任务执行请求,解码后触发任务执行,并通知调度服务器任务执行结果;结果更新模块,用于接收任务执行结果,更新数据库中任务执行日志。
[0017]与现有技术相比,本专利技术的有益效果包括:
[0018]1.本专利技术不仅能满足延迟调度的业务场景,也能够作为一种通用的分布式调度系统使用。
[0019]2.本专利技术调度服务器和调度执行器之间采用TCP全双工通信机制,通信更加高效,性能优于传统调度系统的HTTP通信方式。
[0020]3.本专利技术采用自定义、可定制的通信协议,支持通信报文加密,具备高安全性、可扩展性。
[0021]4.本专利技术同时支持人工手动配置调度任务和API方式注册调度任务,业务系统直接通过API调用即可完成任务注册,相本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种基于TCP长连接的分布式延迟调度方法,其特征在于,包括如下步骤:基于Netty框架建立调度服务器和调度执行器之间的TCP长连接通信;根据本地配置地址和客户端jar包,向调度服务器进行API应用注册,所述调度服务器在关系数据库中保存应用节点信息;根据调度服务器提供的任务注册接口,进行API任务注册,执行任务注册逻辑,并将任务信息写入数据库;从数据库中获取待执行任务,基于时间轮算法进行任务编排;基于关系数据库的锁机制进行集群调度编排;接收调度服务器推送的任务执行请求,解码后触发任务执行,并通知调度服务器任务执行结果;接收任务执行结果,更新数据库中任务执行日志。2.根据权利要求1所述的基于TCP长连接的分布式延迟调度方法,其特征在于,所述TCP长连接通信的网络包分为固定头部、扩展包头和包体三个部分,所述固定头部包括2个字节SNB标识、2个字节包头长度和4个字节包体长度,所述扩展包头用于存储元信息,所述包体为请求或响应的业务数据,是一个序列化的JSON串。3.根据权利要求1所述的基于TCP长连接的分布式延迟调度方法,其特征在于,所述TCP长连接通信,还包括:配置心跳间隔,调度执行器向调度服务器发送心跳包,若发送失败,则触发重连机制,再次与调度服务器建立TCP连接。4.根据权利要求1所述的基于TCP长连接的分布式延迟调度方法,其特征在于,所述根据本地配置地址和客户端jar包,向调度服务器进行API应用注册,包括:调度执行器集成客户端jar包,节点在启动时,根据本地配置地址自动注册到调度服务器建立TCP长连接;调用调度服务器的应用注册接口appRegister注册应用信息;调度服务器收到调度执行器的应用注册请求报文,解码出应用注册请求报文的扩展包头中请求方法名称,即apiName字段值,若apiName字段值为appRegister,则进行API应用注册。5.根据权利要求1所述的基于TCP长连接的分布式延迟调度方法,其特征在于,所述根据调度服务器提供的任务注册接口,进行API任务注册,包括:对接调度服务器提供的任务注册接口taskRegister;调度服务器收到调度执行器的任务注册请求报文,解码出任务注册请求报文扩展包头中请求方法名称,即apiName字段值,若apiName字段值是tas...
【专利技术属性】
技术研发人员:周鹏程,
申请(专利权)人:江苏苏宁银行股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。