标题:小米工程团队助力 Kestra

Kestra专为可扩展性和高性能而构建。它允许工程团队通过声明式工作流轻松协调复杂任务,实现可靠、灵活、可监控的数据管道。

在Kestra 0.23版本中,小米工程团队作为顶级重度用户之一,凭借其在大规模生产环境中的实践经验与积极贡献,显著推动了Kestra 以下是小米如何帮助我们将 推向新高度的几个方面。

小米推动调度器架构优化

来自小米的 Wei Bo 向我们的 JDBC 调度器提交了两项核心改进:

  • triggers表中的next_execution_date字段上添加缺失的索引。见PR #8387

  • 将触发执行的监控功能从主评估循环中提取出来,从而显著减少了调度器的性能开销。见PR #8741

第二项优化尤其关键。

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,一起参与共建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值