准备前提
 该演示还是采用bookinfo项目,状态为《02-流量管理-03-故障注入》完成后的状态,请求流如下:
productpage → reviews:v2 → ratings (only for user jason) 
productpage → reviews:v1 (for everyone else) 
配置延时
如下配置为ratings设置了一个7秒的延时,只对登录的jason用户有效
- virtual-service-ratings-test-delay.yaml
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
   | apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:   name: ratings spec:   hosts:   - ratings   http:   - match:     - headers:         end-user:           exact: jason     fault:       delay:         percent: 100         fixedDelay: 7s     route:     - destination:         host: ratings         subset: v1   - route:     - destination:         host: ratings         subset: v1
   | 
 
- reviews-v2调用ratings是有一个10秒的调用超时
 
- productpage调用review有一个3秒的超时配置和1次重试,共6秒
 
- 访问:http://bookinfo.example.com/productpage,首页实时响应,无星图标
 
- 使用jason登录后,大约经过6秒,评论区显示如下:
 
1 2
   | Error fetching product reviews! Sorry, product reviews are currently unavailable for this book.
   | 
 
发生场景
此类错误可能发生在典型的企业应用程序中,其中不同的团队独立开发不同的微服务。 Istio的故障注入规则可帮助您识别此类异常而不会影响最终用户。
解决方案
- 传统方法:使下游服务超时时间小于上游服务
 
- 采用故障注入
 
- virtual-service-ratings-test-abort.yaml
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
   | apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:   name: ratings spec:   hosts:   - ratings   http:   - match:     - headers:         end-user:           exact: jason     fault:       abort:         percent: 100         httpStatus: 500     route:     - destination:         host: ratings         subset: v1   - route:     - destination:         host: ratings         subset: v1
   | 
 
- 访问:http://bookinfo.example.com/productpage,首页实时响应,无星图标
 
- 使用jason登录后,也实时响应,productPage调用review正常,ratings服务直接显示如下:
 
1
   | Ratings service is currently unavailable
   | 
 
- 对比之前,由于ratings的延时,导致了review也调用失败,此时只有ratings失败。
 
参考资料