跳至主内容

Chaos Mesh 如何帮助 Apache APISIX 提升系统稳定性

· 1 分钟阅读
Shuyang Wu
Committer of Chaos Mesh
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

Chaos Mesh 帮助 Apache APISIX 提升系统稳定性
Chaos Mesh 帮助 Apache APISIX 提升系统稳定性

Apache APISIX 是一款云原生、高性能、可扩展的微服务 API 网关。作为 Apache 软件基金会的顶级项目,它为全球数百家企业处理关键业务流量,涵盖金融、互联网、制造、零售和运营商等领域。我们的客户包括 NASA、欧盟数字工厂、中国移动和腾讯。

随着社区发展,Apache APISIX 的功能与外部组件的交互日益频繁,系统复杂度提升导致潜在错误增多。为识别潜在系统故障并在生产环境中建立信心,我们引入了混沌工程理念。

Apache APISIX 架构
Apache APISIX 架构

本文将分享我们如何运用 Chaos Mesh 提升系统稳定性。

痛点分析

Apache APISIX 每日处理数百亿请求,在此规模下用户反馈了以下问题:

  • 场景一: 当 etcd 与 Apache APISIX 之间突发高网络延迟时,配置中心能否正常过滤和转发流量?

  • 场景二: etcd 集群中某节点故障(集群仍可运行)时,该节点与 Apache APISIX 管理 API 的交互是否报错?

尽管 Apache APISIX 通过持续集成(CI)中的单元测试、端到端(E2E)测试和模糊测试覆盖了多种场景,但尚未覆盖与外部组件的异常交互。当系统出现网络抖动、磁盘故障或进程被杀等异常时,Apache APISIX 能否给出恰当错误信息?能否持续运行或自我恢复?

为何选择 Chaos Mesh

为验证这些用户场景并在产品投产前发现类似问题,社区决定采用 Chaos Mesh 进行混沌测试。

Chaos Mesh 是云原生混沌工程平台,提供针对 Kubernetes 上复杂系统的全方位故障注入能力,覆盖 Pod、网络、文件系统乃至内核级故障。它帮助用户发现系统弱点,确保系统能在生产环境中抵御失控风险。

与 Apache APISIX 相似,Chaos Mesh 拥有活跃的开源社区。我们深知活跃社区能保障软件稳定使用和快速迭代,这使 Chaos Mesh 更具吸引力。

在 APISIX 中实践 Chaos Mesh

混沌工程已超越简单的故障注入,形成完整的方法论。我们首先确定应用程序的正常运行状态("稳态"),随后注入潜在问题观察系统响应。若问题导致应用偏离稳态,则进行修复。

接下来我们将通过前述两个场景,演示如何在 Apache APISIX 中使用 Chaos Mesh。

场景一

我们通过以下步骤部署混沌工程实验:

  1. 我们确定了用于衡量 Apache APISIX 是否正常运行的指标。测试中最关键的方法是使用 Grafana 监控 Apache APISIX 的运行指标。我们在 CI 环境中从 Prometheus 提取数据进行对比,采用路由转发请求每秒处理量(RPS)和 etcd 连通性作为评估指标。通过日志分析,我们检查了 Apache APISIX 的 Nginx 错误日志,确认是否存在错误以及错误是否符合预期。

  2. 在对照组测试中,create routeaccess route 操作均成功执行,etcd 连接正常。我们记录了此时的 RPS 数据。

  3. 引入网络混沌注入 5 秒延迟后重新测试:set route 操作失败,get route 成功执行,etcd 保持可连接状态,RPS 较前次实验无显著波动。实验结果符合预期。

etcd 与 Apache APISIX 间发生高网络延迟
etcd 与 Apache APISIX 间发生高网络延迟

场景二

完成对照组相同测试后,我们注入 pod-kill 混沌并成功复现预期故障。随机删除部分 etcd 节点时,APISIX 出现间歇性连接失败,日志大量报出连接拒绝错误。

删除 etcd 端点列表中首位或末位节点时,set route 能正常返回结果;但当删除中间节点时,set route 返回"connection refused"错误。

排查发现 Apache APISIX 使用的 etcd Lua API 采用顺序而非随机选择端点机制,导致创建 etcd 客户端时固定绑定单个节点,引发持续故障。

修复该问题后,我们为 etcd Lua API 增加了健康检查机制,避免请求持续发往故障节点。同时引入集群完全断开时的回退机制,防止错误日志刷屏。

etcd 节点交互报错
etcd 节点交互报错

未来规划

在端到端测试中实施混沌实验

当前 Apache APISIX 采用人工识别系统弱点进行定向测试修复。虽然 CI 环境执行混沌实验无需担忧故障半径影响生产环境,但难以覆盖生产环境的复杂综合场景。

社区计划基于现有端到端测试框架,构建更完整的场景模拟,实施随机性更强、覆盖范围更广的混沌实验。

扩展至更多 Apache APISIX 项目

除持续挖掘 Apache APISIX 自身漏洞外,社区计划将混沌测试延伸至 Apache APISIX Dashboard 和 Apache APISIX Ingress Controller 等项目。

增强 Chaos Mesh 功能

部署过程中发现 Chaos Mesh 暂不支持选择服务作为网络延迟目标,也无法针对容器端口实施网络混沌注入。Apache APISIX 社区后续将协助完善相关功能。

欢迎通过 GitHub 参与 Apache APISIX 项目贡献。若您对 Chaos Mesh 感兴趣并希望参与改进,请加入 Slack 频道 (#project-chaos-mesh) 或向 GitHub 仓库 提交 PR 及 issue。