Kestra专为可扩展性和高性能而构建。它允许工程团队通过声明式工作流轻松协调复杂任务,实现可靠、灵活、可监控的数据管道。
在Kestra 0.23版本中,小米工程团队作为顶级重度用户之一,凭借其在大规模生产环境中的实践经验与积极贡献,显著推动了Kestra 以下是小米如何帮助我们将 推向新高度的几个方面。
小米推动调度器架构优化
来自小米的 Wei Bo 向我们的 JDBC 调度器提交了两项核心改进:
第二项优化尤其关键。
Kestra的调度器每秒运行一次评估循环,原本这个循环除了评估定时触发器是否该执行之外,还负责检查已触发但未完成的执行情况,并记录相关日志。这种逻辑虽然必要,但在小米这种拥有成主循环的处理时间可能长达1 min, 导致触发器错过预期时间窗口.
为了解决这个瓶颈,小米团队重构了调度器架构,将监控逻辑拆分为一个独立的监控循环。分离后的主循环响应速度显著提升,小米内部测试显示性能从原来的60s 40 毫秒!
这类优化对大型部署场景至关重要.秒轮询一次数据库的触发器可能会延迟,影响数据时效性和整体稳定性。
Kestra的调度器设计。我们由衷感谢小米工程团队的深入反馈与卓越贡献!
输出合并优化:减少资源消耗
在Kestra但这种合并在早期版本中存在复制整个输出结构的问题,多CPU 和内存。
Kestra 0.23
-
对空输出不再执行无意义的合并;
-
采用更高效的增量式合并算法。
例如,一个包含 160 秒降低至 13秒,性能提升极其显著。
id: hummingbird_941521
namespace: company.team
tasks:
- id: foreach
type: io.kestra.plugin.core.flow.ForEach
values: "{{range(1, 160)}}"
concurrencyLimit: 0
tasks:
- id: log
type: io.kestra.plugin.core.log.Log
message: Some log
如将Log
替换为带输出的OutputValues
任务,仍可将执行时间从 44 秒压缩到 24 秒。见PR # 8914
Flowable
Kestra 中的 Flowable 任务(如条件判断、分支控制等)由 Executor Worker执行逻辑,即便它们并不需要走队列,这造成了不必要的资源消耗。
在 0.23 中,我们改变了执行策略:Executor 直接在流程上下文中记录 Flowable任务的结果,减少了延迟。
10If
次时, 12 秒压缩至4 秒。见PR #8236
id: bench-flowable
namespace: company.team
inputs:
- id: condition
type: BOOL
defaults: true
triggers:
- id: webhook
type: io.kestra.plugin.core.trigger.Webhook
key: webhook
tasks:
- id: if1
type: io.kestra.plugin.core.flow.If
condition: "{{inputs.condition}}"
then:
- id: hello-true-1
type: io.kestra.plugin.core.log.Log
message: Hello True 1
else:
- id: hello-false-1
type: io.kestra.plugin.core.log.Log
message: Hello False 1
- id: if2
type: io.kestra.plugin.core.flow.If
condition: "{{inputs.condition}}"
then:
- id: hello-true-2
type: io.kestra.plugin.core.log.Log
message: Hello True 2
else:
- id: hello-false-2
type: io.kestra.plugin.core.log.Log
message: Hello False 2
...
队列并发处理策略优化
在之前的版本中,Kestra查询数据库提升队列处理能力,但这带来了较大的内存占用与数据库负载。
为了解决这个问题,0.23中我们采用了新的并行策略:改为单次查询数据库,然后并发处理结果,显著降低了资源消耗。见 PR #8648
同时,我们还改进了队列轮询机制,在高吞吐量场景下提供了更稳定的性能表现。见PR #8840和 PR #8263
结语
Kestra 0.23带来了令人振奋的性能提升,而这背后,少不了小米工程团队的深度参与。他们以及优质的社区贡献,推动着Kestra 更强、更快、更高效的方向持续演进。
Kestra成为一个真正可扩展、可信赖的编排平台。
如果你喜欢这个项目,欢迎给我们一个 GitHub Star,一起参与共建。