故障注入测试

故障注入测试顾名思义就是当被测试应用部分组件或功能出现潜在故障时其本身的容错机制是否正常工作,以达到规避故障保证正常组件或功能的使用。Istio提供了HTTP故障注入功能,在http请求转发的过程中,用户可以设定一个或多个故障。故障注入的修改作用于Virtual Service,共有两种不同的故障模式abort和delay。

类型 所属 描述
abort HTTPFaultInjection.Abort 中断Http请求并且返回既定的错误状态码给请求方
delay HTTPFaultInjection.Delay 按预设的时延返回Http请求响应

为了方便大家理解本文内容,我们预先部署了bookinfo示例。

图中是原来完整的 virtualservice,设置了当cookie满足user=vip时,reviews的请求会流入v4版本,其余都会流入v1版本。

中断故障

当用户对某个负载注入了中断故障时,对于访问该负载的http请求,都会收到预先设定的错误状态码而不会收到正确内容的响应。图中的yaml截取于reviews的virtualservice文件。

我们可以看到对于版本v1的路由规则里多了一条fault对象。这个fault对象中,则包含了设定的故障属性。可以解读为,v1版本添加abort故障并且设定返回的http状态码为501,percent设定为100这意味着所有访问v1的请求都会收到501的http响应,显而易见如果这里设成50则只有一半的请求会收到501响应,另一半则会收到正常的响应。

如果我们访问productpage只能看到基本的报错信息,并不能确定,这到底是我们预设的中断故障起作用了,还是某种原因导致服务“崩了”。

为了确定是我们人工导致的服务中断,而不是其他,我们必须直接访问reviews。给Reviews组件配置外部ip,打开浏览器,并且按下F12,选择network,在地址栏中输入“地址/reviews/0”,network中会有一项红色报错信息,点开则可以看到我们预设的501报错状态码。至此中断故障已经成功注入。删除则只需将fault对象直接清除掉即可。

如果这时候我们去访问v4,将cookie设为user=vip

可以看到这时的reviews可以正常的显示。

延时故障注入

除了刚才延时的中断服务故障,延时故障也可以手动注入组件中。刚才使用的bookinfo示例中有两个版本v1和v4。我们已经给v1版本注入了中断故障,现在我们给v4版本注入延时故障,设定时间延迟为2秒,并且所有访问v4的请求都会有2秒的延迟。

如上,我们打开product page 以及 reviews page 来验证一下:

从这里我们可以看到product page 响应2.39秒

Reviews page的响应2.27s

我们用例子介绍了两种基本故障注入的方式

接下来我们看一些其他的故障注入例子

Virtual Service 例子1:

在这个例子中,当cookie满足user=vip时会触发延时故障,2秒延时后访问v4版本,当user=svip的时候则会触发中断故障,当cookie不满足以上两个条件时,则可以正常访问v1版本。

Virtual Service 例子2:

在这个例子中不论cookie符合vip还是svip,亦或是都不符合两个条件,都可以正常的访问到v1版本。这是由于route对象放在了第一个,没有任何匹配条件,不管cookie值是什么都“满足条件”,所以所有的流量不加任何处理直接会流向版本v1,这里要特殊提醒下,如若自己手动添加故障注入一定要注意相对顺序,否则可能不会出现你想设定的结果。

Virtual Service 例子3:

这个virtual service中我们对同一个版本注入了两个不同的故障,满足任何一个条件都可以触发相应的故障,如果所有条件都不满足则会默认的正常访问v1版本。那么问题来了,如果我没有配置最后一条route,出现了一条既不符合中断故障匹配条件,也不符合延时故障匹配条件,请求会走向哪里呢?对于这种yaml设置,结果异常的简单直白,如果请求不符合任何条件,则会直接获得404的响应,不会自动流入任何其他的版本。

故障注入测试为应用在上线前提供了完备的可靠性测试,istio为使用者进行故障注入提供了极大地便捷,在正确的地方添加3-4行配置而不用修改应用代码即可进行故障注入测试。希望有更多的人可以利用istio故障注入功能提供的便捷来提高自己的研发和测试效率。

idou老师带教你学Istio 03: istio故障注入功能的介绍和使用的更多相关文章

  1. idou老师带你认识Istio13:Istio实现基础认证策略

    前言 微服务架构提供了更好的灵活性.可伸缩性以及服务复用的能力,但,微服务也有特殊的安全需求,Istio Security尝试提供全面的安全解决方案.为了提供灵活的服务访问控制,需要双向 TLS 和细 ...

  2. idou老师教你学Istio11 : 如何用Istio实现流量熔断

    在之前的最佳实践中,已经带大家通过一系列的实践任务领略了Istio的无穷魅力.今天,将向大家介绍如何用Istio实现流量熔断. 熔断机制是创建弹性微服务应用程序的重要模式.熔断可以帮助您自由控制故障影 ...

  3. idou老师教你学Istio 07: 如何用istio实现请求超时管理

    在前面的文章中,大家都已经熟悉了Istio的故障注入和流量迁移.这两个方面的功能都是Istio流量治理的一部分.今天将继续带大家了解Istio的另一项功能,关于请求超时的管理. 首先我们可以通过一个简 ...

  4. idou老师教你学Istio06: 如何用istio实现流量迁移

    流量迁移是流量管理的一个重要功能.istio提供的流量管理功能将流量从基础设施扩展中解耦,支持动态请求路由,故障注入.超时重试.熔断和流量迁移等.流量迁移的主要目的是将流量从微服务的某一版本的逐步迁移 ...

  5. idou老师教你学Istio 22 : 如何用istio实现调用链跟踪

    大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等一些功能. 每一个功能都帮助我们在不同场景中实现不同的业务.那么其中比如流量监控这种复杂的功能Istio是如何让我们在不同的应用中实现 ...

  6. 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发

    每天记录一点:NetCore获得配置文件 appsettings.json   用NetCore做项目如果用EF  ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...

  7. 教妹学 Java:动态伴侣 Groovy

    ​ 00.故事的起源 “二哥,听说上一篇<多线程>被 CSDN 创始人蒋涛点赞了?”三妹对她提议的<教妹学 Java>专栏一直很关心. “嗯,有点激动.刚开始还以为是个马甲,没 ...

  8. 30分钟手把手教你学webpack实战

    30分钟手把手教你学webpack实战 阅读目录 一:什么是webpack? 他有什么优点? 二:如何安装和配置 三:理解webpack加载器 四:理解less-loader加载器的使用 五:理解ba ...

  9. 教妹学 Java:晦涩难懂的泛型

    00.故事的起源 “二哥,要不我上大学的时候也学习编程吧?”有一天,三妹突发奇想地问我. “你确定要做一名程序媛吗?” “我觉得女生做程序员,有着天大的优势,尤其是我这种长相甜美的.”三妹开始认真了起 ...

随机推荐

  1. nginx 配置 https 并强制跳转(lnmp一键安装包)

    目录 一.安装包 二.配置 三.查看配置文件 3.1.设定强制跳转 https 3.2 Rewrite 常用全局变量举例 一.安装包 安装大家按照官方说的安装即可. ./install.sh lnmp ...

  2. ES6、ES7、ES8、ES9、ES10

    ES6新特性(2015) ES6的特性比较多,在 ES5 发布近 6 年(2009-11 至 2015-6)之后才将其标准化.两个发布版本之间时间跨度很大,所以ES6中的特性比较多.在这里列举几个常用 ...

  3. mysql中单个字段包含','转换成多条记录

    问题:把value中的值取出作为另外一个表的where条件时,必须把value中的用','分隔的每一个id截取出来 解决方法: ),) ) #本文参考自网络某文章,非原创

  4. 深入理解java虚拟机---读书笔记

    第一章 走近java 1. java 技术体系: java 程序设计语言 各种硬件平台上的java虚拟机 class 文件格式 java API 类库 来自商业机构或者开源机构的第三方java类库 j ...

  5. OpenCV.3.4.6_VS2015&cmake编译x86版本的bin&lib

    ZC:<<OpenCV3编程入门>> 的 2.2.2 中也有该内容的讲解 1.参考网址:opencv3.3.0+vs2015+cmake编译opencv x86 - wowo的 ...

  6. MemCache可视化客户端管理及监控工具TreeNMS

    参考地址:https://www.cnblogs.com/li150dan/p/9529054.html

  7. 修改profile导致bash不能用的补救方法

    输入这条命令:export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin 由于shell命令基本都在/usr/bin,/usr/sbin,/bin ...

  8. JDBC:数据库连接技术

    JDBC :带它再爱你一次 (一) JDBC 入门 (1) 概述 Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问 ...

  9. HDU-6170 Two strings

    http://acm.hdu.edu.cn/showproblem.php?pid=6170 . 匹配任意字符,x* 匹配任意长度的 x (x 为任意字符,长度可以为 0 ) 正则表达式 #inclu ...

  10. Beanutils.copyProperties( )用法及重写提高效率

    参考地址:https://blog.csdn.net/w05980598/article/details/79134379 待研究中.....