设置请求超时
请求超时
文档: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
请求头即可。在这个请求头中的超时设置单位是毫秒而不是秒。