跳到主要内容

DR熔断

1.何为熔断

熔断机制(英语:Circuit breaker / Trading curb)指的是在股票市场的交易时间中,当价格波动的幅度达到某一个限定的目标(熔断点)时,对其暂停交易一段时间的机制。此机制如同保险丝在电流过大时候熔断,故而得名。

同理,Istio可以定义负载达到某种条件时触发熔断机制,阻止新的请求。

2.配置项

熔断的定义是在DR里定义的,主要有2部分

  • trafficPolicy:用于定义连接池

    • connectionPool: 连接池的定义分成两类:
      • TCP连接
        • maxConncections: 到目标主机的最大连接数
        • connectTimeOut: TCP连接超时,最小值必须要大于1ms
      • http连接
        • http1MaxPendingReguests: 针对一个目标的HTTP请求最大排队数量,默认是1024
        • http2MaxRequests: 对一个后端的最大请求数
        • maxRequestsPerConnection:
        • maxReties: 在给定的时间,集群所有主机最大重试数,默认值为3

3.样例

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: mydr
spec:
host: svc3
trafficPolicy:
connectionPool:
tcp:
maxConnections: 80 #并发连接数
http:
http1MaxPendingRequests: 1 #排队请求数
maxRequestsPerConnection: 1 #每连接请求数
subsets:
- name: v1
labels:
xx: xx

为不同端口定义策略

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: mydr
spec:
host: svc3
trafficPolicy:
connectionPool:
tcp:
maxConnections: 80
portLevelSettings:
- port:
number: 8888
connectionPool:
tcp:
maxConnections: 100
subsets:
- name: v1
labels:
xx: xx

4.异常处理

  • outlierDetection:用于定义熔断的条件,达到什么条件就开始熔断
  • consecutiveGatewayErrors: 1 连续错误几次开始熔断,该实例会被踢掉
  • interval:驱逐检查的时间间隔(驱逐检测的统计时间),默认为10秒
  • baseEjectionTime指定来一个实例被踢掉之后,最少多长时间之后加回来,如果连续触发熔断,熔断的时长会乘以相应的倍数,时间默认为30秒,一个服务被驱逐的时间等于驱逐次数乘以最小驱逐时间,所以被驱逐的实例再被再次驱逐时会变得 越来越长
  • maxEjectionPercent:服务的可驱逐故障实例的最大比例,默认为10%。官方不建议配置过高,过分的驱逐会影响服务的服务能力
  • minHealthPercent:最小健康比例,当负载的实例中,如果健康的实例数量低于这个比例,istio会进入恐慌模式,异常检查功能会被禁用,所有的服务不论是否是故障实例都可以接受请求。
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: mydr
spec:
host: svc3
trafficPolicy:
connectionPool:
tcp:
maxConnections: 1 #并发连接数
http:
http1MaxPendingRequests: 1 #排队请求数
maxRequestsPerConnection: 1 #每连接请求数
outlierDetection:
consecutiveGatewayErrors: 1
interval: 10s
baseEjectionTime: 3m
maxEjectionPercent: 100
subsets:
- name: v1
labels:
xx: xx

负载测试工具fortio