超时和重试如何在 Istio 中协同工作?
How timeout and retries works together in Istio?
这里是 VirtualService 的例子,同时使用超时和重试。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sa-logic
spec:
hosts:
- sa-logic
http:
- route:
- destination:
host: sa-logic
subset: v1
weight: 50
- destination:
host: sa-logic
subset: v2
weight: 50
timeout: 8s
retries:
attempts: 3
perTryTimeout: 3s # perTryTimeout (3s) is different from timeout above (8s)
它是如何工作的?该文档没有对此问题提供明确的答案。
我有三个猜测:
- 超时始终为 8 秒(超时覆盖 perTryTimeout)。
- 超时总是 3 秒(perTryTimeout 覆盖超时)。
- 初始调用的超时为 8 秒,重试的超时为 3 秒(与文档相矛盾。文档说 perTryTimeout 包括初始调用和任何重试)。
- 每次尝试的超时始终为 3 秒(包括初始调用),但所有尝试的总超时为 8 秒。
这是正确的:
- Timeout per try always 3s (including initial call), but the total timeout for all attempts is 8s.
基本意思是:
如果尝试时间超过 3 秒,则将其标记为失败。
最多尝试 3 次。
成功尝试的总等待时间不会超过 8 秒。
perTryTimeout
* retries
不应超过全局 timeout
。如果是,超出全局超时的重试尝试将被忽略。
这里是 VirtualService 的例子,同时使用超时和重试。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sa-logic
spec:
hosts:
- sa-logic
http:
- route:
- destination:
host: sa-logic
subset: v1
weight: 50
- destination:
host: sa-logic
subset: v2
weight: 50
timeout: 8s
retries:
attempts: 3
perTryTimeout: 3s # perTryTimeout (3s) is different from timeout above (8s)
它是如何工作的?该文档没有对此问题提供明确的答案。 我有三个猜测:
- 超时始终为 8 秒(超时覆盖 perTryTimeout)。
- 超时总是 3 秒(perTryTimeout 覆盖超时)。
- 初始调用的超时为 8 秒,重试的超时为 3 秒(与文档相矛盾。文档说 perTryTimeout 包括初始调用和任何重试)。
- 每次尝试的超时始终为 3 秒(包括初始调用),但所有尝试的总超时为 8 秒。
这是正确的:
- Timeout per try always 3s (including initial call), but the total timeout for all attempts is 8s.
基本意思是:
如果尝试时间超过 3 秒,则将其标记为失败。
最多尝试 3 次。
成功尝试的总等待时间不会超过 8 秒。
perTryTimeout
* retries
不应超过全局 timeout
。如果是,超出全局超时的重试尝试将被忽略。