分布式任务调度系列 - PowerJob
项目地址:https://github.com/KFCFans/PowerJob官方文档:https://www.yuque.com/powerjob/guidence/ztn4i5在线试用:https://www.yuque.com/powerjob/guidence/hnbskn1、概述PowerJob是新一代分布式任务调度与计算框架,支持CRON、API、固定频率、固定延迟等调度策略,提供工
项目地址:https://github.com/KFCFans/PowerJob
官方文档:https://www.yuque.com/powerjob/guidence/ztn4i5
在线试用:https://www.yuque.com/powerjob/guidence/hnbskn
1、概述
PowerJob是新一代分布式任务调度与计算框架,支持CRON、API、固定频率、固定延迟等调度策略,提供工作流来编排任务解决依赖关系,能让您轻松完成作业的调度与繁杂任务的分布式计算。
2、为什么选择PowerJob?
当前市面上流行的作业调度框架有老牌的Quartz、基于Quartz的elastic-job和原先基于Quartz后面移除依赖的xxl-job,这里分别谈一些这些框架现存的缺点。推荐:Java面试题
Quartz可以视为第一代任务调度框架,基本上是现有所有分布式调度框架的“祖宗”。由于历史原因,它不提供Web界面,只能通过API完成任务的配置,使用起来不够方便和灵活,同时它仅支持单机执行,无法有效利用整个集群的计算能力。
xxl-job可以视为第二代任务调度框架,在一定程度上解决了Quartz的不足,在过去几年中是个非常优秀的调度框架,不过放到今天来看,还是存在着一些不足的,具体如下:
数据库支持单一:仅支持MySQL,使用其他DB需要自己魔改代码
有限的分布式计算能力:仅支持静态分片,无法很好的完成复杂任务的计算
不支持工作流:无法配置各个任务之间的依赖关系,不适用于有DAG需求的场景
正所谓长江后浪推前浪,在如今这个数据量日益增长、业务越来越复杂的年代,急需一款更为强大的任务调度框架来解决上诉问题,而PowerJob因此应运而生。
PowerJob可以被认为是第三代任务调度框架,在任务调度的基础上,还额外提供了分布式计算和工作流功能,其主要特性如下:
使用简单:提供前端Web界面,允许开发者可视化地完成调度任务的管理(增、删、改、查)、任务运行状态监控和运行日志查看等功能。
定时策略完善:支持CRON表达式、固定频率、固定延迟和API四种定时调度策略。
执行模式丰富:支持单机、广播、Map、MapReduce四种执行模式,其中Map/MapReduce处理器能使开发者寥寥数行代码便获得集群分布式计算的能力。
DAG工作流支持:支持在线配置任务依赖关系,可视化得对任务进行编排,同时还支持上下游任务间的数据传递
执行器支持广泛:支持Spring Bean、内置/外置Java类、Shell、Python等处理器,应用范围广。
运维便捷:支持在线日志功能,执行器产生的日志可以在前端控制台页面实时显示,降低debug成本,极大地提高开发效率。
依赖精简:最小仅依赖关系型数据库(MySQL/PostgreSQL/Oracle/MS SQLServer…),同时支持所有Spring Data JPA所支持的关系型数据库。
高可用&高性能:调度服务器经过精心设计,一改其他调度框架基于数据库锁的策略,实现了无锁化调度。部署多个调度服务器可以同时实现高可用和性能的提升(支持无限的水平扩展)。
故障转移与恢复:任务执行失败后,可根据配置的重试策略完成重试,只要执行器集群有足够的计算节点,任务就能顺利完成。
3、同类产品对比
4、适用场景
有定时执行需求的业务场景:如每天凌晨全量同步数据、生成业务报表等。
有需要全部机器一同执行的业务场景:如使用广播执行模式清理集群日志。
有需要分布式处理的业务场景:比如需要更新一大批数据,单机执行耗时非常长,可以使用Map/MapReduce处理器完成任务的分发,调动整个集群加速计算。
5、整体架构
快速开始(本地IDE版)
本教程适用于熟悉项目或搭建本地试用/测试环境,正式部署请阅读正式部署章节。
PowerJob 的设计目标为企业级的分布式任务调度平台,即成为公司内部的调度中间件。整个公司统一部署调度中心 powerjob-server,旗下所有业务线应用只需要依赖 powerjob-worker 即可接入获取任务调度与分布式计算能力,通过不同的 appName 相互隔离。
因此,PowerJob 由调度服务器(powerjob-server)和执行器(powerjob-worker)两部分组成,powerjob-server 负责提供 Web 服务和完成任务的调度,powerjob-worker 则负责执行用户所编写的任务代码,同时提供分布式计算能力。
以下为在本地开发环境快速搭建并试用 PowerJob 的教程。
STEP1: 初始化项目
1git clone https://github.com/PowerJob/PowerJob.git
2导入 IDE,源码结构如下,我们需要启动调度服务器(powerjob-server),同时在 samples 工程中编写自己的处理器代码
PowerJob
build_docker.sh
others
script
Project
PowerJob~/Desktop/DistributCompute/PowerJob
github
idea
others
powerjob-cliet
powerjob-common
调度服务器,负责提供Web服务和任务的调度
powerjob-server
powerjob-worker
powerjobworKERAGEnT
搭载powerjob-worker的SpringBoot示例程序
powerjob-worker-samples
target
le-gitignore
LICENSE
pom.xml
Search
STEP2: 启动调度服务器
1创建数据库(仅需要创建数据库):找到你的 DB,运行 SQL CREATE DATABASE IF NOT EXISTS `powerjob-daily` DEFAULT CHARSET utf8mb4,搞定~
2修改配置文件,配置文件的说明官方文档写的非常详细,此处不再赘述。
需要修改的地方(路径: PowerJob/powerjob-server/powerjob-server-starter/src/main/resources/application-daily.properties)为数据库配置spring.datasource.core.jdbc-url、spring.datasource.core.username和spring.datasource.core.password,当然,有 mongoDB 的同学也可以修改spring.data.mongodb.uri以获取完全版体验。
powerjob-server 日常环境配置文件:application-daily.properties
tips:如果你暂时没有可用的数据库进行测试,那么可以使用以下数据库配置来一键启动 server(仅限测试环境使用!):
3完成配置文件的修改后,可以直接通过启动类 tech.powerjob.server.PowerJobServerApplication 启动调度服务器(注意:需要使用 daily 配置文件启动,可自行百度搜索“SpringBoot 指定配置文件启动”),观察启动日志,查看是否启动成功~启动成功后,访问 http://127.0.0.1:7700/ ,如果能顺利出现 Web 界面,则说明调度服务器启动成功!
4注册应用
○v4.x及前序版本:点击主页应用注册按钮,填入 powerjob-worker-samples 和控制台密码(用于进入控制台),注册示例应用(当然你也可以注册其他的 appName,只是别忘记在示例程序中同步修改~)
程舍用产受入
执行区用娃通
执行虚用注量
注料
○v5.x 版本:
■选择 PowerJob Account进行登录,简单起见可直接使用超级管理员登录(账号 ADMIN,密码 powerjob_admin)
在简滋源品菱蓝择POWERJOB自带的账户体系,
欢迎使用POWERJOBL
O127.0.0.1:7700/#LOGINHOR
请选择您的登录方式
POWERJOBACCOUNT
DINGTALK
以中世级管理员登录
■登录后,进入应用管理TAB,点击右上角新增进行应用注册即可。
[必填]应用唯一名称,建议与项目本身的PROECTNAME保持一致,后续WORKER的初始化参数
必填]应用密码,用于OPENAP等场景的鉴权,一旦录入非常不建议修改.
[必填]该应用归属的NANMESPACE,提供二级概念方便管理
权限部分,可授予其他用户相对应的角色
管理域功能,方便归类和管理
.新建应用(执行品)
POERO6
应用展示用名称
限管理观察者
开发者OBSER
扩展属性
APPNAMEAPPNAMELL
NAMESPACENAMESPACE
ANGUAGE
系统设置
TAGTAGS(LIKE)
测试员
NAMESPACE
OBSERVER
SETINGS
额外信息
OBSERVER
个人中心
管理员
命名空间
者OBSERVER
应用管理
APPNAME
密码
标签
取消
STEP3: 编写示例代码
进入示例工程(powerjob-worker-samples),修改配置文件连接powerjob-server并编写自己的处理器代码。
1修改 powerjob-worker-samples 的 application.properties,将 powerjob.worker.app-name 改为刚刚在控制台注册的名称。
2编写自己的处理器:随便找个地方新建类,继承你想要使用的处理器(各个处理器的介绍可见官方文档,文档非常详细),这里为了简单演示,选择使用单机处理器 BasicProcessor,以下是代码示例。
3启动示例程序,即直接运行主类 tech.powerjob.samples.SampleApplication,观察控制台输出信息,判断是否启动成功。
STEP4: 任务的配置与运行
调度服务器与示例工程都启动完毕后,再次前往Web页面( http://127.0.0.1:7700/ ),进行任务的配置与运行。
进入执行器应用的主界面
v4.x 及前序版本:在首页输入框输入配置的应用名称,成功操作后会正式进入前端管理界面
欢迎使用POWERJOB!
POWERJOB-WORKER-SAMPLES
报警用户录)
执行应用注册
5白1口
LANGUAGEV
G0
v5.x:在应用管理页面,选择对应的应用,点击右侧“进入”按钮即可。
V5X版本,在管理页直接点击进入即可
POWERJOB
AMESPACENAMESPAE
024-02-1820:19:42
024-02-1820:19:42
FAULTL_NAMESPACE
APPNAME(LIKE)
PWJB_ADMIN
AGTEGSLUIKE
AMESPACE
PWJB_ADMIN
YTESTAPP
彩命名空间
试应用1号
APPNAME
个人中心
应用管理
创建时间
改时间
只看我的(
修改人
CODE
NGUAGE
DID
重置
名称
新地
创建人
系统设置
ID
查询
进入注册应用首页后,出现如下图页面
POWERJOD
本地时区:AsaSh-n831
诚籽务省时x:ChnaSitencawdfmle
项目抢址
寂用名材
任穷夏在这里完成任务的配置与中gerl-leg.
检查调度服务器的时区是否为预期的时区,不一致会导致调度借误
山住男澳闲在这里完成任务实例的在线监控与运维
当前运行实例故
保群机器傲
近期失败任务傲
任务总数
#
陪工作计直号
内门占用
爵座占用
京常豁
18%1768.6G3)
1721704mm
在这里可以到连接到本调度服务器的执行器信
新建任务
点击“任务管理” -> “新建任务”(右上角),开始创建任务。
POWVERJOB
G0127.0.0.1:7700/#/OMS/J
务ID任务名和
键字关键字
定时信息
处理器类型
任务管理
系统首页
SETTINGSV
ANGUAGEV
任务实例
执行类型
工作流管
暂无数据
重置
容器
可按下图说明填写参数
任务参数,该内容会透传到TASKCONTEX#JOBPARAMS中,开发者可根据该参数实现不同处理逻辑
行模式,优先使用健康度优先算法,可选择随机均摊等其他模式
任务最低执行配置要求,低于该配置的机器会被忽略
机限定集群子集执行任务支持IP,TAG,自定义等筛选方式
生命周期,超出该范围自动停止任务
MSLOGGER日志配置,可动态调整日志选型和级
任务执行器核心配置
TECH,POWVERJOB.OFFICIAL,PROCESSORS.IMPLVERIFICATIONPROCESOR千
HNUM":10,"BATCHSIZE":20,"SUBTASKSUCCESSRATE":0.8}
定时调度类型+定时表达式
WELCOMETOUSEPOWERJOB~
{"MODE":"MR","BATCHNUM":
最低CPU核心数
最低磁盘空间(GB)
最低内存(GB)0
[CRON]MAPREDUCE
选择报警通知人员
运行时间限制(毫秒)
最大执行机器数量
时信息CROI
NSTANCE重试次数
MAPREDUCE执行
配置ONLINE
最大实例数3
统计窗口(S)
HEALTH_FIRST
行时配置
开始时间
0015***7*
沉默窗口(S)
单机线程并发度5
命周期
任务描述
集群配置
重试配置
题一一一人
报警配置
执行机器地址
错误闽值
执行配置
任务名称
验定时参数
器配置
结束时间
300000
任务参数
INFO
志配置
内建
数0
0
●任务名称:名称
●任务描述:描述
●任务参数:任务处理时能够获取到的参数(即各个 Processor 的 process 方法入参 TaskContext 对象的jobParams 属性)(进行一次处理器开发就能理解了)
●定时信息:该任务的触发方式,由下拉框和输入框组成
○API -> 不需要填写任何参数,表明该任务由 OpenAPI 触发,不会被调度器主动调度执行
○CRON -> 填写 CRON 表达式(在线生成网站)
○固定频率 -> 任务以固定的频率执行,填写整数,单位毫秒
○固定延迟 -> 任务以固定的延迟执行,填写整数,单位毫秒
○每日固定间隔 -> 哪几天的哪些时间段需要执行,比如每周二和三的10点到11点间每10分钟触发一次
○工作流 -> 不需要填写任何参数,表明该任务由工作流(workflow)触发
●生命周期:任务的有效时间范围,不在生命周期的任务会自动停止。常用于任务的延迟启动和过期自动关停。
●执行配置:由执行类型(单机、广播和 MapReduce )、处理器类型和处理器参数组成,后两项相互关联。
○内置Java处理器
■方式一 -> 填写该处理器的全限定类名(eg, tech.powerjob.samples.processors.MapReduceProcessorDemo)
■方式二 -> 填写 IOC 容器的 bean 名称,比如 Spring 用户可填写 Spring Bean 名称(eg, 处理器使用注解 @Component(value = "powerJobProcessor"),则控制台可填写 powerJobProcessor)
■方式三 -> 方法级注解,非 MapReduce 任务可直接使用注解 @PowerJobHandler 将某个方法转化为 PowerJob 任务,并设置唯一入参 TaskContext注入上下文,具体参考代码
○Java容器 -> 填写容器ID#处理器全限定类名(eg,1#cn.edu.zju.oms.container.ContainerMRProcessor)
○SHELL、Python、SQL 、HTTP 等任务的执行:点击查看官方处理器的使用教程
●运行配置
○派发策略:默认健康度优先,优先选择性能最优机器进行执行,可选随机均摊等其他派发模式
○最大实例数:该任务同时执行的数量,0 代表不限制实例数量
○单机线程并发数:该实例执行过程中每个 Worker 使用的线程数量(MapReduce 任务生效,其余无论填什么,都只会使用必要的线程数)
○运行时间限制:限定任务的最大运行时间,超时则视为失败,单位毫秒,0 代表不限制超时时间(不建议不限制超时时间)。
●重试配置:
○Instance 重试次数:实例级别,失败了整个任务实例重试,会更换 TaskTracker(本次任务实例的Master节点),代价较大,大型Map/MapReduce慎用。
○Task 重试次数:Task 级别,每个子 Task 失败后单独重试,会更换 ProcessorTracker(本次任务实际执行的 Worker 节点),代价较小,推荐使用。
○注:请注意同时配置任务重试次数和子任务重试次数之后的重试放大,比如对于单机任务来说,假如任务重试次数和子任务重试次数都配置了 1 且都执行失败,实际执行次数会变成 4 次!推荐任务实例重试配置为 0,子任务重试次数根据实际情况配置。
●机器配置:用来标明允许执行任务的机器状态,避开那些摇摇欲坠的机器,0 代表无任何限制。
○最低 CPU 核心数:填写浮点数,CPU 可用核心数小于该值的 Worker 将不会执行该任务。
○最低内存(GB):填写浮点数,可用内存小于该值的 Worker 将不会执行该任务。
○最低磁盘(GB):填写浮点数,可用磁盘空间小于该值的 Worker 将不会执行该任务。
●集群配置
○执行机器地址,指定集群中的某几台机器执行任务
■IP模式:多值英文逗号分割,如192.168.1.1:27777,192.168.1.2:27777。常用于 debug 等场景,需要指定特定机器运行。
■TAG 模式:通过 PowerJobWorkerConfig#tag将执行器打标分组后,可在控制台通过 tag 指定某一批机器执行。常用于分环境分单元执行的场景。如某些任务需要屏蔽安全生产环境(tag 设置为环境标),某些任务只需要在特定单元执行(tag 设置单元标)
○最大执行机器数量:限定调动执行的机器数量
●报警配置:选择任务执行失败后报警通知的对象,需要事先录入。
●日志配置:可使用控制台配置调整 Job 使用的 Logger 及 LogLevel
○支持 SERVER(服务端日志,默认)、LOCAL(本地日志)、STDOUT(系统输出)、NULL(空实现)4种 LogType
○支持 DEBUG、INFO、WARN、ERROR、OFF 5种级别控制
○使用建议:初期调试可使用 SERVER 日志,后续功能稳定后改为 LOCAL,并调高日志级别,降低通讯压力,消除性能瓶颈问题
任务运行&运维
完成任务创建后,即可在控制台看到刚才创建的任务,如果觉得等待调度太过于漫长,可以直接点击运行按钮,立即运行本任务。
PowerJA
点击即可立即运行该任务
口糕来营出
剩打炎与
处哥赛供型
任务实料
广翻镇行
工态
李老热行
中华肤特
DAGNOUE-L
HOHKRLOW
速绪
孕奖茂村
YIORIRIOW
DAC-NODE-D
李真行
YIORrROW
申华妆行
vIOHOLow
李餐器荐
增V(农惊
FXDELAYXOCE
荣装压行
HAPR+DS4竹
任务被关闭后不再被调度
前往任务实例边栏,查看任务的运行状态和在线日志
POWERJOG
L5gomey
口采址品页
鹏炒
口任雾警电
查看任务的详细运行信总
由任茅来付
工作产管出
运价+
三工泰衣享付
翼行申
卡情
张约中
饼精
哼止
1561727037446990A0
运n+
1806177749001906296
2080002425:1601
牛调
镀
18617774B79057C000
诺情
时
停止
详情
纤情
评准
查若输出到omsLogger的在线日志
基础的教程到这里也就结束了~
更多功能示例可见官方文档,工作流、MapReduce、容器等高级特性等你来探索!
Others
PowerJob 部署视频教程(server + agent + 容器):点击查看
更多推荐
所有评论(0)