Istio - TrafficManagement - Circuit Breaker

简介: 断路器也成服务熔断,在多个服务调用的时候,服务A依赖服务B,服务B依赖服务C,如果服务C响应时间过长或者不可用,则会让服务B占用太多系统资源,而服务A也依赖服B,同时也在占用大量的系统资源,造成系统雪崩的情况出现。 Istio 断路器通过网格中的边车对流量进行拦截判断处理,避免了在代码中侵入控制逻辑,非常方便的就实服务熔断的能力。

> 断路器也成服务熔断,在多个服务调用的时候,服务A依赖服务B,服务B依赖服务C,如果服务C响应时间过长或者不可用,则会让服务B占用太多系统资源,而服务A也依赖服B,同时也在占用大量的系统资源,造成系统雪崩的情况出现。 Istio 断路器通过网格中的边车对流量进行拦截判断处理,避免了在代码中侵入控制逻辑,非常方便的就实服务熔断的能力。


#### 什么场景需要用到超时处理

微服务场景下,在多个服务调用的时候,服务A依赖服务B,服务B依赖服务C,如果服务C响应时间过长或者不可用,则会让服务B占用太多系统资源,而服务A也依赖服B,同时也在占用大量的系统资源,造成系统雪崩的情况出现。

image.jpeg

#### 通过例子来理解

image.jpeg


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


##### 测试服务熔断

通过执行 ``kubectl get svc`` 获取服务IP地址

image.jpeg

通过压测工具进行请求测试

``fortio load -c 10 -n 50 -qps 0 http://10.2.189.170``

image.jpeg

结果显示 Code 503 有 64% 的流量触发到熔断


##### 断路器相关参数配置

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

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

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

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

outlierDetection.baseEjectionTime: 熔断时长

maxEjectionPercent: 熔断连接最大百分比

目录
相关文章
|
JSON Java API
玩转Spring Boot之RestTemplate的使用
在java代码里想要进行restful web client服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。Spring Boot提供了一种简单便捷的内置模板类来进行操作,这就是RestTemplate。
6165 0
|
开发工具 git
IDEA中如何使用Git 图文超详细
IDEA中Git使用,实战教程
9654 1
IDEA中如何使用Git 图文超详细
|
7月前
|
运维 算法 安全
OSI 数据链路层详解
本文介绍了MAC地址的基本概念、结构及其在网络通信中的作用,同时详细解析了以太网帧的组成部分,包括前导码、目的地址、源地址、类型、数据和FCS等字段的功能与意义。此外,还阐述了CSMA/CD原理,涵盖载波监听、多路访问、冲突检测及冲突处理机制,帮助理解以太网在共享介质环境下的数据传输过程。
329 4
|
计算机视觉 开发者 Python
OpenCV中Fisherfaces人脸识别器识别人脸实战(附Python源码)
OpenCV中Fisherfaces人脸识别器识别人脸实战(附Python源码)
568 0
|
负载均衡 Cloud Native 容灾
阿里云负载均衡SLB价格_ALB、NLB和CLB区别_负载均衡功能和使用场景说明
阿里云负载均衡SLB分为应用型ALB、网络型NLB及传统型CLB。ALB与NLB仅支持按量付费,而CLB则提供包年包月和按量付费选项。ALB专长于7层HTTP/HTTPS/QUIC协议处理,支持丰富的内容路由功能;NLB聚焦于4层TCP/UDP/TCPSSL协议,擅长处理大规模并发连接。两者均基于NFV技术,支持自动弹性伸缩,并与云原生环境如ACK/SAE/K8S深度集成。此外,SLB提供多协议支持、多级容灾、安全防护等功能,确保服务的高可用性和安全性。具体收费方面,ALB的基础版实例费为0.049元/小时起,NLB实例费限时免费,两者还需支付性能容量单位LCU费及公网网络费(仅公网实例)
|
存储 固态存储 芯片
计算机中内存与存储
【7月更文挑战第28天】
2503 1
|
前端开发 Java Spring
Spring MVC 请求处理流程
Spring MVC 请求处理流程
162 0
|
消息中间件 Java 数据库
Spring事务监听机制---使用@TransactionalEventListener处理数据库事务提交成功后再执行操作(附:Spring4.2新特性讲解)【享学Spring】(上)
Spring事务监听机制---使用@TransactionalEventListener处理数据库事务提交成功后再执行操作(附:Spring4.2新特性讲解)【享学Spring】(上)