Istio实现超时重试

对于分布式系统来讲,出现网络故障是所不免的。所以,如何提高系统面对问题的处理能力也就是系统的弹性能力是相当重要的。网络

提高系统弹性能力的经常使用的技术手段包括:超时和重试。app

超时

当调用上游服务的时候,若是上游服务一直没有响应,那么就能够设置一个最大等待时间,若是超过来这个最大时间,就直接返回了,再也不继续等待上游服务(快速失败),其目的是控制故障的范围,避免故障扩散(若是一直等待故障服务的返回,就会把本身的服务拖垮,这样就能够把故障控制在必定范围以内)。
image分布式

超时策略应用

实现:当reviews调用故障ratings服务时,reviews快速失败性能

步骤:ui

  1. 将productpage请求打到reviews v3版本

`kubectl apply -f virtual-service-reviews-v3.yaml
`
image
此时页面只会显示带红心的评分
imagespa

  1. 给ratings服务注入2s延时,模拟故障

`kubectl apply -f delay-fault-injection-rating-v1.yaml
`
image3d

应用配置后,从新访问productpage页面,可发现有2s左右延迟code

  1. 给reviews服务配置1s超时

`kubectl apply -f virtual-service-reviews-v3-timeout-1s.yaml
`
imageblog

从新刷新productpage页面,因为reviews调用ratings有2s延时的接口,而reviews服务的超时时间只有1s,所以页面显示服务不可用,实现了快速失败。
image接口

重试

重试是不断的去尝试从新调用请求失败的服务,它一般解决的是因为网络问题致使通讯失败的问题,经过重试能够提升系统的稳定性。
image

重试策略应用

实现:当ratings服务出现故障时,自动重试3次

步骤:

配置ratings服务3次重试

kubectl apply -f virtual-service-ratings-v1-retry.yaml

image

相关文章
相关标签/搜索