前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Chaos Mesh 如何助力 Apache APISIX 提高系统稳定性

Chaos Mesh 如何助力 Apache APISIX 提高系统稳定性

作者头像
用户5166556
发布2023-03-18 14:22:31
7030
发布2023-03-18 14:22:31
举报
文章被收录于专栏:让技术和时代并行

Apache APISIX 是一个高性能、可扩展的微服务 API 网关。它是 Apache 软件基金会的顶级项目之一,为全球数百家公司提供服务,处理其关键任务流量,包括金融、互联网、制造、零售和运营商。客户包括美国宇航局、欧盟数字工厂、中国移动和腾讯。

Apache APISIX 架构

随着社区的发展,Apache APISIX 的功能会更频繁地与外部组件交互,从而使我们的系统变得更加复杂并增加了出错的可能性。为了识别潜在的系统故障并建立对生产环境的信心,我们引入了混沌工程的概念。

在这篇文章中,我们将分享如何使用 Chaos Mesh® 来提高的系统稳定性。

痛点

Apache APISIX 每天处理数百亿个请求。在这个级别,用户注意到了几个问题:

场景#1:

在 Apache APISIX 的配置中心,当 etcd 和 Apache APISIX 之间出现意外的高网络延迟时,Apache APISIX 还能正常过滤转发流量吗?

场景#2:

当 etcd 集群中的某个节点出现故障,集群仍能正常运行时,该节点与 Apache APISIX admin API 交互报错。

虽然 Apache APISIX 已经通过持续集成(CI)中的单元测试、端到端(E2E)和模糊测试覆盖了很多场景,但还没有覆盖与外部组件的交互场景。如果系统出现异常,例如网络抖动、硬盘故障、进程被杀等,Apache APISIX 能否给出相应的错误信息?它能否继续运行或自行恢复正常运行?

为什么我们选择 Chaos Mesh

为了在我们的产品投入生产之前测试这些用户场景并发现类似的问题,我们的社区决定使用 Chaos Mesh 进行混沌测试。

Chaos Mesh 是一个云原生的 Chaos Engineering 平台,针对 Kubernetes 上的复杂系统提供全方位的故障注入方法,涵盖 Pod、网络、文件系统甚至内核中的故障。它帮助用户发现系统中的弱点,并确保系统能够抵抗生产环境中的失控情况。

与 Apache APISIX 一样,Chaos Mesh 也有一个活跃的开源社区。我们知道一个活跃的社区可以确保稳定的软件使用和快速迭代。这使得 Chaos Mesh 更具吸引力。

如何在 APISIX 中使用 Chaos Mesh

混沌工程已经超越了简单的故障注入,现在形成了一个完整的方法论。为了创建混沌实验,我们确定了应用程序的正常运行或“稳定状态”应该是什么。然后我们注入潜在的问题,看看系统如何响应。如果问题使应用程序脱离稳定状态,我们会修复它们。

现在,我们将通过我们提到的两个场景向您展示我们如何在 Apache APISIX 中使用 Chaos Mesh。

场景#1

我们使用以下步骤部署了混沌工程实验:

  1. 我们找到了衡量 Apache APISIX 是否正常运行的指标。在测试中,最重要的方法是使用 Grafana 来监控 Apache APISIX 的运行指标。我们在 CI 中从 Prometheus 中提取数据进行比较。在这里,我们使用每秒路由和转发请求 (RPS) 和 etcd 连接作为评估指标。我们分析了日志。对于 Apache APISIX,我们查看了 Nginx 的错误日志,以确定是否有错误以及错误是否符合我们的预期。
  2. 我们在对照组中进行了测试。我们发现 create route 和 access route 都成功了,我们可以连接到 etcd 并记录 RPS。
  3. 我们使用网络混乱添加了 5 秒的网络延迟,然后重新测试。这次 set route 失败, get route 成功,etcd 可以连接,RPS 和之前的实验相比没有明显的变化,实验符合我们的预期。

etcd 和 Apache APISIX 之间出现高网络延迟

场景#2

我们在对照组中进行了与上述相同的实验后,我们引入了 pod-kill 混沌并重现了预期的错误。当我们随机删除集群中的少量 etcd 节点时,APISIX 有时可以连接到 etcd 有时不能,并且日志打印了大量连接拒绝错误。

当我们删除 etcd 端点列表中的第一个或第三个节点时, set route 正常返回一个结果。但是,当我们删除列表中的第二个节点时, set route 返回错误 connection refused.

我们的故障排除表明,Apache APISIX 使用的 etcd Lua API 是按顺序而非随机选择端点的。因此,当我们创建一个 etcd 客户端时,我们只绑定了一个 etcd 端点。这导致了连续失败。

在我们修复了这个问题之后,我们在 etcd Lua API 中添加了健康检查,以确保不会将大量请求发送到断开连接的 etcd 节点。以及增加了 etcd 集群完全断开连接时的回退检查,避免大量报错冲爆日志。

一个 etcd 节点与 Apache APISIX 管理 API 的交互错误报告

未来的计划

在端到端模拟场景中运行混沌测试

在 Apache APISIX 中,我们手动识别系统弱点以进行测试和修复。和在开源社区一样,我们在 CI 中进行测试,所以我们不需要担心 Chaos Engineering 的故障半径对生产环境的影响。但测试无法覆盖生产环境中复杂而全面的应用场景。

为了覆盖更多的场景,社区计划利用现有的 E2E 测试来模拟更完整的场景,进行更随机、覆盖范围更大的混沌测试。

向更多 Apache APISIX 项目添加混沌测试

除了为 Apache APISIX 寻找更多漏洞外,社区还计划为更多项目添加混沌测试,例如 Apache APISIX Dashboard 和 Apache APISIX Ingress Controller。

向 Chaos Mesh 添加功能

当我们部署 Chaos Mesh 时,一些功能暂时不受支持。例如,我们不能选择一个服务作为网络延迟目标或将容器端口注入指定为网络混乱。未来,Apache APISIX 社区将协助 Chaos Mesh 添加相关功能。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生技术爱好者社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 痛点
    • 场景#1:
      • 场景#2:
      • 为什么我们选择 Chaos Mesh
      • 如何在 APISIX 中使用 Chaos Mesh
        • 场景#1
          • 场景#2
          • 未来的计划
            • 在端到端模拟场景中运行混沌测试
              • 向更多 Apache APISIX 项目添加混沌测试
                • 向 Chaos Mesh 添加功能
                相关产品与服务
                混沌演练平台
                混沌演练平台(Chaotic Fault Generator)提供高效便捷、安全可靠的故障演习服务,除可视化故障注入服务外,还提供行业经验模板,监控护栏等核心功能,致力于帮助用户及时发现业务容灾隐患、验证高可用预案的有效性,从而提高系统的可用性和韧性。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档