首页
/ Argo Workflows 归档API查询性能优化实践

Argo Workflows 归档API查询性能优化实践

2025-05-14 19:13:10作者:晏闻田Solitary

性能问题背景

Argo Workflows作为一款流行的云原生工作流引擎,在3.5版本中引入了工作流归档功能,将已完成的工作流数据从etcd迁移到关系型数据库存储。然而在实际生产环境中,当归档工作流数量达到一定规模后,用户界面加载工作流列表时出现了严重的性能问题,响应时间长达12秒以上,极大地影响了用户体验。

问题根因分析

通过对数据库查询的深入分析,发现问题主要出在归档工作流列表查询的SQL语句上。该查询需要从JSON类型的workflow字段中提取多个元数据字段(如labels、annotations、progress等),这些JSON解析操作在PostgreSQL和MySQL中都是CPU密集型操作。

特别是在以下场景下问题更为突出:

  1. 工作流定义较大,包含复杂结构和大量元数据
  2. 归档工作流数量庞大(部分用户达到百万级别)
  3. 查询未使用合适的索引或索引未被正确选择

解决方案探索

社区针对此问题提出了多种优化方案,经过充分讨论和测试验证:

1. JSONB数据类型转换(PostgreSQL专有方案)

将workflow字段从JSON类型转换为PostgreSQL特有的JSONB类型。JSONB以二进制格式存储,解析速度更快且支持索引。测试表明:

  • 转换过程耗时较长(数万条记录需几分钟)
  • 对无LIMIT的查询改善有限
  • 仅适用于PostgreSQL,不兼容MySQL

2. 生成列方案

为常用查询字段创建生成列(GENERATED COLUMN),避免每次查询时解析JSON:

labels text GENERATED ALWAYS AS ((workflow::json)->'metadata'->>'labels') stored
  • 显著提升查询性能(从秒级降到毫秒级)
  • 增加存储空间占用
  • MySQL 5.7.5+和PostgreSQL 12+支持

3. 查询重写优化

通过重构SQL查询语句,采用以下技术:

  • 使用子查询先缩小结果集范围
  • 强制使用特定索引(FORCE INDEX)
  • 添加复合索引(clustername, startedat)

测试结果显示优化效果显著:

  • 从37秒降至138毫秒(强制索引方案)
  • 从37秒降至140毫秒(新增索引方案)

最佳实践建议

根据社区讨论和测试结果,针对不同场景推荐以下优化方案:

  1. 中小规模部署

    • 采用查询重写+强制索引方案
    • 添加(startedat, clustername)复合索引
    • 确保查询始终包含LIMIT子句
  2. 大规模PostgreSQL环境

    • 实施JSONB数据类型迁移(需评估停机时间)
    • 配合生成列方案提取高频访问字段
    • 考虑分库分表策略归档历史数据
  3. 生产环境升级

    • 先在测试环境验证优化效果
    • 大规模数据迁移安排在低峰期
    • 监控升级后数据库性能指标

未来优化方向

Argo Workflows社区持续关注该问题的长期解决方案:

  1. 实现更智能的查询计划选择机制
  2. 支持可配置的元数据字段索引
  3. 引入分页缓存机制减少数据库压力
  4. 优化归档数据存储结构设计

通过以上优化措施,用户可以有效解决Argo Workflows归档API的查询性能瓶颈,恢复流畅的用户体验,同时为后续版本更强大的归档功能奠定基础。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
docsdocs
暂无描述
Markdown
832
5.52 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
497
522
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
808
1.17 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
802
1.6 K
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
982
2.32 K
kernelkernel
deepin linux kernel
C
33
16
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.05 K
786
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
486
315
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.21 K
1.27 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
668
316