上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.1.2 弹性功能
除了最核心的路由和流量转移功能,Istio还提供了一定的弹性功能,目前支持超时、重试和熔断。简单来说,超时就是设置一个等待时间,只要上游服务的响应时间超过这个时间上限,就不再等待,直接返回,这就是所谓的快速失败。超时的主要目的是控制故障的范围,避免故障扩散。重试一般是用来解决在网络抖动时通信失败的问题。因为网络的原因,或者上游服务临时出现问题时,可以通过重试来提高系统的可用性。在Istio中添加超时和重试都非常简单,只需在路由配置中添加timeout和retry这两个关键字就可以实现了。
另外,还有一个重要的弹性功能就是熔断,它是一种非常有用的过载保护手段,可以避免服务的级联失败。熔断一共有3个状态,当上游服务可以正常返回时,熔断开关处于关闭状态;一旦失败的请求数量超过了失败计数器设定的上限,就切换到打开状态,让服务快速失败;熔断还有一个半开状态,设置一个超时时钟,在一定时间后切换到半开状态,让请求尝试访问上游服务,查看服务是否已经恢复正常,如果服务恢复正常就关闭熔断,否则会再次切换为打开状态。Istio里面的熔断需要在自定义资源DestinationRule的Traffic Policy中进行设置。
在早期的版本中,限流功能是通过Mixer组件的配额适配器(Quota Adapter)实现的。随着Mixer的废弃,限流功能暂时缺失。从Istio1.9开始,官方文档里给出了如何使用EnvoyFilter实现限流的例子。Envoy支持两种限流方式:全局(Global)限流和本地(Local)限流。全局限流通过一个全局的gRPC服务为整个网格提供速率限制;而本地限流用于限制每个服务的请求速率。这两种限流方式可以结合使用,以覆盖不同的应用场景。