Istio 断路器 (TrafficManagement - Circuit Breaker)
断路器也成服务熔断,在多个服务调用的时候,服务A依赖服务B,服务B依赖服务C,如果服务C响应时间过长或者不可用,则会让服务B占用太多系统资源,而服务A也依赖服B,同时也在占用大量的系统资源,造成系统雪崩的情况出现。 Istio 断路器通过网格中的边车对流量进行拦截判断处理,避免了在代码中侵入控制逻辑,非常方便的就实服务熔断的能力。
什么场景需要用到超时处理
微服务场景下,在多个服务调用的时候,服务A依赖服务B,服务B依赖服务C,如果服务C响应时间过长或者不可用,则会让服务B占用太多系统资源,而服务A也依赖服B,同时也在占用大量的系统资源,造成系统雪崩的情况出现。
通过例子来理解
apiVersion: apps/v1
kind: Deployment
metadata:
labels: app: nginx-deployment
name: nginx-deployment
spec:
replicas: 1
selector: matchLabels: app: nginx-deployment
strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate
template: metadata: labels: app: nginx-deployment spec: containers: - image: 'nginx:latest' name: nginx-deployment
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector: app: nginx-deployment
type: ClusterIP
ports:
- name: http port: 80 targetPort: 80 protocol: TCP
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: nginx-dr
spec:
host: nginx-service
trafficPolicy: connectionPool: http: http1MaxPendingRequests: 1 maxRequestsPerConnection: 1 outlierDetection: consecutiveErrors: 1 interval: 10s baseEjectionTime: 10s maxEjectionPercent: 100
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
测试服务熔断
通过执行 kubectl get svc
获取服务IP地址
通过压测工具进行请求测试
fortio load -c 10 -n 50 -qps 0 http://10.2.189.170
结果显示 Code 503 有 64% 的流量触发到熔断
断路器相关参数配置
http1MaxPendingRequests: http 请求挂起状态的最大请求数
maxRequestsPerConnection: 一定时间内限制对后端服务发起的最大请求数,如果超过了此配置,就会出现限流。
outlierDetection.consecutiveErrors: 拒绝连接的最大失败次数
outlierDetection.interval: 触发熔断的时间间隔,在 interval 时间间隔内,达到 consecutiveErrors 即触发熔断
outlierDetection.baseEjectionTime: 熔断时长
maxEjectionPercent: 熔断连接最大百分比
文章来源: blog.csdn.net,作者:叶康铭,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/m0_38030719/article/details/108940596
- 点赞
- 收藏
- 关注作者
评论(0)