Istio 熔断限流

Istio使用目标规则中的 TrafficPolicy 属性来配置熔断和限流,其中 connectionPool 属性配置限流方式,outlierDetection 配置异常检测的熔断方式。下面,来分别看一下这二者是如何配置的。

1.ConnectionPool 下有 TCP HTTP 两个类别的配置,二者相互协作,为服务提供有关限流的配置。

TCP 相关的基础配置有maxConnections connectTimeout

maxConnections 表示到目标服务最大的 HTTP1/TCP 连接数量。它只会限制基于HTTP1.1协议的连接,不会影响基于HTTP2的连接,因为 HTTP2 协议只建立一次连接。

connectTimeout 表示建立 TCP 连接时的超时时间,默认单位是秒。超出该时间,则连接会被自动断开。

HTTP下的配置包括http1MaxPendingRequestshttp2MaxRequests maxRequestsPerConnection 三种。

http1MaxPendingRequests 表示HTTP 请求处于pending状态下的最大请求数,也就是目标服务最多可以同时处理多少个 HTTP 请求,默认是1024 个。

http2MaxRequests 表示目标服务最大的 HTTP2 请求数量,默认是1024

maxRequestsPerConnection 表示每个 TCP 连接可以被多少个请求复用,如果将这一参数设置为 1,则会禁止 keepalive 特性。

 

2.OutlierDetection 下相关的配置项涉及服务的熔断机制,具体有如下几个基础配置。

consecutiveErrors 表示如果目标服务连续返回多少次错误码后,会将目标服务从可用服务实例列表中剔除,也就是说进行熔断,不再请求目标服务。当通过HTTP请求访问服务,返回码为502503504时,Istio 会将本次网络请求判断为发生错误。该属性配置的默认值是5,也就是说如果目标实例连续5http请求都返回了 5xx 的错误码,则该服务实例会被剔除,不再接受客户端的网络请求。

Interval 表示服务剔除的时间间隔,即在interval 时间周期内发生1consecutiveErrors错误,则触发服务熔断。其单位包括小时、分钟、秒和毫秒,默认值是10秒。

baseEjectionTime 表示目标服务被剔除后,至少要维持剔除状态多长时间。这段时间内,目标服务将保持拒绝访问状态。该时间会随着被剔除次数的增加而自动增加,时间为baseEjectionTime 和驱逐次数的乘积。其单位包括小时、分钟、秒和毫秒,默认是30秒。

maxEjectionPercent 表示可用服务实例列表中实例被移除的最大百分比,默认是10%。当超出这个比率时,即使再次发生熔断,也不会将服务剔除,这样就避免了因为瞬时错误导致大多数服务实例都被剔除的问题。

minHealthPercent 表示健康模式的最小百分比,也就是所有服务实例中健康(未被剔除)的比率。当低于这一比率时,整个集群被认为处于非健康状态,outlierDetection配置相关的服务剔除熔断机制将被关闭,不再进行服务健康检查,所有服务实例都可以被请求访问,包含健康和不健康的主机。该属性的默认值是50%,并且minHealthPercent maxEjectionPercent 的和一般都不超过100%

 

posted @ 2023-01-19 11:04  muzinan110  阅读(434)  评论(0编辑  收藏  举报