Dojo
最新
最佳
搜索
订阅
解道Jdon
架构设计
领域驱动
DDD介绍
DDD专辑
战略建模
领域语言UL
领域事件
商业分析
工作流BPM
规则引擎
架构师观点
数据工程
产品经理
系统思维
微服务
微服务介绍
微服务专辑
模块化设计
SOA
API设计
clean架构
SpringBoot
分布式事务
分布式架构
Kubernetes
DevOps
编程设计
GoF设计模式
模式专辑
面向对象
函数式编程
编程语言比较
编程工具比较
形式逻辑
前端编程
Reactive编程
Jdon框架
Rust语言
ChatGPT
Web3
模因梗
幽默梗
程序员吐槽
面试技巧
Java入门
数字化转型
认知偏差
道德经
GitHub工具
更多话题
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 调用中将信息发送回客户端。
从那里,客户端可以提取涉及的服务名称并将其用作混沌测试套件的输入。
集成测试
DevOps
微服务架构