对于分布式系统来说,出现网络故障是所难免的。因此,如何提升系统面对问题的处理能力也就是系统的弹性能力是至关重要的。
提升系统弹性能力的常用的技术手段包括:超时和重试。
超时
当调用上游服务的时候,如果上游服务一直没有响应,那么就可以设置一个最大等待时间,如果超过来这个最大时间,就直接返回了,不再继续等待上游服务(快速失败),其目的是控制故障的范围,避免故障扩散(如果一直等待故障服务的返回,就会把自己的服务拖垮,这样就可以把故障控制在一定范围之内)。
超时策略应用
实现:当reviews调用故障ratings服务时,reviews快速失败
步骤:
- 将productpage请求打到reviews v3版本
kubectl apply -f virtual-service-reviews-v3.yaml
此时页面只会显示带红心的评分
- 给ratings服务注入2s延时,模拟故障
kubectl apply -f delay-fault-injection-rating-v1.yaml
应用配置后,重新访问productpage页面,可发现有2s左右延迟
- 给reviews服务配置1s超时
kubectl apply -f virtual-service-reviews-v3-timeout-1s.yaml
重新刷新productpage页面,由于reviews调用ratings有2s延时的接口,而reviews服务的超时时间只有1s,因此页面显示服务不可用,实现了快速失败。
重试
重试是不断的去尝试重新调用请求失败的服务,它通常解决的是由于网络问题导致通信失败的问题,通过重试可以提高系统的稳定性。
重试策略应用
实现:当ratings服务出现故障时,自动重试3次
步骤:
配置ratings服务3次重试
kubectl apply -f virtual-service-ratings-v1-retry.yaml
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。