超时和重试在 Istio 中如何协同工作?

lle*_*viy 2 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)
Run Code Online (Sandbox Code Playgroud)

怎么运行的?该文档没有为这个问题提供明确的答案。我有三个猜测:

  1. 超时始终为 8 秒(超时覆盖 perTryTimeout)。
  2. 超时始终为 3 秒(perTryTimeout 覆盖超时)。
  3. 初始调用的超时为 8 秒,重试的超时为 3 秒(与文档相矛盾。文档说 perTryTimeout 包括初始调用和任何重试)。
  4. 每次尝试的超时始终为 3 秒(包括初始调用),但所有尝试的总超时为 8 秒。

OhH*_*ark 7

这是对的:

  1. 每次尝试的超时始终为 3 秒(包括初始调用),但所有尝试的总超时为 8 秒。

它的基本意思是:

  • 如果尝试花费的时间超过 3 秒,则该尝试将被标记为失败。

  • 最多有 3 次尝试。

  • 尝试成功的总体等待时间不会超过8秒。

perTryTimeout*retries不应超过全局timeout。如果是这样,超出全局超时范围的重试尝试将被忽略。