分布式任务调度框架 DisJob 加入 Dromara 开源社区
作者简介
网名Ponfee,Dromara开源组织成员,dromara/disjob项目作者。在国内多个一线大厂待过,有过后端、全栈、大数据等相关工作经历。
关于Disjob
Disjob是天然为支持分布式长任务执行而设计的,它除了具备常规的任务调度功能外,还提供:任务拆分及分布式并行执行、暂停及取消运行中的任务、恢复执行被暂停的任务、保存任务的执行快照(Checkpoint)、任务编排(DAG)、广播任务等能力。以下是Disjob的整体流程图:
应用场景举例
举个简单的例子:统计在\\(0,1万亿]
\*\*区间内质数的个数。如果单机单线程CPU去统计的话不知道要到何年马月,这里我们就可以用Disjob
框架提供的分布式并行执行的能力来解决该类问题。
- 拆分任务
先根据当前的机器资源情况来决定拆分任务的数量,比如按照我们的机器数量及core CPU数量(因为质数统计是CPU密集型),决定拆分为10个任务。
- 分发任务
总任务被拆分成10个子任务后,框架会使用指定的路由算法把子任务分发给这些机器。
- 接收任务
机器接收到子任务后,会提交到框架的自定义线程池中执行。
- 分布式并行执行
在执行时我们可以使用分批次方式(通过代码循环)来统计,这里我们指定task-1
在第一次循环统计(0, 1亿]
,第二次循环统计(10亿, 11亿]
,以此类推最后一次循环统计(9990亿, 9991亿]
。同理其它的task也是按同样的方式分布式并行统计。
P.s. 黎曼猜想中可知质数分布是大体均匀的,判断一个数是否质数有很多方法,如埃氏筛法、欧拉筛法、Miller Rabin素性检验,我们可以使用Guava库提供的素性检验。
- Checkpoint
如果在统计过程中机器宕机后怎么办?难道再从头开始统计吗?No No No!我们可以在每循环10次(或每隔执行超过1分钟)时使用Checkpoint
保存当前task-1
的执行快照。宕机异常后的重新启动任务时会读取这份快照数据,从上一次的状态中接着继续统计。
以下是
task-1
任务保存的快照数据样例
{ "next":4000000001, // 下一次循环时要统计的区间为(40亿, 41亿] "count":19819734, // 已经统计到了 19819734 个质数 "finished":false // 当前任务是否已经统计完成:true-是;false-否; }
- 暂停与恢复
假如我们的这几台机器资源需要临时做其它的事情,想把当前的统计任务暂停一段时间。No problem!框架是支持暂停执行中的任务
,只需要在管理后台的调度实例
页面,找到该任务点击暂停
按钮即可。在暂停时任务会接收到一个中断信号,收到中断信号时同样可以在代码中使用Checkpoint
保存当前的执行快照。
当其它事情处理完后,我们可以在管理后台的调度实例
页面,找到被暂停的这个任务,点击恢复
按钮,此时任务会从上一次保存的状态中恢复继续执行。
- 任务编排
现在这个质数统计的总任务已经执行完了,共10个子任务,每个子任务都统计出了它的那部分结果。Disjob能自动帮我汇总结果吗?Yes!框架提供了非常强大且方便的表达式来编排任务,如:A->B,C,(D->E)->D,F->G
,现在我们可以创建一个汇总任务,然后再把这两个任务编排在一起。以下是本例中质数统计的job表数据,其中job_handler
指定了编排的这两个任务处理器(代码在Disjob的开源项目中)。
INSERT INTO `sched_job` ( `job_id`, `job_group`, `job_name`, `job_handler`, `job_state`, `job_type`, `job_param`, `trigger_type`, `trigger_value`, `next_trigger_time` ) VALUES ( 1003164910267351009, 'default', 'prime-count-dag', 'cn.ponfee.disjob.test.handler.PrimeCountJobHandler -> cn.ponfee.disjob.test.handler.PrimeAccumulateJobHandler', 1, 2, '{\\"m\\":1,\\"n\\":10000000000,\\"blockSize\\":100000000,\\"parallel\\":10}', 2, '2023-09-02 18:00:00', unix_timestamp()*1000 );
本例中的质数统计流程图如下
结语
Disjob还有很多的功能需要去完善打磨,正如Dromara的口号:一个人或许能走的更快,但一群人会走的更远。期待有更多的人一起参与共建!
- 项目链接
gitee: https://gitee.com/dromara/disjob
github: https://github.com/dromara/disjob
个人博客:http://www.ponfee.cn

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
CopyQ 7.1.0 发布,跨平台剪切板管理工具
CopyQ 是一个剪切板管理工具,可以监控系统剪贴板,并将其内容保存在自定义标签中。保存的剪贴板内容可以在以后直接复制和粘贴到任何应用程序中。 CopyQ 7.1.0 现已发布,该版本更新内容如下: NOTE:在 #2450得到解决之前,macOS 版本目前被禁止发布。 Changed 当选择对不包含文本的图像项目进行编辑操作时,现在将打开图像编辑器(如果设置),而不是内置文本编辑器。 加密现在使用更大/更安全的密钥(#2385)。 Fixed 修复了保存和打开空的加密选项卡的问题。 修复了对话框的最小尺寸(#2299)。 修复了使用脚本中包含斜杠字符的正则表达式导入命令的问题。 修复了 Qt 6 的字体粗细。 修复了在 Qt 6 中关闭应用程序的问题。 修复了在 Qt 6.5 中构建和调用一些脚本函数的问题。 X11:修复了在某些键盘布局下输入搜索时的崩溃问题(#2171)。 更新说明:https://github.com/hluk/CopyQ/releases/tag/v7.1.0
- 下一篇
两部门:引导社会资本加大对电子信息制造业投入
工业和信息化部、财政部近日联合印发《电子信息制造业2023—2024年稳增长行动方案》。 《行动方案》提出,2023—2024年计算机、通信和其他电子设备制造业增加值平均增速5%左右,电子信息制造业规模以上企业营业收入突破24万亿元。2024年,我国手机市场5G手机出货量占比超过85%,75英寸及以上彩色电视机市场份额超过25%,太阳能电池产量超过450吉瓦,高端产品供给能力进一步提升,新增长点不断涌现;产业结构持续优化,产业集群建设不断推进,形成上下游贯通发展、协同互促的良好局面。 在“工作举措”方面,要: (一)坚定实施扩大内需战略,激发市场潜力 1.促进传统领域消费升级。依托技术和产品形态创新提振手机、电脑、电视等传统电子消费,不断释放国内市场需求。推动手机品牌高端化升级,培育壮大折叠屏手机产业生态,从优化成本、改善技术、加大适配等角度促进折叠屏手机生态成熟。以智能化、信息化手段服务全民体育健身需求,宣传推广智能体育典型案例。积极应对人口老龄化加速问题,做好智慧健康养老产业发展引导规范工作,发布智慧健康养老产品和服务推广目录,开展智慧健康养老应用试点示范,持续提高试点示范工作规范...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7