备考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: httpbintrafficPolicy:connectionPool:tcp:maxConnections: 1http:http1MaxPendingRequests: 1maxRequestsPerConnection: 1outlierDetection:consecutive5xxErrors: 1interval: 1sbaseEjectionTime: 3mmaxEjectionPercent: 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: httpbintrafficPolicy:connectionPool:tcp:maxConnections: 2http:http1MaxPendingRequests: 2maxRequestsPerConnection: 2outlierDetection:consecutive5xxErrors: 1interval: 1sbaseEjectionTime: 3mmaxEjectionPercent: 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 熔断实验完成

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

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

相关文章

Vue.js概述

一、概述 数据驱动的响应式框架,我们只关注Vue对象里面设置的数据即可,数据发生改变时,页面自动重新渲染 最典型的MVVM框架 二、挂载点 什么是“挂载点”?一个标签 作用:被Vue实例接收后,实例中设置的各…

标定系列——预备知识-OpenCV中与标定板处理相关的函数(四)

标定系列——预备知识-OpenCV中与标定板处理相关的函数(四) 说明记录棋盘格圆网格 说明 记录了OpenCV中与标定板处理相关的函数用法 记录 棋盘格 圆网格

酷开科技依托酷开系统用“平台+产品+场景”塑造全屋智能生活!

杰弗里摩尔的“鸿沟理论”中写道:高科技企业推进产品的早期市场和产品被广泛接受的主流市场之间,存在着一条巨大的“鸿沟”。“鸿沟”,指产品吸引早期接纳者后、赢得更多客户前的那段间歇,以及其中可预知和不可预知的阻碍。多数产…

linux环境gitlab迁移到新服务器

目录 备份项目备份gitlab配置阿里云磁盘格式化准备 最近服务器中了挖矿病毒,清理几次,都没有搞定,只能重新安装gitlab 备份项目 先把项目备份到本地 git pull git remote prune origin确保本地代码是最新的并且拥有所有的分支 git remote …

JavaEE:网络原理——协议(应用层+传输层)

应用层 协议就是一种约定 应用层:对应应用程序,是程序员打交道最多的一层,调用系统提供的网络api写出的代码都是属于应用层的。应用层有很多现成的协议,但程序员一般用的还是自定义协议 自定义协议要约定好哪些内容&#xff1f…

【深度学习|基础算法】2.AlexNet学习记录

AlexNet示例代码与解析 1、前言2、模型tips3、模型架构4、模型代码backbonetrainpredict 5、模型训练6、导出onnx模型 1、前言 AlexNet由Hinton和他的学生Alex Krizhevsky设计,模型名字来源于论文第一作者的姓名Alex。该模型以很大的优势获得了2012年ISLVRC竞赛的冠…

Spring Boot集成JPA快速入门demo

1.JPA介绍 JPA (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink&am…

aws 入门篇 02.区域和可用区

aws入门篇 02.Region和AZ 02.区域和可用区 区域(Region):us-east-1:美东1区可用区(Availability Zones) AWS的区域遍布世界各地 一个区域(Region)是由多个可用区(AZ&am…

科普的理解 Sora 视频生成模型的核心技术

OpenAI 发布的人工智能文生视频大模型Sora在2024年2月15日亮相并引发热议,我们了解到 Sora 不仅完美继承了 DALLE 3的卓越画质和遵循指令能力,更进一步利用 GPT 扩写技术,展现出超长生成时间(60s)、单视频多角度镜头以…

产品经理与产品原型

1. 前言 互联网产品经理在向技术部门递交产品策划方案时,除了详尽的需求阐述,一份清晰易懂的产品原型设计方案同样不可或缺。一份出色的原型设计,不仅能促进前期的深入讨论,更能让美工和开发人员更直观地理解产品特性,进而优化工作流程,减少不必要的时间消耗,提升整体工…

【深度学习】【机器学习】用神经网络进行入侵检测,NSL-KDD数据集,基于机器学习(深度学习)判断网络入侵

文章目录 下载数据集NSL-KDD数据集介绍输入的41个特征输出的含义数据处理&&训练技巧建神经网络,输入41个特征,输出是那种类别的攻击模型训练模型推理写gradio前端界面,用户自己输入41个特征,后端用模型推理计算后显示出是…

『Apisix安全篇』探索Apache APISIX身份认证插件:从基础到实战

🚀『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 📣读完这篇文章里你能收获到 🛠️ 了解APISIX身份认证的重要性和基本概念,以及如何在微服务架构中实施API安全。🔑 学习如何使…