在新的遗物中,我们了解测试我们的系统的价值,以确保其对危险条件的效率和弹性。无论是通过混沌工程或者对抗性Gamedayay.,我们的Devops团队采用可靠性最佳实践来了解有关我们的系统的更多信息,并开发新的方法来改进它们。
Chaos Engineering涉及仔细注入危害我们的系统,以测试系统对它的回应。这使我们可以准备和实践中断,并尽量减少停机的影响前它发生。
这里的操作词是小心。我们不是在努力休息我们的系统 - 我们正试图让他们更强大,更具弹性。尽管名称,但混乱的工程实际上并不混乱。相反,混沌工程涉及旨在展示我们在面对失败的情况下表现的思考,计划和控制的实验。
没有短缺混沌工程资源,但最近统一的API团队杠杆队我们实现了GraphQL API作为我们内部混沌工程实践的入学点。当然,netflix有它混乱猴子但新的遗物有一个混乱的熊猫!
问题陈述
与典型不同休息API.这通常需要从多个端点加载,GraphQL提供了一个端点,可以管理复杂查询,因此您可以在一个请求中获取您的应用需求的数据。我们已经实现了“架构拼接”,它从几个底层GraphQL API创建一个架构,使我们能够通过我们的GraphQL服务器在所有API中提供统一的体验。
为数据提出数据新遗物的GraphQL API,消费者查询数据结构中的各个字段;例如,关于的查询账户
Field返回与运行查询的用户关联的帐户信息。通过对各种下游服务提出请求来解决这些字段。如果服务处于关闭或运行缓慢,GraphQL可能会发送回部分响应 - 请求不会完全失败,但响应可能丢失数据。这与REST API不同,其中响应通常表示简单的成功或失败。
这是我们感兴趣的部分响应。特别是,我们如何针对延迟和现场错误进行测试,反过来旨在为在我们的服务中添加更多弹性代码的机会,这些代码将积极响应部分请求失败?
进入混沌熊猫
通过我们的新混沌熊猫测试工具,内部新的遗物团队可以在预生产测试中配置GraphQL,以便为其响应添加等待时间,或者使某些字段以特定的故障率失败。它像运行GraphQL突变一样简单(可以修改和获取数据的基本GraphQL查询类型)。
这是一个例子Chaosstart.
突破混乱会议的突变EntitySearch.
和账户
字段和速度响应下降5,000毫秒:
突变{chaosstart(配置:{fielderrors:[{name:“entitysearch”,概率:1.0},{name:“帐户”,概率:0.70}],延迟:5000})}
在这种情况下,我们配置了EntitySearch.
概率为1.0的字段,因此该字段将100%的时间从GraphQL返回错误;我们给了这一点账户
字段可能为0.70,因此它将返回70%的时间返回错误。我们还配置了5,000毫秒的延迟,因此GraphQL查询响应将延迟5,000毫秒。
以下是Chaos Panda运行的回复:
{“数据”:{“currustUser”:{“帐户”:null,“EntitySearch”:null}},“错误”:[{“locations”:[{“列”:0,“行”:6}]那"message": "Chaos Panda strikes again: \"accounts\" failed to resolve.", "path": [ "currentUser", "accounts" ] }, { "locations": [ { "column": 0, "line": 3 } ], "message": "Chaos Panda strikes again: \"entitySearch\" failed to resolve.", "path": [ "currentUser", "entitySearch" ] } ], ...
突变被视为发出请求的用户,因此其他用户不会受到影响。任何额外的Chaosstart.
突变将覆盖该用户的当前活动的混沌配置。测试在一个小时后自动过期,并恢复订单。
虽然手动禁用测试,但用户可以运行简单Chaosstop.
突变:
突变{chaosstop}
这是它在行动中看起来的看法:
我们(混乱)旅程中的早期
GraphQL大大减少了使用新的遗物数据的开销。Chaos Panda的当前迭代非常代表我们使用GraphQL API进行混沌工程的旅程的开始。通过首先构建API,我们使开发人员的生活尽可能简单,适用于全部发展过程的方面 - 从开发到效率和弹性测试。