对于分布式系统来说,呈现网络故障是所不免的。因而,如何晋升零碎面对问题的解决能力也就是零碎的弹性能力是至关重要的。
晋升零碎弹性能力的罕用的技术手段包含:超时和重试。
超时
当调用上游服务的时候,如果上游服务始终没有响应,那么就能够设置一个最大等待时间,如果超过来这个最大工夫,就间接返回了,不再持续期待上游服务(疾速失败),其目标是管制故障的范畴,防止故障扩散(如果始终期待故障服务的返回,就会把本人的服务拖垮,这样就能够把故障管制在肯定范畴之内)。
超时策略利用
实现:当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