Dojo
最新
最佳
搜索
订阅
解道Jdon
领域驱动设计
架构设计
热点话题
GitHub开源免费源代码
产品经理
RUST语言
DevOps文章排行榜
go语言文章排行榜
数据科学
认知偏差与谬论
思维训练
幽默模因
更多话题
Twitch如何对前端进行混沌工程?
22-06-11
banq
混沌工程是 Netflix 首创的一种用于测试系统弹性的方法。
您可以使用 Chaos Monkey、Gremlin、AWS Fault Injection Simulator 等工具模拟整个系统的不同故障,然后衡量影响。这些工具允许您设置模拟故障(例如阻止传出 DNS 流量、关闭虚拟机、丢包等),然后安排它们在特定时间窗口内随机运行。
混沌工程旨在作为一个科学过程来完成,您需要遵循
4 个步骤
。
使用延迟百分位数、错误率、吞吐量等定量测量来定义您的系统在正常情况下的行为方式。
创建一个控制组和一个实验组。在理想的实现中,您直接在一小部分真实用户流量上运行实验。否则,请使用
暂存
环境。
模拟反映真实世界事件的故障,例如服务器崩溃、网络连接断开等。
比较对照组和实验组之间定量测量的差异。
通常,混沌工程用于衡量后端的弹性(通常是
面向服务的
架构
)。
然而,Twitch 的工程师决定使用混沌工程技术来测试他们的前端。他们想要回答的问题是“如果他们整个系统的某些部分出现故障,前端会如何表现以及最终用户会看到什么?”
Joaquim Verges 是 Twitch 的高级开发人员,他写了一篇关于 Twitch 混沌测试流程的精彩
博客文章。
摘要如下:
Twitch 是一个实时流媒体网站,内容创建者可以在其中向观众流式传输实时视频。他们拥有数百万的主播和数千万的日活跃用户。在任何给定时间,网站上都有超过一百万的用户。
Twitch 的后端使用面向服务的架构,并且拥有数百个
微服务
。
前端客户端使用单个
GraphQL
API 与后端通信。GraphQL 允许前端开发人员使用查询语言来请求他们正在寻找的确切数据,而不是调用一堆不同的
REST
端点。
GraphQL 服务器有一个
解析器
层,负责调用特定的后端服务来获取所有请求的数据。
他们的系统最常见的故障是他们的微服务失败之一。在这种情况下,GraphQL 会将部分数据转发给客户端,客户端的工作是优雅地处理部分数据并提供可能的最佳降级体验。
Twitch 的工程师决定使用 Chaos Engineering 来测试这些微服务故障场景。
他们创建了Chaos Mode,可以在暂存环境中将额外的标头传递给 GraphQL 调用。在标头中,他们传递了他们想要模拟失败的后端服务的名称。
这种方法的主要问题是 Twitch 需要在 GraphQL 标头中发送后端服务的名称。因此,他们必须维护一个包含所有各种后端服务的列表以进行测试。
功能和服务不断变化,因此手动将特定服务映射到测试是不可扩展的。他们需要一种方法让测试套件“发现”他们应该为其模拟故障的服务。
为了解决这个问题,Twitch 在他们的 GraphQL 调用中添加了一个调试头,从而在 GraphQL
解析器
层启用了跟踪。解析器记录对内部服务依赖项所做的任何方法调用,然后在同一个 GraphQL 调用中将信息发送回客户端。
从那里,客户端可以提取涉及的服务名称并将其用作混沌测试套件的输入。
猜你喜欢
本站原创
《复杂软件设计之道:领域驱动设计全面解析与实战》
其他人在看