[发明专利]一种基于JVM的非阻塞分布式计划任务调度方法在审
申请号: | 202211139267.X | 申请日: | 2022-06-14 |
公开(公告)号: | CN116089027A | 公开(公告)日: | 2023-05-09 |
发明(设计)人: | 孙恒涛;方汉林;傅和平 | 申请(专利权)人: | 浙江保融科技股份有限公司 |
主分类号: | G06F9/48 | 分类号: | G06F9/48;G06F9/455;G06F9/50;G06F9/52 |
代理公司: | 杭州华鼎知识产权代理事务所(普通合伙) 33217 | 代理人: | 魏亮 |
地址: | 311100 浙江省杭州市余*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 jvm 阻塞 分布式 计划 任务 调度 方法 | ||
1.一种基于JVM的非阻塞分布式计划任务调度方法,应用于配置有kotlin语言库及coroutines协程库的Jvm虚拟机中,其特征在于,包括:分布式计划任务框架,所述分布式计划任务框架内包含:
并发任务执行器:调用应用逻辑实际执行的包;
和定时任务调度器;定时任务调度器进行任务的包括配置,启动、暂停、停止、删除的生命周期操作;
还包括分布式协调组件;所述分布式协调组件为Etcd组件;具体通过抽出接口分离注册协调服务包;把所有和ZooKeeper组件相关的代码抽出接口,然后把所述抽出接口和ZooKeeper组件实现代码分成两个jar包;新建一个etcd的jar包,对接口包的所有用到的接口方法、数据结构做实现;分布式协调组件中设置有通用非阻塞增删改查接口作为分布式协调组件所在客户端的非阻塞异步回调接口;
coroutines协程库对接分布式协调组件的客户端异步接口;
通过协程封装分布式协调组件的非阻塞异步回调接口,并设置非阻塞循环监听器实现连续监听;最终基于封装后的协程非阻塞api重新实现一个本地节点缓存;
定时任务调度器在新的计划任务实例启动时,会向分布式协调组件注册自己的任务实例信息、并获取已有的当前任务其他所有实例的信息,通过选主操作确定当前的任务主节点;任务提供设置分片的方式,主节点按任务实例ip信息,平均、轮询等策略分配分片的执行节点信息,写入分布式协调组件;
还包括java客户端,通过java客户端执行任务。
2.根据权利要求1所述的一种基于JVM的非阻塞分布式计划任务调度方法,其特征在于,通过添加一个job根目录前缀监听,然后对接接口分发所有远程数据变动事件来模拟实现缓存监听器。
3.根据权利要求1所述的一种基于JVM的非阻塞分布式计划任务调度方法,其特征在于,Etcd组件中普通节点的增删改查操作,直接调用Etcd客户端提供的返回CompletableFuture的接口,然后使用kotlinx-coroutines-jdk8包提供的CompletableFuture.await方法对接。
4.根据权利要求1所述的一种基于JVM的非阻塞分布式计划任务调度方法,其特征在于,etcd组件采用租约机制lease加客户端不断续期做替代方案,一个客户端实例关联一个租约leaseId,关闭后3秒内lease失效,管理lease的key也自动删除。
5.根据权利要求1所述的一种基于JVM的非阻塞分布式计划任务调度方法,其特征在于,etcd组件中添加一个job根目录前缀监听,然后对接接口分发所有远程数据变动事件。
6.根据权利要求1所述的一种基于JVM的非阻塞分布式计划任务调度方法,其特征在于,etcd组件自带非阻塞分布式锁,进行分布式锁调用,传入的是path路径,返回的是锁键lockKey,释放锁需要调用unlock锁键lockKey。
7.根据权利要求1所述的一种基于JVM的非阻塞分布式计划任务调度方法,其特征在于,并发任务执行器配置在reactive-job-executor-kernel包,使用协程的async+awaitAll方法结构化并发实现。
8.根据权利要求1所述的一种基于JVM的非阻塞分布式计划任务调度方法,其特征在于,任务执行接口以java SPI的形式提供,内部默认实现了SimpleJob、javaMonoJob、javaBlockJob;其中SimpleJob直接使用kotlin协程接口,在执行器里面直接运行。
9.根据权利要求8所述的一种基于JVM的非阻塞分布式计划任务调度方法,其特征在于,提供了两种java接口:其中javaMonoJob接口采用Mono返回值,以异步回调转协程的方式执行;另外的javaBlockJob是额外考虑到java下的异步回调代码实在是容易引发回调地狱,并且绝大部分java代码逻辑都是阻塞式的,就提供了阻塞式接口,采用了实际执行任务时在线程池内执行的逻辑。
10.根据权利要求1所述的一种基于JVM的非阻塞分布式计划任务调度方法,其特征在于,采用单元测试框架进行测试,单元测试框架使用junit,多线程并发采用开源框架MockK,全面支持Kotlin,支持空值安全、协程测试。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江保融科技股份有限公司,未经浙江保融科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202211139267.X/1.html,转载请声明来源钻瓜专利网。