【PowerJob】分布式调度入门到高级全解析
>PowerJob是一款国产开源的分布式任务调度与计算框架,它的核心定位是 "调度 + 计算"
目录
一、项目启动
1.1 服务端启动
官网文档:
部署服务至少需要一个mysql数据库,用于存储项目的持久化数据,下面是github的数据库文件:
PowerJob/others/powerjob-mysql.sql at master · PowerJob/PowerJob · GitHub
项目的github地址:
PowerJob/PowerJob: Enterprise job scheduling middleware with distributed computing ability.
只需要修改下面的mysql的连接地址和用户密码即可,本地启动powerjob-server

powerjob-server的项目模块组成:

启动server之后,浏览器访问:http://127.0.0.1:7700/
默认的账号:ADMIN
默认的密码:powerjob_admin
与主流调度框架对比:

PowerJob运行时五部分组成:

1.2 客户端启动
我们以项目中的powerjob-worker-samples模块为例,照猫画虎即可
也可以直接引入中央仓库的依赖
<!-- powerjob-worker-spring-boot-starter -->
<dependency>
<groupId>tech.powerjob</groupId>
<artifactId>powerjob-worker-spring-boot-starter</artifactId>
<version>4.3.9</version>
</dependency>
如果你对源码进行了修改,需要将starter上传到公司的私服上面

二、基础入门
2.1 BasicProcessor
BasicProcessor 是一切处理器的基础,接口最简单,precess就是要执行的任务代码
代码实现:

控制台进入对应的应用,新建一个对应的任务


2.2 BroadcastProcessor
广播模式BroadcastProcessor 在每个 Worker 上各跑一次,适合配置下发、缓存清理、本地文件清理等场景
工作原理:

代码实现:

控制台任务配置:

2.3 MapProcessor
MapProcessor 是 5.x 用于替代旧版 ShardingProcessor 的接口,允许在运行时根据业务数据动态派生子任务
代码实现:

控制台任务:

2.4 MapReduceProcessor
MapReduceProcessor 是最强大的处理器,演示了"Root → Map → Reduce"三阶段
代码实现:

控制台任务配置:

四大处理器对比:

MapReduce处理器的三阶段:

三、高级调度
3.1 定时策略
五种时间表达式类型:

分清固定频率和延迟:


注意:API 触发的任务定时字段无效,只能通过 PowerJobClient.runJob(id) 主动触发
3.2 工作流
工作流 vs 单任务

三个任务节点的代码实现:



控制台的三个任务节点的配置,这里展示节点1,其他两个类似

在工作流管理菜单,新建一个工作流,通过页面拖动对工作流进行搭建

同时可以配置,中间的某个节点如果失败,是否跳过失败节点

3.3 容器处理器
PowerJob 容器(OmsContainer)是 Worker 内部的"沙箱加载器",允许在不重启 Worker的情况下加载: 远端上传的 Java Jar 包 / 远端上传的 Python/Shell/CMD/PowerShell 脚本
核心价值:
-
紧急修复任务不用发版,直接上传一个 jar 或脚本
-
业务方可以独立提交自己的处理器,不污染主 Worker 包
-
比如双十一大促,需要临时添加一个库存校验通知的任务,如果在worker中修改代码重新发版可以会出现某些问题,此时可以通过容器来热添加一个任务
容器 vs 内置

下面我就以临时添加一个价格检查的worker做使用展示
在模板生成这里获取maven项目

项目实现:

项目的processor代码添加完成后,将其打包成为一个jar上传到容器运维


控制台添加对应的任务:

四、进阶实现
4.1 OpenAPI
在worker中,我们可以通过IPowerJobClient内置的方法来实现对任务和实例的管理
IPowerJobClient的方法展示:

代码实现:

4.2 高可用
PowerJob Server 是无状态的(状态全在 DB),所以可以任意横向扩展

PowerJob Worker也是多部署节点,即可形成集群环境
关键配置:


更多推荐




所有评论(0)