idou老师教你学Istio11 : 如何用Istio实现流量熔断
在之前的最佳实践中,已经带大家通过一系列的实践任务领略了Istio的无穷魅力。今天,将向大家介绍如何用Istio实现流量熔断。
熔断机制是创建弹性微服务应用程序的重要模式。熔断可以帮助您自由控制故障影响的范围、网络延迟的峰值以及抵御其他一些来自外部的恶意攻击等场景。
在接下来的任务中,idou老师将通过配置一个熔断器来详细介绍如何在Istio中实现熔断,以及背后的原理。
首先,我们需要添加一个应用程序来模拟访问网络中的通信。接着我们按照前面Istio实践中所要求的将Sidecar注入进应用中,然后启动应用。
步骤一
为了演示Istio的熔断功能,我们需要创建熔断器,并在熔断器中设置一个目标规则,如下所示:

在本步骤中,我们可以理解为Istio的熔断功能主要是通过在链接池中加入上述三个参数:
MaxConnections定义了到目标主机的 HTTP1/TCP 最大连接数;
http1MaxPendingRequests定义了针对一个目标的 HTTP 请求的最大排队数量;
maxRequestsPerConnection定义了对某一后端的请求中,一个连接内能够发出的最大请求数量。如果将这一参数设置为 1 则会禁止 keep alive 特性。
在上述yaml文件中,我们为了方便进行实践,所以都设置成了1,当然大家也可以根据自己的需求自己设定阈值。
步骤二
对于网络通信熟悉的小伙伴应该都知道,模拟网络通信的环境需要一个服务端接收请求,一个请求端发送请求。刚刚我们已经创建完成一个服务端,并给服务端配置了熔断的条件,现在我们继续创建一个请求端来发送请求触发熔断机制。
我们用了官网上的一个例子fortio来进行测试。这个客户端可以控制连接数量、并发数、以及发送HTTP请求的延迟,当然我们也必须将Sidecar注入其中。
步骤三
我们可以通过命令kubectl exec -it $FORTIO_POD -c fortio /usr/local/bin/fortio -- load -curl http://httpbin:8000/get来登入客户端Pod,并使用刚刚创建的客户端来调用httpbin。将会看到如下所示:

这表明我们创建的客户端已经成功与服务端进行了一次通信。
步骤四
开始进入今天的主题,在上面的熔断设置中指定了 maxConnections=1 以及 http1MaxPendingRequests=1。这意味着如果超过了一个连接同时发起请求,Istio 就会熔断,阻止后续的请求或连接。我们不妨尝试通过并发2个连接发送20个请求数来看一下结果。

通过上图不难看出,基本上所有的请求都发送成功了。明明我们设置的最大连接数是1,而我们模拟了两个并发连接,理论上应该只有一半的请求能成功才对,难道熔断没有成功?这里别忘了我们还设置了http1MaxPendingRequests=1,正如在前文中介绍的,这个参数的功能类似于为最大连接数提供了一级缓存,所以虽然我们的最大连接数是1,但是因为这个参数也为1,所以两个并发连接的请求都可以发送成功。
步骤五
接下来我们再修改一下参数与步骤四做个对比,模拟并发连接数数改为3请求数依然是20,我们将会看到如下图所示的结果:

正如我们在第三步中说的那样,只有2/3的请求成功,还有1/3的请求数被熔断。如果你觉得还不放心,那么我们不妨再把http1MaxPendingRequests置为2。这时候缓存区的请求相当于最大允许连接数的2倍,是不是并发数为3的模拟连接发送的请求都可以成功呢?

从上图我们可以看到,确实如此,基本上所有的请求都成功了。
通过今天的实践我们就可以知道,如何通过修改Istio的目标规则来对请求数启动熔断机制。
idou老师教你学Istio11 : 如何用Istio实现流量熔断的更多相关文章
- idou老师教你学Istio06: 如何用istio实现流量迁移
流量迁移是流量管理的一个重要功能.istio提供的流量管理功能将流量从基础设施扩展中解耦,支持动态请求路由,故障注入.超时重试.熔断和流量迁移等.流量迁移的主要目的是将流量从微服务的某一版本的逐步迁移 ...
- idou老师教你学Istio05: 如何用Isito实现智能路由配置
要介绍istio请求路由,我们不由得先从pilot 和 envoy开始谈起. 在服务网格中,Pilot管理和配置所有的envoy实例.在pilot中,你几乎可以配置所有的关于流量导向规则及其他故障恢复 ...
- idou老师教你学Istio 07: 如何用istio实现请求超时管理
在前面的文章中,大家都已经熟悉了Istio的故障注入和流量迁移.这两个方面的功能都是Istio流量治理的一部分.今天将继续带大家了解Istio的另一项功能,关于请求超时的管理. 首先我们可以通过一个简 ...
- idou老师教你学Istio 09: 如何用Istio实现K8S Ingress流量管理
前言 在Istio的世界里,如果想把外部的请求流量引入网格,你需要认识并会学会配置Istio Ingress Gateway 什么是Ingress Gateway 由于Kubernetes Ingr ...
- idou老师教你学Istio :如何用istio实现监控和日志采集
大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等功能.每一个功能都帮助我们在不同场景中实现不同的业务.那Istio是如何帮助我们实现监控和日志采集的呢? 这里我们依然以Bookinf ...
- idou老师教你学Istio: 如何用Istio实现K8S Egress流量管理
本文主要介绍在使用Istio时如何访问集群外服务,即对出口流量的管理. 默认安装的Istio是不能直接对集群外部服务进行访问的,如果需要将外部服务暴露给 Istio 集群中的客户端,目前有两种方案: ...
- idou老师教你学Istio:如何用 Istio 实现速率限制
使用 Istio 可以很方便地实现速率限制.本文介绍了速率限制的使用场景,使用 memquota\redisquota adapter 实现速率限制的方法,通过配置 rule 实现有条件的速率限制,以 ...
- idou老师教你学Istio 25:如何用istio实现监控和日志采集
大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等功能.每一个功能都帮助我们在不同场景中实现不同的业务.那Istio是如何帮助我们实现监控和日志采集的呢? 这里我们依然以Bookinf ...
- idou老师教你学Istio 23 : 如何用 Istio 实现速率限制
使用 Istio 可以很方便地实现速率限制.本文介绍了速率限制的使用场景,使用 memquota\redisquota adapter 实现速率限制的方法,通过配置 rule 实现有条件的速率限制,以 ...
随机推荐
- .git泄露及利用php弱类型松散比较构造json的payload
一道ctf题,文章搬运到了自己的网站上: http://101.132.137.140:202/archives/2019-11-16
- centos6.5搭建rabbitmq服务器(单机)
安装编译工具 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel 安装Erlang 1. 下载erl ...
- VS2010 MFC的按钮风格改变
改变VS2010 MFC的按钮风格 VS2010建的MFC工程按钮默认的风格类似VC6.0(直角矩形),如想美观按钮改为WIN7的按钮风格(圆角矩形),只需在代码中找到头文件"stdafx. ...
- C++Primer 5th Chap3 Strings,Vectors, and Arrays
使用名字空间成员的简单方法: using namespace ::name;例如:using std::cin; 头文件不应包含using声明 标准库类型string:(需要带有头文件#include ...
- Docker从国内代理下载镜像
docker从国内拉取镜像,或者通过加速器拉取 由于国内访问直接访问Docker hub网速比较慢,拉取镜像的时间就会比较长.一般我们会使用镜像加速或者直接从国内的一些平台 ...
- 第三讲扩展,VA,RVA,FA(RAW),模块地址的概念
一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边都是. 二丶模块地址(image Base) 模块地址,就是exe加载到内存的时候 ...
- Java单例设计模式和多例设计模式
单例设计模型 教学视频链接:https://edu.aliyun.com/course/1011 1,private不可以在类外部访问,但可以在内部访问 2,此时Singleton类内部的instan ...
- 通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了?
原文:通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了? 问题就是,一个很简单的语句,在不同的服务器上执行,所需要的时间相差很大,特别提到在性能差的服务器上反而快,在性能 ...
- JSP JSONArray使用遇坑!添加以下6个jar包
1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar commons ...
- Eclipse 反编译工具 jad
** 1 下载 jad工具 ** 2 将.exe文件放在jdk安装路径下,里面有java ,javac 等命令,然后将jad.jar放在eclipse的dropins目录下 ** 3 启动eclips ...