跳转至

设置请求超时

请求超时

文档:https://istio.io/latest/zh/docs/tasks/traffic-management/

不同编程语言都会提供 http client 类库,程序发起 http 请求时,程序本身一般都会有超时时间,超过这个时间,代码会抛出异常。例如网关如 nginx、apisix 等,也有 http 连接超时的功能。

在 Istio 中,服务间的调用由 Istio 进行管理,可以设置超时断开。

可以为 reviews 服务设置 http 入口超时时间,当其它服务请求reviews 服务时,如果 http 请求超过 0.5s,那么 Istio 立即断开 http 请求。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v2
    timeout: 0.5s

因为 reviews 依赖于 ratings 服务,为了模拟这种超时情况,可以给 ratings 注入延迟故障。这样 ratings 会给所有请求都延迟 2s 才会返回响应,但是 reviews 要求所有请求 reviews 的流量在 0.5s 内响应。

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

除了在路由规则中进行超时设置之外,还可以进行请求一级的设置,只需在应用的对外请求中加入 x-envoy-upstream-rq-timeout-ms 请求头即可。在这个请求头中的超时设置单位是毫秒而不是秒。