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 的举荐,部署混沌工程试验须要五个步骤:
- 定义稳态,即找到一个证实失常运行的可量化指标。
- 做出假如,假如指标在实验组和对照组都始终保持稳定状态。
- 设计试验,引入运行中可能呈现的故障。
- 验证假如,即通过比拟实验组和对照组的后果证伪假如。
- 修复问题。
接下来以上述两个用户反馈场景为例,按照这五个步骤为大家介绍 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 集群齐全断开连接时的回退查看,防止大量报错冲爆日志。
将来打算
-
借助 e2e 模仿场景进行混沌测试
目前在 Apache APISIX 中,依然次要依附人来识别系统中可能的软弱点进行测试修复。对于开源社区来说,与之前提到的 Netflix 在企业中利用混沌工程不同,只管在 CI 中测试,无需放心混沌工程的故障半径对生产环境的影响,但同时也无奈笼罩生产环境中的简单而全面的场景。
为了笼罩更多的场景,将来社区打算利用现有的 e2e 测试模仿更加残缺的场景,进行更大范畴、更强随机性的混沌测试。
-
为更多 Apache APISIX 我的项目增加混沌测试
除了为 Apache APISIX 找到更多可能的软弱点之外,社区还打算为 Apache APISIX Dashboard 和 Apache APISIX Ingress Controller 等更多我的项目增加混沌测试。
-
为 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/