主流的任务调度框架并不少,比如 Quartz、Spring Batch、xxl-job、PowerJob 等。PowerJob 被称为是全新一代分布式任务调度与计算框架,今天来聊一聊这个框架。
1.使用简单
PowerJob 的使用非常简单,搭建 PowerJob 环境,可以采用容器或 jar 包方式进行部署。使用容器方式更简单一些。可以参考官方的容器部署方法:
https://www.yuque.com/powerjob/guidence/docker-compose
这里我采用本地启动工程的方式来进行讲解。首先下载 PowerJob 源码,命令如下:
git clone https://github.com/PowerJob/PowerJob.git
下载到本地后用 idea 打开,powerjob-server 就是 PowerJob 的服务端源码。编译通过后,修改数据库连接信息,如下图:
修改完成后,就可以启动服务了。这是一个 Springboot 工程,启动类在 PowerJobServerApplication.java。
服务启动后,在浏览器输入地址 ,就可以访问了。
http://localhost:7700/
先创建一个用户,然后登录进去,再创建一个应用,就可以体验了。
创建应用应用列表进入应用
可以看到,Powerjob 的使用真的是非常简单。
2.产品对比
下图来自 PowerJob 官网,是 PowerJob 跟同类产品的对比。
2.1 定时任务
新建一个任务,如下图:
从最新版本的配置界面看,PowerJob 定时任务支持 6 种,如下图:
除了常见的 API、CRON、固定频率、固定延迟外,PowerJob 还支持工作流和每日固定间隔这 2 个方式。下图是每日固定间隔的配置:
PowerJob 引入工作流类型的定时任务,支持在线配置任务依赖关系(DAG),以可视化的方式对任务进行编排,同时还支持上下游任务间的数据传递,以及多种节点类型(判断节点 & 嵌套工作流节点)。工作流管理见下图:
2.2 生命周期
生命周期的配置在很多业务场景下是比较有用的。比如跟一个三方公司的合作时间是 1 年,一年后任务自动停止。
2.3 调度方式
在调度方式上,PowerJob 摒弃了传统调度框架基于数据库锁的设计,采用无锁化的设计方式,性能大幅度提升。
2.4 执行配置
在执行配置方面,PowerJob 支持单机执行、广播执行、Map 执行、MapReduce 执行。
单机执行表示只有一个节点执行任务,广播执行则是所有节点都执行这个任务。
Map 执行表示将数据拆分成多个子任务,交给多个分布式节点进行执行,以提高执行效率。
MapReduce 执行是使用 MapReduce 的大数据处理能力,通过分组计算然后合并来提升执行效率,主要用于复杂的大数据场景。
2.5 运行时配置
运行时配置支持 HEALTH_FIRST、RANDOM 和 SPCIFY 三种类型。HEALTH_FIRST 会查找第一个健康的节点来运行。RANDOM 表示随机选择一个节点来运行。SPCIFY 则是指定一个节点来运行。
2.6 数据库支持
PowerJob 支持任意 Spring Data Jpa支持的关系型数据库,只需要修改配置文件就可以使用。
2.7 监控告警
任务调度往往有很多大数据和批量作业的需求,这些需求对业务来说非常重要,出问题后影响范围也比较大 。能通过监控告警及时让运维和研发感知到任务执行结果是很有必要的。
PowerJob 支持邮件告警,并通过接口来提供扩展,使用的公司可以扩展接入自己的 OA 消息,方便地通知到责任人。
3.总结
技术发展到现在,主流的任务调度框架已经可以满足 90% 以上的使用场景了。新一代的任务调度框架,一定要具备解决复杂业务问题的能力,而且性能也要更加优秀,使用简单灵活。从这些方面讲,PowerJob 可以称得上是新一代的分布式任务调度框架了。