这几天和朋友聊天时,聊到了他们公司在统一更换分布式调度服务的事情。之前使用的是基于 LTS 魔改的分布式调度系统,但是因为这个开源项目太久没有更新,且现在遇到了一些问题,因此公司在推动替换为 PowerJob。这倒是勾起了大叔的好奇心,这次研究了一番,发现 PowerJob 确实是个很棒的框架,在这里推荐给大家。
何为PowerJob
PowerJob 是全新一代分布式调度与计算框架,可以让用户轻松完成作业的调度与繁杂任务的分布式计算。这是一个朝气蓬勃的开源项目,吸取了各家所长,功能更全面,开源维护更活跃。
整理了一下,主要有以下几个优点值得我来念叨念叨:
- 提供了 web 界面,方便用户使用
- 有完善的定时策略:支持 CRON 表达式、固定频率、固定延迟和 API 四种定时调度策略
- 无锁化设计,性能理论上没有上限
- 依赖精简,最小依赖仅为关系型数据库,PowerJob 本身就实现了类似 zookeeper 的分布式服务注册与发现功能
- 支持任意 Spring Data Jpa 支持的关系型数据库,包括但不限于 MySQL、Oracle 等
- 支持 DAG 工作流
横向对比
市场上可用的调度框架这么多,我们来横向对比一下,看看PowerJob到底好在哪里吧。如图所示:
添加图片注释,不超过 140 字(可选)
使用指南
因为是尝鲜,所以我就用本地部署的方式来展示一下 PowerJob。
本地部署
首先将源码 clone 到本地,用 IDE 打开项目,可以看到项目的结构。
添加图片注释,不超过 140 字(可选)
在本地搭建的 MySQL 上创建一个名为 powerjob-daily 的 schema,然后在 application-daily.properties 配置文件中配置好数据库的用户名和密码。
添加图片注释,不超过 140 字(可选)
最后直接启动 PowerJobServerApplication 就可以啦。
web 管理后台
服务启动成功后,访问http://127.0.0.1:7700/ 即可进入登录页面。初次登录需要注册一个新的应用,如图:
添加图片注释,不超过 140 字(可选)
注册成功后,用刚才的用户名密码登录即可进入后台。
配置一个定时任务
这里我们使用自带的 powerjob-worker-samples 模块来测试一下。
第一步,需要配置该模块的 application.properties 配置文件,将 powerjob.worker.app-name 置为我们刚才注册的应用名称。如图:
添加图片注释,不超过 140 字(可选)
第二步,修改模块中已有的 StandaloneProcessorDemo 类:
@Slf4j @Component public class StandaloneProcessorDemo implements BasicProcessor { @Override public ProcessResult process(TaskContext context) throws Exception { log.info("任务执行啦~,执行参数:{}", context.getJobParams()); return new ProcessResult(true); } }
第三步,进入 web 管理后台,点击左侧的任务管理,点击新建任务,配置任务名称、参数、定时信息以及执行的类,如图所示:
添加图片注释,不超过 140 字(可选)
上面的 cron 配置是让每分钟的第 5 秒执行一次任务。
第四步,启动 SampleApplication,查看日志输出。
添加图片注释,不超过 140 字(可选)
定时任务成功执行了!
总结
好啦,今天就是帮你们探探路。果然 PowerJob 上手操作起来还是比较方便的。其他的特性,屏幕前的你们如果感兴趣可以再探索一下哦。
https://github.com/PowerJob/PowerJob