如果我们刷新页面http://192.168.110.190/ , 我们会注意到一个错误信息的出现:
文章插图
rpc error: code = Unavailable desc = upstream request timeout could not retrieve products
该错误表明对产品目录服务的请求超时了 。原因为:我们修改了服务,增加了 6 秒的延迟,并将超时设置为 2 秒 。让我们定义一个重试策略,有三次尝试 , 每次尝试的超时为 1 秒 。
[root@k8scloude1 ~]# vim productcatalogservice-retry.yaml[root@k8scloude1 ~]# cat productcatalogservice-retry.yamlapiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:name: productcatalogservicespec:hosts:- productcatalogservice.online-boutique.svc.cluster.localhttp:- route:- destination:host: productcatalogservice.online-boutique.svc.cluster.localretries:attempts: 3perTryTimeout: 1s[root@k8scloude1 ~]# kubectl apply -f productcatalogservice-retry.yamlvirtualservice.networking.istio.io/productcatalogservice configured[root@k8scloude1 ~]# kubectl get virtualserviceNAMEGATEWAYSHOSTSAGEfrontend["frontend.online-boutique.svc.cluster.local"]6d14hfrontend-ingress["frontend-gateway"]["*"]24hproductcatalogservice["productcatalogservice.online-boutique.svc.cluster.local"]10mrecommendationservice["recommendationservice.online-boutique.svc.cluster.local"]86m
由于我们在产品目录服务部署中留下了额外的延迟,我们仍然会看到错误 。文章插图
让我们打开 Zipkin 中的追踪,看看重试策略的作用 。使用
getmesh istioctl dash zipkin
来打开 Zipkin 仪表盘 。或者使用如下方法打开zipkin界面#查看zipkin端口为30350[root@k8scloude1 ~]# kubectl get svc -n istio-system | grep zipkinzipkinNodePort10.104.85.78<none>9411:30350/TCP23d
浏览器输入http://192.168.110.130:30350/打开zipkin界面 。文章插图
点击 + 按钮,选择
serviceName
和 frontend.online-boutique
。为了只得到至少一秒钟的响应(这就是我们的 perTryTimeout
),选择 minDuration
,在文本框中输入 1s 。点击RUN QUERY
搜索按钮,显示所有追踪 。文章插图
点击 Filter 按钮 , 从下拉菜单中选择
productCatalogService.online-boutique
。你应该看到花了 1 秒钟的 trace 。这些 trace 对应于我们之前定义的 perTryTimeout
。文章插图
点击
SHOW
文章插图
详细信息如下:
文章插图
运行
kubectl delete vs productcatalogservice
删除 VirtualService 。[root@k8scloude1 ~]# kubectl get virtualserviceNAMEGATEWAYSHOSTSAGEfrontend["frontend.online-boutique.svc.cluster.local"]6d15hfrontend-ingress["frontend-gateway"]["*"]24hproductcatalogservice["productcatalogservice.online-boutique.svc.cluster.local"]37mrecommendationservice["recommendationservice.online-boutique.svc.cluster.local"]113m[root@k8scloude1 ~]# kubectl delete virtualservice productcatalogservicevirtualservice.networking.istio.io "productcatalogservice" deleted[root@k8scloude1 ~]# kubectl get virtualserviceNAMEGATEWAYSHOSTSAGEfrontend["frontend.online-boutique.svc.cluster.local"]6d15hfrontend-ingress["frontend-gateway"]["*"]24hrecommendationservice["recommendationservice.online-boutique.svc.cluster.local"]114m
推荐阅读
- 九 前后端分离项目:实现"添加"功能(后端接口)
- 十一 Istio:向istio服务网格中引入虚拟机
- 四 SoringCloud -微信获取用户信息
- 九 Istio:istio安全之授权
- 快读《ASP.NET Core技术内幕与项目实战》WebApi3.1:WebApi最佳实践
- 五 Istio:使用服务网格Istio进行流量路由
- IQueryable和IEnumerable 快读《ASP.NET Core技术内幕与项目实战》EFCore2.5:集合查询原理揭秘
- 二 Istio:在Kubernetes(k8s)集群上安装部署istio1.14
- 19 基于.NetCore开发博客项目 StarBlog - Markdown渲染方案探索
- 项目案例使用有效 解决ffmpeg的播放摄像头的延时优化问题