安全公司报告
(19)国家知识产权局 (12)发明 专利 (10)授权公告 号 (45)授权公告日 (21)申请 号 202210668844.8 (22)申请日 2022.06.14 (65)同一申请的已公布的文献号 申请公布号 CN 114756357 A (43)申请公布日 2022.07.15 (73)专利权人 浙江保融科技股份有限公司 地址 310023 浙江省杭州市余杭区仓前街 道文一西路15 00号3幢23 6室 (72)发明人 孙恒涛 方汉林 傅和平  (74)专利代理 机构 杭州华鼎知识产权代理事务 所(普通合伙) 33217 专利代理师 魏亮 (51)Int.Cl. G06F 9/48(2006.01) G06F 9/455(2006.01)G06F 9/50(2006.01) G06F 9/52(2006.01) (56)对比文件 CN 110177118 A,2019.08.27 钱宇虹.如何用Java回调和线程实现异步调 用. 《软件工程师》 .2013,(第10期), 朱.Java语言中非阻塞算法的实现. 《电脑知 识与技术》 .2015,(第20期), 审查员 荆苏丹 (54)发明名称 一种基于JVM的非阻塞分布式计划任务调度 方法 (57)摘要 本发明提供一种基于JVM的非阻塞分布式计 划任务调度方法, 在完全实现原有功能的基础 上, 解决线程数量占用过多、 分布式下有节点空 跑线程的问题。 为实现上述目的, 本发明采用如 下技术方案: 应用于配置有kotlin语言库及 coroutines协程库的JV M虚拟机中, 包 括: 分布式 计划任务框架, 还包括分布式协调组件; 分布式 协调组件中设置有通用非阻塞增删 改查接口作 为分布式协调组件所在客户端的非阻塞异步回 调接口; 通过协程封装分布式协调组件的非阻塞 异步回调接口, 并设置非阻塞循环 监听器实现连 续监听; 最终基于封装后的协程非阻塞api重新 实现一个本地节点缓存。 本发明通过非阻塞改 造, 在执行任务的性能方面得以显著的提升 。 权利要求书1页 说明书9页 附图7页 CN 114756357 B 2022.10.14 CN 114756357 B 1.一种基于JVM的非阻塞分布式计划任务调度方法, 应用于配置有kotlin语言库及 coroutines协程库的JVM虚拟 机中, 其特征在于, 包括: 分布式计划任务框架, 所述分布式计 划任务框架内包 含: 并发任务执 行器: 调用应用逻辑实际执 行的包; 定时任务调度器: 进行任务的包括配置、 启动、 暂停、 停止、 删除的生命周期操作; 还包括分布式协调组件; 分布式协调组件中设置有通用非阻塞增删改查接口作为分布 式协调组件所在客户端的非阻塞异步回调接口; coroutines协程库对接分布式协调组件的客户端的非阻塞异步回调接口; 通过协程封装分布式协调组件的非阻塞异步 回调接口, 并设置非阻塞循环监 听器实现 连续监听; 最 终基于封装后的协 程非阻塞api重新 实现一个本地节 点缓存; 定时任务调度器 在新的计划任务实例启动时, 向分布式协调组件注册自己的任务实例信息、 并获取已有的 当前任务其他所有实例信息, 通过选主操作确定当前 的任务主节点; 非阻塞异步回调接口 创建任务时设置 分片, 主节点按任务 实例ip信息, 采用平均、 轮询策略分配 分片执行节 点信 息, 写入分布式协调组件; 还包括java客户端, 通过java客户端执行任务; 当分布式协调组件为ZooKeep er组件时 采用二级动态封装; 其中, 第一级封装调用suspendCancellableCoroutine方法, 回调方法 入参产生CancellableContinuation实例; 利用该实例进行第二级封装; 第二级封装中各个 需要转换协程的ZooKeeper方法生成对应的AsyncCallback子接口的匿名内部类, 所述匿名 内部类通过内部调用传入的CancellableContinuation实例的resume、 resumeWithException方法来和协程对接 。 2.根据权利要求1所述的一种基于JVM的非阻塞分布式计划任务调度方法, 其特征在 于, 封装过程中对ZooKeeper节点树添加增删改查操作, 并在同时执行的操作数量大于2的 时候, 通过协程封装的形式调用异步事务 提交接口。 3.根据权利要求1所述的一种基于JVM的非阻塞分布式计划任务调度方法, 其特征在 于, 封装了一个包装类循环监听器, 每次收到事件后, 将自身监听器自动添加 到ZooKeeper 组件, 然后再 执行包装类循环监听器的逻辑, 从而实现连续 监听。 4.根据权利要求3所述的一种基于JVM的非阻塞分布式计划任务调度方法, 其特征在 于, 还实现了非阻塞本地缓存及缓存监听, 封装后的协程非阻塞api重新实现一个 ZooKeeper本地节点缓存; 具体实现方式为: 使用散列表持有数据, 非阻塞锁控制并发, 循环监 听器实时监听远程 ZooKeeper服务端节点子树变动的状态。 5.根据权利要求1所述的一种基于JVM的非阻塞分布式计划任务调度方法, 其特征在 于, 所述并发任务执行器调用应用逻辑实际执行的包, 使用协程的async+awaitAll方法结 构化并发 实现。 6.根据权利要求1所述的一种基于JVM的非阻塞分布式计划任务调度方法, 其特征在 于, 定时任务调 度逻辑放在定时任务列表, 核心逻辑是在协 程里实现无限循环, 进 行定时计 算, 获取下一个执行时间, 延迟与当前时间的间隔, 然后调用这个任务的并发任务执行器; 并发任务执行器收到任务调度, 判断当前节点是不是这个任务当前分片的执行节点, 如果 是就执行这个任务, 否则略过。权 利 要 求 书 1/1 页 2 CN 114756357 B 2一种基于 JVM的非阻塞分布式计划任务调度方 法 技术领域 [0001]本发明属于分布式任务调度技术领域, 尤其是一种基于JVM的非阻塞分布式计划 任务调度方法。 背景技术 [0002]计划任务是指有计划的定时运行或者周期性运行的程序, 最常见的计划任务包括 了基于Linux的  “crontab”以及基于Windows的  “计划任务程序 ”。 但随着新建项目越来越 大, 系统越来越复杂, 现有的计划任务就暴露出许多问题。  首先是高可用HA需求, 当运行计 划任务的服务器一旦出现故障, 所有的计划任务将停止工作。  其次是性能问题, 越来越多 的大型计划任务程序出现, 对CPU/IO密集操作, 单个节 点已经无法满足需求。 因此就需要设 计分布式计划任务, 通过协调多台主机来执 行大量的任务, 解决高可用的问题。 [0003]这一问题在C语言环境下比较容易解决, 例如专利号为CN201811615533.5的发明 专利 《数据同步的系统、 方法、 装置和计算机存储介质》 中就公开了一种数据同步系统、 方 法、 装置和计算机存储介质。 所述系统包括数据监听模块、 消息 分发模块、 数据同步模块、 以 及配置管理模块; 数据监听模块, 用于对数据源进 行监听以获取数据源的数据变更记录; 消 息分发模块, 用于创建与数据源对应的消息队列, 将数据变更记录加入到消息队列中; 配置 管理模块, 用于管理数据源的同步配置参数; 数据同步模块, 用于获取同步配置参数, 按照 同步配置参数创建消费协程; 由消费协程监听消息队列, 按照同步配置参数将数据变更记 录更新到目标存储中。 这样的技术方案实现于诸如Smalltalk、 C++等编程语 言中, 但是无法 实现于java环境下。 [0004]在java环境下, 现有技术中通常采用XXL ‑JOB分布式任务调度系统来实现分布式 计划任务。 例如专利申请号为202111626396  .7的发明专利申请 《基于XXL ‑JOB分布式任务 调度系统的路由策略》 中就公开了及一种基于XXL ‑JOB分布式任务调度系统的路由策略, 包 括以下步骤: 各执行器 自身根据任务流控规则判断当前是否可参与新任务; 可执行新任务 的执行器与调度中心之间确认系统标识, 调度中心选定其中一台执行器为任务调度机器; 任务调度机器接收任务参数并执行; 优势在于: 基于XXL ‑JOB分布式任务调度 平台第10种分 片广播路由策略, 通过广播模式广播任务, 所有任务流控规则验证通过的执行器机器均会 尝试拉取任务, 根据业务逻辑最 终仅有一台机器能完整的完成系统标记身份确认以及 任务 调度确认, 降低了出现 “抢占式”业务执行逻辑时的负载风险。 由此可见, 为了解决线程资源 浪费的问题, 现有技术把所有的任务放在 任务调度中心, 调度中心连接 关系型数据库, 所有 的数据放数据库里面, 靠数据库锁控制并发、 保证调 度的一致性。 这种方案一定程度上缓解 了线程资源消 耗过大这个 问题, 任务调度中心使用数量有限的线程做所有任务的调度, 主 体逻辑放在一个无限循环里面, 任务的触发分发给工作节点, 工作节点只需要一个任务一 个线程持续运行就好, 不需要 更多的监听线程。 但中心化任务调 度中心也带来了性能有限、 可扩展性降低、 弹性调 度变弱的缺点, 并且在工作节点也是需要 执行线程长期驻留的, 属于 阻塞式代码。说 明 书 1/9 页 3 CN 114756357 B 3

.PDF文档 专利 一种基于JVM的非阻塞分布式计划任务调度方法

文档预览
中文文档 18 页 50 下载 1000 浏览 0 评论 309 收藏 3.0分
温馨提示:本文档共18页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 一种基于JVM的非阻塞分布式计划任务调度方法 第 1 页 专利 一种基于JVM的非阻塞分布式计划任务调度方法 第 2 页 专利 一种基于JVM的非阻塞分布式计划任务调度方法 第 3 页
下载文档到电脑,方便使用
本文档由 人生无常 于 2024-03-18 13:26:47上传分享
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。