乐趣区

关于网关:Chaos-Mesh-助力-Apache-APISIX-提升稳定性

Apache APISIX 是 Apache 基金会下的顶级我的项目,目前在生产环境中曾经通过每日几百亿次申请量的考验。随着社区的倒退,Apache APISIX 的性能越来越多,须要与内部组件产生的交互也越来越多,随之而来的不确定性呈指数级增长。在社区中,咱们也收到了用户反馈的一些问题,这里举两个例子。

场景一

在 Apache APISIX 的配置核心,etcd 与 Apache APISIX 之间出现意外的高网络提早时,Apache APISIX 是否依然失常运行进行流量过滤转发?

场景二

用户在 issue 反馈,当 etcd 集群中的一个节点生效而集群依然能够失常运行时,会呈现与 Apache APISIX admin API 交互报错的状况。

只管 Apache APISIX 在 CI 中通过单元 / e2e / fuzz 测试笼罩了大部分情景,然而尚未笼罩到与内部组件的交互。当产生网络稳定、硬盘故障、或是过程被杀掉等难以预料的异样行为时,Apache APISIX 是否给出适合的错误信息、是否能够放弃或自行复原到失常的运行状态呢?为了测试笼罩到用户提出的场景,以及在投入生产环境前被动发现相似的问题,通过社区探讨决定应用 PingCAP 开源的混沌工程平台 Chaos Mesh 进行测试。

混沌工程是一种在零碎基础设施上进行试验,被动找出零碎中的软弱环节的办法,从而确保零碎具备抵挡生产环境中失控环境的能力。混沌工程最早由 Netflix 提出,用以模仿从而抵挡晚期云服务的不稳定性。随着技术的演进,当初的混沌工程平台提供了更多品种的故障可供注入,依附 Kubernetes 也能够更不便地管制故障半径。这些都是 Apache APISIX 抉择 Chaos Mesh 的重要起因,但作为开源社区,Apache APISIX 深知只有沉闷的社区能力确保软件稳固应用和疾速迭代,而这也是 Chaos Mesh 更加吸引人的特点。

如何在 APISIX 上利用混沌工程

混沌工程在单纯的注入故障以外,逐步造成了一套残缺的方法论。依据 Principle of Chaos Engineering 的举荐,部署混沌工程试验须要五个步骤:

  1. 定义稳态,即找到一个证实失常运行的可量化指标。
  2. 做出假如,假如指标在实验组和对照组都始终保持稳定状态。
  3. 设计试验,引入运行中可能呈现的故障。
  4. 验证假如,即通过比拟实验组和对照组的后果证伪假如。
  5. 修复问题。

接下来以上述两个用户反馈场景为例,按照这五个步骤为大家介绍 Apache APISIX 利用混沌工程的流程。

场景一

用一幅图来形容这个场景。对照下面的五个步骤,首先须要找到掂量 Apache APISIX 失常运行的可量化指标。在测试时最次要的办法是利用 Grafana 对 Apache APISIX 运行指标进行监测,找到可掂量的指标后,在 CI 中就能够从 Prometheus 中独自提取数据进行比拟判断,这里应用了路由转发的 Request per Second(RPS)和 etcd 的可连接性 作为评估指标。另一点就是须要对日志进行剖析,对于 Apache APISIX 就是查看 Nginx 的 error.log 判断是否有报错以及报错是否合乎预期。

在对照组也就是引入 Chaos 前进行试验,检测 set/get route 均能胜利,etcd 可连贯,并记录此时的 RPS。之后,应用 network chaos 增加 5s 的网络提早,再次进行试验,此时 set route 失败,get route 胜利,etcd 无奈连贯,RPS 与之前相比无显著变动。试验合乎预期。

场景二

进行同样的对照组试验之后引入 pod-kill chaos,复现了预期的谬误。在随机删除集群中多数 etcd 节点的状况下,etcd 可连接性体现出时有时无,日志则打印出了大量连贯回绝的报错。更加乏味的是,在删除 etcd 端点列表的第一个或第三个节点时,设置路由失常返回,而只有在删除 etcd 端点列表中的第二个节点时,设置路由会报错“connection refused”。

排查发现起因在于 Apache APISIX 应用的 etcd lua API 抉择端点时并不是随机而是程序抉择,因而新建 etcd client 进行的操作就相当于只绑定在一个 etcd 端点上导致持续性的失败。修复这个问题之后,还为 etcd lua API 增加了健康检查,确保不会在断开连接的 etcd 上进行大量的反复;以及减少了 etcd 集群齐全断开连接时的回退查看,防止大量报错冲爆日志。

将来打算

  1. 借助 e2e 模仿场景进行混沌测试

    目前在 Apache APISIX 中,依然次要依附人来识别系统中可能的软弱点进行测试修复。对于开源社区来说,与之前提到的 Netflix 在企业中利用混沌工程不同,只管在 CI 中测试,无需放心混沌工程的故障半径对生产环境的影响,但同时也无奈笼罩生产环境中的简单而全面的场景。

为了笼罩更多的场景,将来社区打算利用现有的 e2e 测试模仿更加残缺的场景,进行更大范畴、更强随机性的混沌测试。

  1. 为更多 Apache APISIX 我的项目增加混沌测试

    除了为 Apache APISIX 找到更多可能的软弱点之外,社区还打算为 Apache APISIX Dashboard 和 Apache APISIX Ingress Controller 等更多我的项目增加混沌测试。

  1. 为 Chaos Mesh 增加性能

    在部署 Chaos Mesh 时遇见一些暂不反对的性能,包含网络提早的指标不反对抉择 service,网络混沌无奈指定容器端口注入等,Apache APISIX 社区将来也会帮助 Chaos Mesh 增加相干性能。心愿开源社区都会越来越好。

对于 Apache APISIX

Apache APISIX 是一个动静、实时、高性能的开源 API 网关,提供负载平衡、动静上游、灰度公布、服务熔断、身份认证、可观测性等丰盛的流量治理性能。Apache APISIX 能够帮忙企业疾速、平安的解决 API 和微服务流量,包含网关、Kubernetes Ingress 和服务网格等。

寰球已有数百家企业应用 Apache APISIX 解决要害业务流量,涵盖金融、互联网、制作、批发、运营商等等,比方美国航空航天局(NASA)、欧盟的数字工厂、中国航信、中国移动、腾讯、华为、微博、网易、贝壳找房、360、泰康、奈雪的茶等。

200 余位贡献者,一起缔造了 Apache APISIX 这个世界上最沉闷的开源网关我的项目。聪慧的开发者们!快来退出这个沉闷而多样化的社区,一起来给这个世界带来更多美妙的货色吧!

  • Apache APISIX 我的项目地址:https://github.com/apache/apisix
  • Apache APISIX 官网:http://apisix.apache.org/zh/
退出移动版