系列文章:


总目录索引:九析带你轻松完爆 istio 服务网格系列教程

目录

1 前言

2 邀约

3 Circuit breakers 断路器介绍

4 Circuit breakers 实例

    4.1 jiuxi-deploy.yaml

    4.2 jiuxi-svc.yaml

    4.3 jiuxi-dr.yaml

5 Circuit breakers 实例部署

    5.1 Istio 注入

    5.2 部署其他资源文件

6 验证断路器功能


1 前言

        如果你对博客有任何疑问,请告诉我。

第三十八章 九析带你轻松完爆 Istio - Fortio、Circuit breakers 断路器_第1张图片


2 邀约

        你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:

第三十八章 九析带你轻松完爆 Istio - Fortio、Circuit breakers 断路器_第2张图片


3 Circuit breakers 断路器介绍

        印象里,很多年前,居民区靠街有一种门面房。屋子不大,粉色的灯光,开放式的推拉门。门口总是坐着一个美丽的大姐姐,每当我从路边经过,她都会露出热情的微笑。“帅哥进来玩啊”。印象中,这是她经常对我说的话。

        那时,我还很年轻,还很帅,我觉得她一定是不可救药地爱上我了,直到有一天我看到了我不愿意看到的一幕。

        还记得是一个夏日的傍晚,我刚加班完回出租房,路上又经过了她的小屋,大老远就听到她温柔的声音:“帅哥来玩啊”。连日的工作劳累让我疲惫不堪,当我终于鼓足勇气准备接受她的邀请、迎接她的感情时,忽然从身后传来一个沙哑的声音:“来了”。我回头一看,原来是一个民工打扮的人。那一刻,我觉得自己像是被耍了一样,落荒而逃。

        后来,我经常看到有民工模样的人走进那扇落地窗开拉门,有时有好几个,每当这个时候,我都会看到小姐姐会把开拉门从里面锁好,然后再把厚厚的窗帘放下……

慢慢地,当我社会阅历丰富,我终于知道了大姐姐的职业,为人民服务。

        而记忆中的推拉门,竟是她一个弱女子面对这个世界的安全保障,是她对过载请求的一种天然防护,就像我经常使用的断路器一样。

        断路器是 Istio 提供的一个有用的技术。在微服务设置断路器可以有效保障微服务的抗操性。比如在断路器中,你可以设置服务并发连接次数限制或者服务调用失败次数,一旦达到设置的阈值,断路器将“跳闸”并停止与该主机的进一步连接。

        因为断路器适用于负载平衡池中“真正”的服务网格(Istio 资源注入后的 Pod),因此可以在 Destination Rule 配置断路器,而 Destination Rule 最终会被翻译成 Envoy 的配置,然后作用在 Envoy 上。这样当流量进入到被 Istio 注入后的 Pod,流量就会被 Envoy 拦截,这样断路器就会针对流量发生作用。


4 Circuit breakers 实例

        本实例用到 3 个资源文件:

# Istio 注入后的目标 Pod 资源

jiuxi-deploy.yaml

# Istio 目标规则文件

jiuxi-dr.yaml

# Pod 资源的对外服务

jiuxi-svc.yaml

4.1 jiuxi-deploy.yaml

spacer.gif第三十八章 九析带你轻松完爆 Istio - Fortio、Circuit breakers 断路器_第3张图片

4.2 jiuxi-svc.yaml

        该文件是对上面 deploy 文件的一个 service 暴露:

spacer.gif第三十八章 九析带你轻松完爆 Istio - Fortio、Circuit breakers 断路器_第4张图片

4.3 jiuxi-dr.yaml

第三十八章 九析带你轻松完爆 Istio - Fortio、Circuit breakers 断路器_第5张图片

        详细说明如下:

http1MaxPendingRequests: http 请求挂起状态的最大请求数

maxRequestsPerConnection: 一定时间内限制对后端服务发起的最大请求数,如果超过了此配置,就会出现限流。

outlierDetection.consecutiveErrors: 拒绝连接的最大失败次数

outlierDetection.interval: 触发熔断的时间间隔,在 interval 时间间隔内,达到 consecutiveErrors 即触发熔断

outlierDetection.baseEjectionTime: 熔断时长

maxEjectionPercent: 熔断连接最大百分比


5 Circuit breakers 实例部署

5.1 Istio 注入

        对 jiuxi-deploy.yaml 文件进行 Istio 注入:

istioctl kube-inject -f jiuxi-deploy.yaml | kubectl apply -f -

        执行成功后的结果如下:spacer.gifclipboard6.png

        发现 nginx 容器个数已经是 2 个,就说明注入成功了。

5.2 部署其他资源文件

        直接部署 jiuxi-svc.yaml 和 jiuxi-dr.yaml:

kubectl apply -f jiuxi-dr.yaml

kubectl apply -f jiuxi-svc.yaml

        自此,整个实例部署成功。


6 验证断路器功能

        使用 Istio 的负载测试工具 Fortio,有关 Fortio 的安装和使用,请参考我上章的内容,分分钟容易到爆。

        执行如下命令:

fortio load -c 10 -n 50 -qps 0 http://10.103.150.90 (CLUSTER_IP:PORT)

clipboard7.png

        执行结果如下图所示:

第三十八章 九析带你轻松完爆 Istio - Fortio、Circuit breakers 断路器_第6张图片

        从执行结果来看,有 27 个报错。 说明断路器生效。

        自此,九析带你轻松完爆 Fortio、Circuit breakers 断路器功能。