首页 > 其他分享 >太强了!全新一代分布式任务调度与计算框架!

太强了!全新一代分布式任务调度与计算框架!

时间:2024-01-05 10:32:12浏览次数:40  
标签:太强 spring worker 调度 server 任务 powerjob 任务调度 分布式

大家好,我是 Java陈序员

我们在工作开发中,离不开任务调度。通过指定的间隔时间执行各类操作,来完成无需用户操作的任务。

目前市场上,有一些编程语言本身自带的定时任务工具,如 Java 中 Timer。也有一些比较成熟的定时任务框架,如 Quartz。现在大部分系统都是使用分布式,分布式的任务调度工具也是十分流行,如 xxl-job。

今天,给大家介绍一个全新一代分布式调度与计算框架!

关注微信公众号:【Java陈序员】,回复 AI ,获取AI副业赚钱资讯。

项目介绍

PowerJob(原 OhMyScheduler) —— 全新一代分布式调度与计算框架,能让您轻松完成作业的调度与繁杂任务的分布式计算。

太强了!全新一代分布式任务调度与计算框架!_spring boot

主要特性

  • 使用简单:提供前端Web界面,允许开发者可视化地完成调度任务的管理(增、删、改、查)、任务运行状态监控和运行日志查看等功能。
  • 定时策略完善:支持CRON表达式、固定频率、固定延迟和API四种定时调度策略。
  • 执行模式丰富:支持单机、广播、Map、MapReduce四种执行模式,其中Map/MapReduce处理器能使开发者寥寥数行代码便获得集群分布式计算的能力。
  • DAG工作流支持:支持在线配置任务依赖关系,可视化地对任务进行编排,同时还支持上下游任务间的数据传递
  • 执行器支持广泛:支持Spring Bean、内置/外置Java类、Shell、Python等处理器,应用范围广。
  • 运维便捷:支持在线日志功能,执行器产生的日志可以在前端控制台页面实时显示,降低debug成本,极大地提高开发效率。
  • 依赖精简:最小仅依赖关系型数据库(MySQL/Oracle/MS SQLServer...)。
  • 高可用&高性能:调度服务器经过精心设计,一改其他调度框架基于数据库锁的策略,实现了无锁化调度。部署多个调度服务器可以同时实现高可用和性能的提升(支持无限的水平扩展)。
  • 故障转移与恢复:任务执行失败后,可根据配置的重试策略完成重试,只要执行器集群有足够的计算节点,任务就能顺利完成。

产品对比

太强了!全新一代分布式任务调度与计算框架!_spring boot_02

快速开始

0、基本概念

在开始使用前,需要先了解任务调度中相关的组件。

分组概念

appName:应用名称,建议与用户实际接入 PowerJob 的应用名称保持一致,用于业务分组与隔离。一个 appName 等于一个业务集群,也就是实际的一个 Java 项目。

核心概念

  • 任务(Job):描述了需要被 PowerJob 调度的任务信息,包括任务名称、调度时间、处理器信息等。
  • 任务实例( JobInstance,简称 Instance):任务(Job)被调度执行后会生成任务实例(Instance),任务实例记录了任务运行时的信息(任务与任务实例的关系类似于类与对象的关系)。
  • 作业(Task):任务实例的执行单元,一个 JobInstance 存在至少一个 Task,具体规则如下:
  • 单机任务(STANDALONE):一个 JobInstance 对应一个 Task
  • 广播任务(BROADCAST):一个 JobInstance 对应 N 个 Task,N为集群机器数量,即每一台机器都会生成一个 Task
  • Map/MapReduce任务:一个 JobInstance 对应若干个 Task,由开发者手动 map 产生
  • 工作流(Workflow):由 DAG(有向无环图)描述的一组任务(Job),用于任务编排。
  • 工作流实例(WorkflowInstance):工作流被调度执行后会生成工作流实例,记录了工作流运行时的信息。

扩展概念

  • JVM 容器:以 Maven 工程项目的维度组织一堆 Java 文件(开发者开发的众多 Java 处理器),可以通过前端网页动态发布并被执行器加载,具有极强的扩展能力和灵活性。
  • OpenAPI:允许开发者通过接口来完成手工的操作,让系统整体变得更加灵活。开发者可以基于 API 便捷地扩展 PowerJob 原有的功能。
  • 轻量级任务:单机执行且不需要以固定频率或者固定延迟执行的任务 ● 重量级任务:非单机执行或者以固定频率/延迟执行的任务

定时任务类型

  • API:该任务只会由 powerjob-client 中提供的 OpenAPI 接口触发,server 不会主动调度。
  • CRON:该任务的调度时间由 CRON 表达式指定。
  • 固定频率:秒级任务,每隔多少毫秒运行一次,功能与 java.util.concurrent.ScheduledExecutorService#scheduleAtFixedRate 相同。
  • 固定延迟:秒级任务,延迟多少毫秒运行一次,功能与 java.util.concurrent.ScheduledExecutorService#scheduleWithFixedDelay 相同。
  • 工作流:该任务只会由其所属的工作流调度执行,server 不会主动调度该任务。如果该任务不属于任何一个工作流,该任务就不会被调度。

备注:固定延迟和固定频率任务统称秒级任务,这两种任务无法被停止,只有任务被关闭或删除时才能真正停止任务。

1、初始化项目

1、克隆代码

git clone https://github.com/PowerJob/PowerJob.git

2、将项目导入到IDEA中,代码目录结构如下:

├── LICENSE
├── powerjob-client // powerjob-client,普通Jar包,提供 OpenAPI
├── powerjob-common // 各组件的公共依赖,开发者无需感知
├── powerjob-remote // 内部通讯层框架,开发者无需感知
├── powerjob-server // powerjob-server,基于SpringBoot实现的调度服务器
├── powerjob-worker // powerjob-worker, 普通Jar包,接入powerjob-server的应用需要依赖该Jar包
├── powerjob-worker-agent // powerjob-agent,可执行Jar文件,可直接接入powerjob-server的代理应用
├── powerjob-worker-samples // 教程项目,包含了各种Java处理器的编写样例
├── powerjob-worker-spring-boot-starter // powerjob-worker 的 spring-boot-starter ,spring boot 应用可以通用引入该依赖一键接入 powerjob-server
├── powerjob-official-processors // 官方处理器,包含一系列常用的 Processor,依赖该 jar 包即可使用
├── others
└── pom.xml

2、启动调度服务器

1、创建数据库

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.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.core.jdbc-url=jdbc:mysql://localhost:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.core.username=root
spring.datasource.core.password=root
spring.datasource.core.maximum-pool-size=20
spring.datasource.core.minimum-idle=5

tips:如果没有数据库环境,可以使用H2数据库,配置参考如下:

spring.datasource.core.driver-class-name=org.h2.Driver
spring.datasource.core.jdbc-url=jdbc:h2:file:~/h2/powerjob-daily-test
spring.datasource.core.username=sa
spring.datasource.core.password=

3、启动调度服务器

启动类:tech.powerjob.server.PowerJobServerApplication

4、启动成功后,访问:http://localhost:7700

太强了!全新一代分布式任务调度与计算框架!_spring boot_03

5、注册执行应用

太强了!全新一代分布式任务调度与计算框架!_spring boot_04

6、注册成功后即可开始登录使用

太强了!全新一代分布式任务调度与计算框架!_Java_05

3、编写示例代码

1、修改 powerjob-worker-samplesapplication.properties,将 powerjob.worker.app-name 改为刚刚在控制台注册的名称

server.port=8081

spring.jpa.open-in-view=false

########### powerjob-worker 配置 ###########
# akka 工作端口,可选,默认 27777
powerjob.worker.akka-port=27777
# 接入应用名称,用于分组隔离,推荐填写 本 Java 项目名称
powerjob.worker.app-name=test
# 调度服务器地址,IP:Port 或 域名,多值逗号分隔
powerjob.worker.server-address=127.0.0.1:7700
# 持久化方式,可选,默认 disk
powerjob.worker.store-strategy=disk
# 任务返回结果信息的最大长度,超过这个长度的信息会被截断,默认 8192
powerjob.worker.max-result-length=4096
# 单个任务追加的工作流上下文最大长度,超过这个长度的会被直接丢弃,默认 8192
powerjob.worker.max-appended-wf-context-length=4096

2、编写自己的处理器类,继承你想要使用的处理器

目前有如下处理器类型:

  • 单机处理器:BasicProcessor
  • 广播处理器:BroadcastProcessor
  • 并行处理器:MapReduceProcessor
@Component
@Slf4j
public class Test implements BasicProcessor {
    @Override
    public ProcessResult process(TaskContext context) throws Exception {

        // PowerJob 在线日志功能,使用该 Logger 打印的日志可以直接在 PowerJob 控制台查看
        OmsLogger omsLogger = context.getOmsLogger();
        omsLogger.info("StandaloneProcessorDemo start process,context is {}.", context);

        return new ProcessResult(true, "process successfully~");
    }
}

3、启动示例程序

启动类:ech.powerjob.samples.SampleApplication

4、配置运行任务

调度服务器与示例工程都启动完毕后,再次前往Web页面(http://localhost:7700/),进行任务的配置与运行。

1、在系统首页,可以看到连接到调度服务器的执行器信息

太强了!全新一代分布式任务调度与计算框架!_分布式_06

2、点击任务管理 -> 新建任务(右上角),开始创建任务。

太强了!全新一代分布式任务调度与计算框架!_spring boot_07

3、完成任务创建后,即可在控制台看到刚才创建的任务

太强了!全新一代分布式任务调度与计算框架!_任务调度_08

启用任务后即可开始调度任务,如果觉得等待调度太过于漫长,可以直接点击运行按钮,立即运行本任务。

4、任务示例菜单,可以查看任务的运行状态和在线日志

太强了!全新一代分布式任务调度与计算框架!_分布式_09

在任务实例中,可以查看任务的详情、日志,或者进行重试、停止活动。

最后

推荐的开源项目已经收录到 GitHub 项目,欢迎 Star

https://github.com/chenyl8848/great-open-source-project

或者访问网站,进行在线浏览:

https://chencoding.top:8090/#/

大家的点赞、收藏和评论都是对作者的支持,如文章对你有帮助还请点赞转发支持下,谢谢!

标签:太强,spring,worker,调度,server,任务,powerjob,任务调度,分布式
From: https://blog.51cto.com/u_15644617/9110537

相关文章

  • 分布式日志追踪ID实战 | 京东物流技术团队
    本文通过介绍分布式应用下各个场景的全局日志ID透传思路,以及介绍分布式日志追踪ID简单实现原理和实战效果,从而达到通过提高日志查询排查问题的效率。背景开发排查系统问题用得最多的手段就是查看系统日志,相信不少人都值过班当过小秘吧:给下接口和出入参吧,麻烦看看日志里的有没有异常......
  • 8.Elasticsearch,分布式搜索引擎
    1.Elasticsearch入门Elasticsearch简介一个分布式的、Restful风格的搜索引擎。支持对各种类型的数据的检索。搜索速度快,可以提供实时的搜索服务。便于水平扩展,每秒可以处理PB级海量数据。Elasticsearch术语索引、类型、文档、字段。集群、节点、分片、副本。术......
  • fugue 分布式计算通用接口
    fugue提供了通用方便分布式计算的接口,可以高效的访问大数据项目,提供了python,pandas,sql等模式如下图从上图可以看出fugue提供了一个语义层,我们的计算任务可以运行在ray,dask,spark,以及duckdb中参考架构可以看出fugue提供了不少方便的能力,比如sql,机器学习,以及流处理说明对于搞机器......
  • 华为云分布式云原生UCS,助力MetaERP构建企业级高可用分布式业务
    本文分享自华为云社区《华为云分布式云原生UCS,助力MetaERP构建企业级高可用分布式业务》,作者:云容器大未来。▎引言华为云最近成为《ForresterWave™:MulticloudContainerPlatforms,Q42023》报告中唯一入选的中国厂商,市场表现强劲。华为云分布式云原生UCS作为本次参评的关键......
  • 履机乘变,轻舟便楫:源启分布式PaaS深度赋能企业级技术平台建设
    导语源启分布式PaaS平台围绕应用视角为用户提供应用运行的全生命周期管控能力,提供注册中心、服务路由、网关、服务治理等中间件技术支持,实现应用之间的联通,解决客户多厂商产品不兼容、产品组合不可选择、孤岛效应等问题,满足企业级应用集成需要,实现降本增效。在《洞若观火,明察秋毫:源......
  • 使用 PostgreSQL 16.1 + Citus 12.1 作为多个微服务的分布式 Sharding 存储后端
    在本教程中,我们将使用PostgreSQL16.1+Citus12.1作为多个微服务的存储后端,演示此类集群的样例设置和基本操作。Citus12.1实验环境设置Docker快速启动Citus分布式集群docker-compose.ymlversion:"3"services:master:container_name:"${COMPOSE_PROJECT_NAME:......
  • 分布式ID生成
    王富贵(lmlx66.top)为什么要用分布式ID随着业务数据量的增长,存储在数据库中的数据越来越多,当索引占用的空间超出可用内存大小后,就会通过磁盘索引来查找数据,这样就会极大的降低数据查询速度。如何解决这样的问题呢?一般我们首先通过分库分表来解决,分库分表后就无法使用数据库自......
  • 分布式架构的监控与指标
    为什么需要监控系统分布式系统需要监控系统的原因有很多,以下是其中一些重要的原因:确保系统可用性和稳定性:监控系统可以帮助您持续监测系统的性能和可用性。当分布式系统的某些部分出现故障或性能瓶颈时,监控系统可以立即发出警报,以便您能够快速采取行动解决问题,确保系统的稳定......
  • 性能测试-JMeter分布式测试及其详细步骤
    性能测试概要性能测试是软件测试中的一种,它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈,确保能满足业务需求。很多系统都需要做性能测试,如Web应用、数据库和操作系统等。性能测试种类非常多,有些概念也很相近:LoadTestingBaselineTestingSmok......
  • 华为云耀云服务器L实例-大数据学习-单台服务器配置伪分布式模式hadoop集群
     华为云耀云服务器L实例-大数据学习-单台服务器配置伪分布式模式hadoop集群 产品官网:https://www.huaweicloud.com/product/hecs-light.html  今天我们采用可靠更安全、智能不卡顿、价优随心用、上手更简单、管理特省心的华为云耀云服务器L实例为例,演示单台服务器配......