Work Pools
Work Pool = Prefect 编排层 和 实际执行基础设施 之间的桥梁。
它的核心作用是:
动态地分配和配置运行 flow 所需的基础设施。
%%{
init: {
'theme': 'neutral',
'themeVariables': {
'margin': '10px'
}
}
}%%
flowchart LR
B(Deployment Definition)
subgraph Prefect_API [Prefect API]
C(Deployment)
P(Work Pool)
end
subgraph Remote_Storage [Remote Storage]
D(Flow Code)
end
E(Worker)
subgraph Infrastructure
F((Flow Run))
end
B --> C
B -.-> D
C --> P
P --> E
D -.-> E
E --> F
Work Pool 类型
Prefect 中,work pool 仍然是统一的基础设施配置接口,但并不是所有类型都需要你自己运行 worker。
| 类型 | 描述 | 需要运行 worker |
|---|---|---|
| Hybrid | 在你自己的基础设施中运行 worker,由 worker 把 flow run 提交到你的基础设施 | Yes |
| Push | flow run 直接被推送到你配置好的无服务器基础设施 | No |
| Managed | flow run 直接被提交到 Prefect 托管的基础设施 | No |
Work Queues
每个 Work Pool 下可以定义多个 Work Queue,用于实现更灵活的任务调度与资源分配。
默认队列
- 每个 Work Pool 自带一个名为
default的默认队列。 - 如果 Deployment 未显式指定队列,则会被分配到
default队列。
核心作用
Work Queue 主要有两个核心作用:
- 任务优先级控制:可以为不同的队列设置优先级,从而决定哪些队列的任务优先被分配执行。
- 并发数限制:可以为每个队列单独设置最大并发数,控制该队列下同时运行的任务数量,防止资源被单一路径占满。
通过合理划分和配置 Work Queue,可以实现更细粒度的流控与资源隔离,提升任务调度的灵活性和系统稳定性。
Queue Priority
每个队列都有一个唯一的正整数优先级: - 数字越小,优先级越高 - 1 是最高优先级
默认情况下,所有队列的优先级都是 1。
Concurrency Limits
每个 Work Queue 可以有自己的并发限制。 同时还要注意:队列的并发限制还要受 work pool 的全局并发限制约束。
也就是说:
- 队列的并发限制不能超过自己的 limit
- 也不能超过整个 pool 的 limit