2

我有一个使用 Istio 1.7.4 在 kubernets 上运行的应用程序(基于微服务)

微服务有自己的集成失败事务补偿机制。

但是当某些集成有 503 状态码响应时,Istio 正在重试请求。我需要禁用它(至少在 POST 上,这是非同质的)。

并让应用程序处理它。

但是我尝试了很多方法都没有成功。有人能帮我吗?

4

1 回答 1

0

文档

重试间隔(25ms+)是可变的,由 Istio 自动确定,防止被调用的服务被请求淹没。HTTP 请求的默认重试行为是在返回错误之前重试两次。

顺便说一句,它最初是 10,但在Enable retries for specific status codes 中减少到 2,并将 num retries 减少到 2 commit。

  • 解决方法是使用虚拟服务

您可以在虚拟服务中针对每个服务调整重试设置,而无需修改服务代码。您还可以通过添加每次重试超时来进一步优化您的重试行为,指定您希望等待每次重试尝试成功连接到服务的时间量。


例子

  1. 以下示例在初始调用失败后配置最多 3 次重试以连接到此服务子集,每次重试时间为 2 秒。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  http:
  - route:
    - destination:
        host: ratings
        subset: v1
    retries:
      attempts: 3
      perTryTimeout: 2s
  1. 你的情况。禁用重试。取自全局禁用默认重试策略
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: no-retries-for-one-service
spec:
  hosts:
  - one-service.default.svc.cluster.local
  http:
  - retries:
      attempts: 0
    route:
      - destination:
          host: one-service.default.svc.cluster.local
于 2021-03-22T11:34:31.720 回答