> 断路器也成服务熔断,在多个服务调用的时候,服务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 replicas1 selector matchLabels app nginx-deployment strategy rollingUpdate maxSurge 25% maxUnavailable 25% type RollingUpdate template metadata labels app nginx-deployment spec containersimage'nginx:latest' name nginx-deployment ---apiVersion v1 kind Service metadata name nginx-service spec selector app nginx-deployment type ClusterIP portsname http port80 targetPort80 protocol TCP ---apiVersion networking.istio.io/v1alpha3 kind DestinationRule metadata name nginx-dr spec host nginx-service trafficPolicy connectionPool http http1MaxPendingRequests1 maxRequestsPerConnection1 outlierDetection consecutiveErrors1 interval 10s baseEjectionTime 10s maxEjectionPercent100
##### 测试服务熔断
通过执行 ``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: 熔断连接最大百分比