1. 基本概念

超时:当你调用上游服务,如果上游服务长时间没有响应,就不用去等,直接返回了。

  • 目的是控制故障的范围,避免故障的扩散

image.png
重试:不断的去重试要调用的服务

  • 主要解决网络抖动,通信失败的问题

image.png

2. 实验:添加超时和重试策略

新技能:学会在VirtualService 中添加超时和重试的配置

实验目标:
将请求打向reviews服务的v2版本,在Rating服务中添加一个延迟,模拟一个故障出现的情况,最后验证配置的超时重试是否生效
image.png
第一步:给ratings 服务添加延迟

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: VirtualService
  3. metadata:
  4. name: reviews
  5. spec:
  6. hosts:
  7. - reviews
  8. http:
  9. - route:
  10. - destination:
  11. host: reviews
  12. subset: v2

image.png
访问 http://192.168.61.199:32697/productpage,所有的流量都达到了v2这个版本
image.png
给rating服务注入2s的延时(在故障注入篇会详细介绍)

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: VirtualService
  3. metadata:
  4. name: ratings
  5. spec:
  6. hosts:
  7. - ratings
  8. http:
  9. - fault:
  10. delay:
  11. percent: 100
  12. fixedDelay: 2s
  13. route:
  14. - destination:
  15. host: ratings
  16. subset: v1

image.png
访问 http://192.168.61.199:32697/productpage,发现需等待2s

第二步:给reviews 服务添加超时策略
配置非常简单,直接加个timeout项

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: VirtualService
  3. metadata:
  4. name: reviews
  5. spec:
  6. hosts:
  7. - reviews
  8. http:
  9. - route:
  10. - destination:
  11. host: reviews
  12. subset: v2
  13. timeout: 1s

image.png
测试:访问 http://192.168.61.199:32697/productpage显示如下图
image.png
第三步:给ratings 服务添加重试策略
现将timeout取消掉,

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: VirtualService
  3. metadata:
  4. name: reviews
  5. spec:
  6. hosts:
  7. - reviews
  8. http:
  9. - route:
  10. - destination:
  11. host: reviews
  12. subset: v2
  13. timeout: 1s # 删除此行代码

image.png
给rating的虚拟服务配置个5s的延迟,同时给他配置一个超时(设定重试两次),

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: VirtualService
  3. metadata:
  4. name: ratings
  5. spec:
  6. hosts:
  7. - ratings
  8. http:
  9. - fault:
  10. delay:
  11. percent: 100
  12. fixedDelay: 5s
  13. route:
  14. - destination:
  15. host: ratings
  16. subset: v1
  17. retries:
  18. attempts: 2
  19. perTryTimeout: 1s # 每次尝试需要等待的时间

image.png
验证配置是否生效
打开rating服务的SideCar log看是不是有两次的重试
image.png
kubectl logs -f ratings-v1-6c6f59c996-45qxb -c istio-proxy
(可以看到,两次的请求全都打了出来)
image.png

3. 总结

并不是说超时的时间设置越长越好,如果设置过长可能导致系统的响应时间变慢;如果过短,又起不到应有的作用。