设置请求超时

本文内容基于 流量转移


经过 流量转移 的配置,下面是请求的流程:

productpage → reviews:v3 → ratings

请求超时

http 请求的超时可以用路由规则的 timeout 字段来指定。默认情况下,超时是禁用的。这里把 reviews 服务的超时设置为 1 秒。为了观察效果,还需要在对 ratings 服务的调用上人为引入 2 秒的延迟。

  • 将所有流量路由到各个微服务的 v1 版本:
kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml

在这里插入图片描述

此时不管刷新多少次,页面的评论部分都不会显示评级星号。因为 Istio 已经将 reviews 服务的所有流量都路由到了 reviews:v1 版本,而该版本的服务不会访问带星级的 ratings 服务。

  • 将请求路由到 reviews 服务的 v2 版本,它会发起对 ratings 服务的调用:
vim samples/bookinfo/networking/virtual-service-reviews-v2.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v2
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-v2.yaml

在这里插入图片描述

可以看到,此时一直刷新页面,只会显示 v2 版本的 reviews(黑色星型),不区分任何用户。

  • 给对 ratings 服务的调用添加 2 秒的延迟:
vim samples/bookinfo/networking/virtual-service-ratings-delay-v1.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  http:
  - fault:
      delay:
        percent: 100
        fixedDelay: 2s
    route:
    - destination:
        host: ratings
        subset: v1
kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-delay-v1.yaml

在这里插入图片描述

此时,不管刷新多少次页面,评论部分一直是 reviews:v2 版本的效果(显示黑色星形),但每次刷新页面都会有 2 秒的延迟。因为 Istio 已经给 reviewsratings 服务的调用添加了 2 秒的延迟。

  • 给对 reviews 服务的调用增加一个 0.5 秒的请求超时:
vim samples/bookinfo/networking/virtual-service-reviews-delay-v2.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v2
    timeout: 0.5s
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-delay-v2.yaml

在这里插入图片描述

此时再去刷新页面,可以看到 1 秒钟就会返回,而不是之前的 2 秒钟,但 reviews 是不可用的。因为 productpagereviews 服务的调用的请求超时只有 0.5 秒。而 reviewsratings 服务的调用有 2 秒的延迟,因此 productpagereviews 服务的调用是必定超时的,此时 reviews 不可用。

即使超时配置为 0.5 秒,响应仍需要 1 秒,是因为 productpage 服务中存在硬编码重试,因此它在返回之前调用 reviews 服务超时两次。

使用 Istio 为对 reviews 微服务的调用配置了 0.5 秒的请求超时。默认情况下请求超时是禁用的。reviews 服务在处理请求时会接着调用 ratings 服务,而 Istio 在对 ratings 的调用中注入了 2 秒钟的延迟,这样就让 reviews 服务要花费超过 0.5 秒的时间来完成调用,因此可以观察到超时。

可以观察到,Bookinfo 的页面(调用 reviews 服务来生成页面)没显示评论,而是显示了消息:Sorry, product reviews are currently unavailable for this book.,这就是它收到了来自 reviews 服务的超时错误信息。


Guess you like

Origin blog.csdn.net/miss1181248983/article/details/117262206