当前位置: 首页 > news >正文

备考ICA----Istio实验9---熔断Circuit Breaking 实验

备考ICA----Istio实验9—熔断Circuit Breaking 实验

1. 环境准备

创建httpbin环境

kubectl apply -f istio/samples/httpbin/httpbin.yaml
kubectl get svc httpbin

在这里插入图片描述

2. 创建测试用客户端

kubectl apply -f istio/samples/httpbin/sample-client/fortio-deploy.yaml

在这里插入图片描述

3. 创建Httpbin的Circuit Breaking DR

参数含义
maxConnections到目标主机的HTTP1/TCP最大连接数量,只作用于http1.1,不作用于http2,因为后者只建立一次连接。
connectTimeouttcp连接超时时间,默认单位秒。也可以写其他单位,如ms。format: 1h/1m/1s/1ms. MUST BE >=1ms. Default is 10s.
tcpKeepalive如果在套接字上设置SO_KEEPALIVE可以确保TCP 存活。
http1MaxPendingRequestshttp请求pending状态的最大请求数,从应用容器发来的HTTP请求的最大等待转发数,默认是 2^32-1。
maxRequestsPerConnection在一定时间内限制对后端服务发起的最大请求数,如果超过了这个限制,就会开启限流。如果将这一参数设置为 1 则会禁止 keepalive 特性;
http2MaxRequests后端请求的最大数量,默认是2^32-1。
idleTimeout上游连接池连接的空闲超时。空闲超时被定义为没有活动请求的时间段。如果未设置,则没有空闲超时。当达到空闲超时时,连接将被关闭。注意,基于请求的超时意味着HTTP/2ping将无法保持有效连接。适用于HTTP1.1和HTTP2连接;
maxRetries在给定时间内,集群中所有主机都可以执行的最大重试次数。默认为2^32-1。
h2UpgradePolicy指定是否应将关联目标的 http1.1 连接升级到 http2。

circuit/httpbin-dr-Circuit.yaml

kind: DestinationRule
metadata:
  name: httpbin
spec:
  host: httpbin
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 1
      http:
        http1MaxPendingRequests: 1
        maxRequestsPerConnection: 1
    outlierDetection:
      consecutive5xxErrors: 1
      interval: 1s
      baseEjectionTime: 3m
      maxEjectionPercent: 100

部署dr

kubectl apply -f circuit/httpbin-dr-Circuit.yaml

4. 访问测试

4.1 maxConnections=1

kubectl exec deploy/fortio-deploy -- /usr/bin/fortio curl -quiet http://httpbin:8000/get

在这里插入图片描述
当并发访问时会有一部分请求失败

kubectl exec deploy/fortio-deploy -- /usr/bin/fortio load -c 2 -qps 0 -n 20 -loglevel Warning http://httpbin:8000/get

因为2个并发,20次,不一定是50%的503.主要还是看同一时间内多少如果大于1个连接那么这个请求结束前其他请求就被拒绝.
在这里插入图片描述
放大请求数和并发数,被503熔断的请求比例会更多一点

kubectl exec deploy/fortio-deploy -- /usr/bin/fortio load -c 3 -qps 0 -n 30 -loglevel Warning http://httpbin:8000/get

在这里插入图片描述

可以查看 75 该 upstream_rq_pending_overflow 值,这意味着 75 到目前为止的调用已被标记为 Circuit

kubectl exec deploy/fortio-deploy -c istio-proxy -- pilot-agent request GET stats | grep httpbin | grep pending

在这里插入图片描述

2.2 调大maxConnections值

将maxConnections和http1MaxPendingRequests,maxRequestsPerConnection值一并调大后
circuit/httpbin-dr-Circuit.yaml

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: httpbin
spec:
  host: httpbin
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 2
      http:
        http1MaxPendingRequests: 2
        maxRequestsPerConnection: 2
    outlierDetection:
      consecutive5xxErrors: 1
      interval: 1s
      baseEjectionTime: 3m
      maxEjectionPercent: 100

部署dr

kubectl apply -f  circuit/httpbin-dr-Circuit.yaml

再次用3并发测试30个连接

kubectl exec deploy/fortio-deploy -- /usr/bin/fortio load -c 3 -qps 0 -n 30 -loglevel Warning http://httpbin:8000/get

可见503的比例明显变小
在这里插入图片描述
即使将并发4请求40个连接也只有40%的被503
在这里插入图片描述
实际工作中我们可以根据请求量和服务性能来调整maxConnections,http1MaxPendingRequests,maxRequestsPerConnection的值通过熔断,牺牲掉一部分请求来保证其余请求的正常使用

5. 环境清理

kubectl delete -f istio/samples/httpbin/httpbin.yaml -f istio/samples/httpbin/sample-client/fortio-deploy.yaml
kubectl delete -f circuit/httpbin-dr-Circuit.yaml

至此Circuit Breaking 熔断实验完成

相关文章:

  • 第一篇:概述、 目录、适用范围及术语 --- IAB/MRC《增强现实(AR)广告(效果)测量指南1.0 》
  • 主流的开发语言、环境及其特点
  • 【深度学习】【机器学习】用神经网络进行入侵检测,NSL-KDD数据集,基于机器学习(深度学习)判断网络入侵
  • 前端学习<二>CSS基础——04-CSS选择器:伪类
  • QT 常用模块介绍以及使用说明
  • YOLOv9改进策略:IoU优化 | Wasserstein Distance Loss,助力小目标涨点
  • java中的static和单例模式
  • SpringBoot自定义stater开发:拦截器开发
  • 命令模式(请求与具体实现解耦)
  • Photoshop 工具使用详解(全集 · 2024版)
  • hdlbits系列verilog解答(Adder3)-67
  • 2024-03-26 Android8.1 px30 WI-FI 模块rtl8821cu调试记录
  • 数学分析复习:实数项级数的收敛
  • python --dejavu音频指纹识别
  • 【面试经典150 | 动态规划】零钱兑换
  • MySQL 8.0 支持对单个数据库设置只读!
  • Oracle:ORA-01830错误-更改数据库时间格式
  • Eureka和Nacos的关系
  • C++之std::mem_fn使用和实现原理(全)
  • OpenAI跨界好莱坞:Sora电影制作工具即将登场,首曝剧情片细节及试用者评价
  • https://app.hackthebox.com/machines/Inject
  • Spring —— Spring简单的读取和存储对象 Ⅱ
  • 渗透测试之冰蝎实战
  • Mybatis、TKMybatis对比
  • Microsoft Office 2019(2022年10月批量许可版)图文教程
  • 《谷粒商城基础篇》分布式基础环境搭建
  • 哈希表题目:砖墙
  • Vue 3.0 选项 生命周期钩子
  • 【车载嵌入式开发】AutoSar架构入门介绍篇
  • 【计算机视觉 | 目标检测】DETR风格的目标检测框架解读