使用Grab的实验平台进行混沌实验编排

背景

对每个用户来说,Grab是一个可以叫车,叫外卖或付款的一个APP。对工程师来说,Grab是一个有许多服务并通过RPC交互的分布式系统,有时也可以叫做微服务架构。在数千台服务器上运行的数百个服务每天都有工程师在上面进行变更。每次复杂的配置,事情可能都会变糟。 幸运的是,很多Grab App的内部服务不像用户叫车那样的动作这么重要。例如,收藏夹可以帮用户记住之前的位置,但如果它们不工作,用户仍然可以得到较合理的用户体验。

服务部分可用并不是没有风险。工程师需要对于RPC调用非核心服务时需要有有备用计划。如果应急策略没有很好地执行,非核心服务的问题也可能导致停机。

所以我们如何保证Grab的用户可以使用核心功能,例如叫车,而此时非核心服务正在出问题?答案是混沌工程。

在Grab,我们通过在整体业务流的内部服务或组件上引入故障来实践混沌工程。但失败的服务不是实验的关注点。我们感兴趣的是测试依赖这个失败服务的服务。

照理来说,上游服务应该有弹性并且整体业务流应该可以继续工作。比如,叫车流程就算在司机地址服务上出现故障时仍应该可以工作。我们测试重试和降级是否配置正确,是否熔断器被正确的设置。

为了将混沌引入我们的系统,我们使用了我们的实验平台(ExP)和Grab-Kit.

混沌实验平台Exp将故障注入到处理流量服务的中间件(gRPC或HTTP服务器)。如果系统的行为与期望一致,你将对非核心服务故障时服务会平稳降级产生信心。

混沌实验平台ExP在Grab的基础设施中模拟不同的混沌类型,如延迟和内存泄漏。这保证了每个组件在系统的依赖不响应或响应很高时仍能返回一些东西。它能保证我们对于实例级失败有弹性,因为微服务级别的中断对于可用性也是一个威胁。

配置混沌实验

为了构建我们的混沌工程系统,我们认为需要在两个主要领域引入混沌:

  • 基础设置:随机关闭基础设施的实例和其他部分
  • 应用: 在较粗粒度引入运行时故障(如endpoint/request级别)

你可以稍后启用有意的或随机的混沌实验:

  • 随机的

    • 比较适合‘一次性’基础设施(如EC2实例)
    • 测试冗余的基础设施对最终用户的影响
    • 当影响面已经十分确定
  • 实验

    • 精确度量影响
    • 使用实验参数控制
    • 对最终用户有限的影响
    • 适用于对于影响不十分确定的复杂故障(如延迟)

最后,你可以将故障模式按以下分类:

  • 资源:CPU,内存,IO,磁盘
  • 网络:黑洞,延迟,丢包,DNS
  • 状态:关机,时间,杀进程

这些模型都可以在基础设施或应用级别使用或模拟:

对于Grab,进行应用级别的混沌实验并仔细度量影响面很重要。我们决定使用一个已有的实验平台来对围绕系统的应用级别混沌实验进行编排,即紫色部分,通过对下层像Grab-Kit这样的中间件进行注入来实现。

为什么使用实验平台?

现在有一些混沌工程工具。但是,使用它们经常需要较高级的基础设施和运维技巧,有能力设计和执行实验,以受控的方式有资源手工编排失败场景。混沌工程不是简单的在生产环境搞破坏。

将混沌工程理解成受控的实验。我们的ExP SDK提供弹性和异步追踪。这样,我们可以将潜在的业务属性度量对应到混沌失败上。比如,在订车服务上进行10秒延迟的混沌故障,我们可以知道多少辆车被影响了进而知道损失了多少钱。

使用ExP作为混沌工程的工具意味着我们可以基于应用或环境精确定制,让它可以像监控和部署管道一样与其他环境紧密集成。

在安全上也可以获得收益。使用ExP,所有的连接都在我们的内部网络中,给我们攻击表面区域的能力。所有东西都可以掌控在手中,对外部世界没有依赖。这也潜在的使监控和控制流量变容易了。

混沌故障可以点对点,编程式的,或定期执行。你可以让它们在特定日期的特定时间窗口来执行。你可以设定故障的最大数量并定制它们(比如泄漏的内存MB数量,等待的秒)。

ExP的核心价值是让工程师可以启动,控制和观察系统在各种失败条件下的行为。ExP提供全面的故障原子集,用来设计实验并观察问题在复杂分布式系统发生时的表现。而且,将混沌测试集成到ExP,我们对于部署流水线或网络基础设施不需要任何改动。因此这种组合可以很容易的在各种基础设施和部署范式上使用。

我们如何打造Chaos SDK和UI

要开发混沌工程SDK,我们使用我们已有ExP SDK的属性 - single-digit , 不需要网络调用。你可以看这里对于ExP SDK的实现。现在我们要做两件事:

  1. 一个在ExP SDK之上的很小的混沌SDK。我们将这个直接集成在我们的已有中间件,如Grab-Kit和DB层。
  2. 一个专门的用来创建混沌实验的基于web的UI

归功于我们与Grab-Kit的集成,Grab工程师不需要直接使用混沌SDK。当Grab-Kit处理进入的请求时,它先使用ExP SDK进行检查。如果请求“应该失败”,它将产生适合的失败类型。然后它被转发到特定endpoint的处理器。

我们现在支持以下失败类型:

  • Error - 让请求产生error
  • CPU Load - 在CPU上加大load
  • 内存泄漏 - 产生一些永远不能释放的内存
  • 延迟 - 在一小段随机时间内停止请求的处理
  • 磁盘空间 - 在机器上填入一些临时文件
  • Goroutine泄漏 - 创建并泄漏goroutines
  • Panic -
  • 限流 - 在请求上设置一个频率限制并在超过限制时拒绝请求

举个例子,如果一个叫车请求到了我们的叫车服务,我们调用GetVariable(“chaosFailure”)来决定请求是否应该成功。请求里包含所有需要用来做决定的信息(如请求ID,实例的IP地址等)。关于实验SDK的实现细节,看这篇博客。

为了在我们的工程师中推广混沌工程我们围绕它建立了很好的开发者体验。在Grab不同的工程团队会有很多不同的技术和领域。所以一些人可能没有对应的知识和机能来进行合适的混沌实验。但使用我们简化过的用户界面,他们不需要担心底层实现。

并且,运行混沌实验的工程师是与像产品分析师和产品经理不同的实验平台用户。所以我们使用一种简单和定制化UI配置新的混沌实验来提供一种不同的创建实验的体验。

在混沌工程平台,一个实验有以下四步:

  1. 定义系统正常情况下的理想状态。
  2. 创建一个控制组的配置和一个对比组的配置。控制组的变量使用已有值来赋值。对比组的变量使用新值来赋值。
  3. 引入真实世界的故障,例如增加CPU负载。
  4. 找到区分系统正确和失败状态标志性不同。

要创建一个混沌实验,标明你想要实验破坏的服务。你可以在以后通过提供环境,可用区或实例列表来更细化这个选择范围。

下一步,指定一组会被破坏的服务影响的服务列表。你在试验期间需要仔细监控这些服务。尽管我们持续跟踪表示系统健康的整体度量指标,它仍能帮助你在稍后分析实验的影响。

然后,我们提供UI来指定目标组和对比组的策略,失败类型,每个对比组的配置。最后一步,提供时间周期并创建实验。你已经在你的系统中加入了混沌故障并可以监控它对系统的影响了。

结论

在运行混沌实验后,一般会有两种可能输出。你已经确认了在引入的故障中系统保持了足够的弹性,或你发现了需要修复的问题。如果混沌实验最初被运行在预发环境那么两种都是不错的结果。在第一种场景,你对系统的行为产生了信心。在另一个场景,你在导致停机故障前发现了一个问题。

混沌工程是让你工作更简单的工具。通过主动测试和验证你系统的故障模式你减轻了你的运维负担,增加了你的弹性,在晚上也能睡个好觉。

 

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ 麦克风 录音 wav_小米有品上线新品,手机麦克风得到史诗级加强

手机里面是自带录音功能的,所以很多朋友都喜欢用手机来记录会议等内容,但是手机自带的麦克风用来录音并不合适,要么声音小,要么录下来的都是杂音,难道非要买一个专用的录音笔或者麦克风吗?其实没有那个必要…

云+X案例展 | 民生类: “中企通信 × TutorABC”共创全球数字教育科技新里程

本案例由中企通信投递并参与评选,CSDN云计算独家全网首发;更多关于【云X 案例征集】的相关信息,点击了解详情丨挖掘展现更多优秀案例,为不同行业领域带来启迪,进而推动整个“云行业”的健康发展。TutorABC荣获IDC 【讯…

ESB接口调用异常汇总

文章目录一、ESB接口前置知识1. ESB接口简述2. 生成的代码组成部分二、常见的异常汇总2.1. 场景1:不能解析某域名2.2. 场景2:调用服务连接超时三、调用服务前异常3.1. 异常描述3.2. CXF相关的jar和jdk的rt.jar中冲突3.3. 异常现象3.4. 异常日志3.5. 异常…

基于实时计算(Flink)与高斯模型构建实时异常检测系统

案例与解决方案汇总页:阿里云实时计算产品案例&解决方案汇总 1. 概述 异常检测(anomaly detection)指的是对不符合预期模式或数据集(英语:dataset)中其他项目的项目、事件或观测值的识别。实际应用包括…

hive 中某个字段等于0_快速了解hive

作者丨HappyMint文章选摘:大数据与人工智能这是作者的第7篇文章本文主要针对从事大数据分析和架构相关工作,需要与hive打交道但目前对hive还没有进行深层次了解的小伙伴,希望本文会让你对hive有一个快速的了解。内容主要包括什么是hive、为什…

利用blink CEP实现流计算中的超时统计问题

案例与解决方案汇总页&#xff1a;阿里云实时计算产品案例&解决方案汇总 一. 背景介绍 如<利用blinkMQ实现流计算中的延时统计问题>一文中所描述的场景&#xff0c;我们将其简化为以下案例&#xff1a; 实时流的数据源结构如下&#xff1a; 物流订单号支付时间仓接…

PPT素材网

PPT素材推荐 官网&#xff1a;http://www.1ppt.com/ 背景色采用这个&#xff0c;模板才用这个 简洁微立体创业融资计划书PPT模板免费下载 http://www.1ppt.com/article/33315.html

云+X案例展 | 民生类:中国电信天翼云携手国家天文台打造“大国重器”

本案例由天翼云投递并参与评选&#xff0c;CSDN云计算独家全网首发&#xff1b;更多关于【云X 案例征集】的相关信息&#xff0c;点击了解详情丨挖掘展现更多优秀案例&#xff0c;为不同行业领域带来启迪&#xff0c;进而推动整个“云行业”的健康发展。FAST是由中国科学院国家…

阿里云TSDB在大数据集群监控中的方案与实战

目前大部分的互联网企业基本上都有搭建自己的大数据集群&#xff0c;为了能更好让我们的大数据集群更加高效安全的工作&#xff0c;一个优秀的监控方案是必不可少的&#xff1b;所以今天给大家带来的这篇文章就是讲阿里云TSDB在上海某大型互联网企业中的大数据集群监控方案中的…

linux上java解加密(AES/CBC)异常:java.lang.SecurityException: JCE cannot authenticate the provider BC办法

对接第三方厂商需求时&#xff0c;需要对数据AES256进行解密&#xff0c;由于java本身不支持&#xff0c;需要添加依赖。 文章目录一、版本适配1. 版本对应关系2. maven仓库地址3. maven坐标二、linux jdk策略下载2.1. JDK6 jce2.2. JDK7 jce2.3. JDK8 jce三、linux jdk策略配置…

云+X案例展 | 民生类:易趋云全面提升三德科技管理效能

本案例由深圳蓝云投递并参与评选&#xff0c;CSDN云计算独家全网首发&#xff1b;更多关于【云X 案例征集】的相关信息&#xff0c;点击了解详情丨挖掘展现更多优秀案例&#xff0c;为不同行业领域带来启迪&#xff0c;进而推动整个“云行业”的健康发展。湖南三德科技股份有限…

redis 公网 安全_redis漏洞复现

一、漏洞简介什么是redisredis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash&#xff08;哈希类型&#xff09;。这些数据类型都支持push/po…

实时计算的最佳实践:基于表格存储和Blink的大数据实时计算

表格存储: 数据存储和数据消费All in one 表格存储&#xff08;Table Store&#xff09;是阿里云自研的NoSQL多模型数据库&#xff0c;提供PB级结构化数据存储、千万TPS以及毫秒级延迟的服务能力。在实时计算场景里&#xff0c;表格存储强大的写入能力和多模型的存储形态&…

关于JDK8采坑JCE加密限制版本问题

文章目录一、解决方案11. 调研2. 常见的异常3. 安全性机制导致的访问https会报错4. 解决方案5. 操作流程6. 移动jar配置策略二、解决方案22.1. 声明2.2. 编辑策略文件2.3. 修改默认属性一、解决方案1 声明&#xff1a;jdk1.8已经经过线上环境使用 1. 调研 JDK8的加密策略存在…

速围观!云+X 案例评选榜单重磅出炉!

2019年11月&#xff0c;CSDN云计算强势开启“云X”案例征集活动&#xff0c;从先进性、拓展性、效益性等三个基本方向出发&#xff0c;深入展现云技术作用行业的突出优势。时隔2个月&#xff0c;通过广泛征集等方式&#xff0c;经过层层筛选&#xff0c;深入挖掘出跨行业、跨生…

uvm 形式验证_UVM基础

uvm_component与uvm_object1.几乎所有的类都派生于uvm_object&#xff0c;包括uvm_component。uvm_component有两大特性是uvm_object所没有的&#xff1a;一是通过在new的时候指定parent参数来形成一种树形的组织结构&#xff1b;二是有phase的自动执行特点。下图是常用的UVM继…

Table Store: 海量结构化数据实时备份实战

Table Store: 海量结构化数据实时备份实战 数据备份简介 在信息技术与数据管理领域&#xff0c;备份是指将文件系统或数据库系统中的数据加以复制&#xff0c;一旦发生灾难或者错误操作时&#xff0c;得以方便而及时地恢复系统的有效数据和正常运作。在实际备份过程中&#xf…

云+X案例展 | 电商零售类:云徙助力良品铺子「双11」

本案例由云徙投递并参与评选&#xff0c;CSDN云计算独家全网首发&#xff1b;更多关于【云X 案例征集】的相关信息&#xff0c;点击了解详情丨挖掘展现更多优秀案例&#xff0c;为不同行业领域带来启迪&#xff0c;进而推动整个“云行业”的健康发展。助力品牌制胜双十一的背后…

同样做前端,为何差距越来越大?

阿里妹导读&#xff1a;前端应用越来越复杂&#xff0c;技术框架不断变化&#xff0c;如何成为一位优秀的前端工程师&#xff0c;应对更大的挑战&#xff1f;今天&#xff0c;阿里前端技术专家会影结合实际工作经验&#xff0c;沉淀了五项重要方法&#xff0c;希望能对你的职业…

云+X案例展 | 民生类:必创科技助力打造智慧城市

本案例由必创科技投递并参与评选&#xff0c;CSDN云计算独家全网首发&#xff1b;更多关于【云X 案例征集】的相关信息&#xff0c;点击了解详情丨挖掘展现更多优秀案例&#xff0c;为不同行业领域带来启迪&#xff0c;进而推动整个“云行业”的健康发展。每当夜幕降临&#xf…