在新的遗物中,我们了解测试我们的系统的价值,以确保其对危险条件的效率和弹性。无论是通过混沌工程或者对抗性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,我们使开发人员的生活尽可能简单,适用于全部发展过程的方面 - 从开发到效率和弹性测试。

Caitlin Halla是新遗物的软件工程师。当她没有编程时,她爬上岩石,读取,听取记录,以及更多更多。查看帖子

对新遗物博客的写作有兴趣吗?亚搏体育登入网送我们一个球场!!