分布式调度/计算框架PowerJob

PowerJob官方将它定位为开源的分布式计算与任务调度框架,核心能力包括定时调度、分布式执行、Map/MapReduce、DAG 工作流、失败重试、节点水平扩展等。

1. 整体架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
                         ┌──────────────────────┐
│ PowerJob UI │
│ 任务 / 调度 / 日志 │
└──────────┬───────────┘
│ HTTP

┌──────────────┐ ┌──────────────────────┐
│ 业务系统 │ ──API──► │ PowerJob Server │
│ Spring Boot │ │ │
└──────────────┘ │ 调度中心 / Master │
│ 任务管理 / 工作流 │
│ Worker管理 / 监控 │
└───────┬───────┬──────┘
│ │
┌─────────────┘ └─────────────┐
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ PowerJob Worker │ │ PowerJob Worker │
│ App A │ │ App A │
│ │ │ │
│ TaskProcessor │ │ TaskProcessor │
└─────────────────┘ └─────────────────┘
│ │
▼ ▼
业务数据库/Redis 业务数据库/Redis

2. 最核心的两个角色:Server + Worker

Server

Server 是调度控制面

主要负责:

  • 任务定义
  • CRON / 固定频率 / 固定延迟调度
  • Worker 注册与发现
  • 任务分发
  • 执行状态管理
  • 重试
  • 失败处理
  • 工作流DAG
  • 任务日志
  • UI/API
  • 集群管理

Worker

Worker是真正执行任务的地方

例如你的业务系统:

1
2
3
@SpringBootApplication
public class OrderApplication {
}

引入 PowerJob Worker 后:

1
2
3
4
5
6
7
8
9
10
11
OrderApplication

├── OrderService
├── PaymentService
├── UserService

└── PowerJob Worker

├── Processor A
├── Processor B
└── Processor C

Worker 启动后注册到 PowerJob Server。

Server 决定:

1
2
3
4
5
6
7
8
9
这个任务

应该由哪个Worker执行

Worker接收

调用Processor

业务代码真正执行

Worker 作为任务实际执行节点,并支持通过增加 Server 和 Worker节点实现水平扩展和高可用


支持四种执行模式

模式 含义
Standalone 单节点执行
Broadcast 所有 Worker 都执行
Map 把任务拆分到多个 Worker
MapReduce Map → Reduce 分布式计算

3.PowerJob应用场景

3.1定时任务

1
2
3
CRON
固定频率
固定延迟

例如:

1
2
3
4
每天凌晨:
清理订单
生成报表
同步数据

官方支持CRON、固定频率、固定延迟以及OpenAPI 触发。


3.2延迟任务

1
2
3
4
5
订单创建

30分钟未支付

关闭订单

或者:

1
2
3
4
5
优惠券发放

N 天后

检查是否过期

3.3分布式批处理

1
2
3
4
5
6
7
10 亿用户

拆分

100 个 Worker

并行计算

这是 PowerJob 比单纯 Scheduler 更重要的能力。


3.4工作流

1
2
3
4
5
6
7
8
9
10
11
数据采集

数据清洗

数据计算

数据聚合

报表

通知

3.5OpenAPI 动态触发

1
CRON

也可以:

1
2
3
4
5
6
7
8
业务系统

│ HTTP/OpenAPI

PowerJob


立即执行任务

官方将 OpenAPI 作为一种调度策略,用于自定义触发。


4.Quartz vs XXL-JOB

能力 Quartz XXL-JOB PowerJob
定时调度
Web 管理
集群调度
Worker 模型
广播
Map
MapReduce
DAG
分布式计算
延迟任务
OpenAPI

PowerJob 的定位不是单纯“任务调度中心”,而是“分布式任务调度 + 分布式计算”。


5.调度过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
      ┌───────────────┐
│ Schedule │
│ 调度 │
└───────┬───────┘


┌───────────────┐
│ Dispatch │
│ 分发 │
└───────┬───────┘

┌──────────┼──────────┐
▼ ▼ ▼
Worker Worker Worker
│ │ │
└──────────┼──────────┘

┌───────────────┐
│ Execution │
│ 执行 │
└───────┬───────┘


┌───────────────┐
│ Result/State │
│ 状态/结果回传 │
└───────────────┘