【发布时间】:2021-01-07 17:15:29
【问题描述】:
我有两个服务 A 和 B,以这种方式向第三个服务 C 发起请求:A-->C 和 B-->C
C 配置了 Istio,其目标规则配置了断路器模式(异常值检测)。当 C 响应一系列连续的 5xx 错误时,断路器会打开,并且从这一刻起收到 503 服务不可用。
在对 C 的调用中,我使用查询参数来指示是否要模拟错误 500。
我认为一旦电路打开,无论来源如何,它都会为所有呼叫打开,但是当 B 使用标志调用 C 以模拟错误 500 时,它开始接收 503 而 A 继续接收 200 OK !!!如果我现在配置 A 调用带有标志的 C 以模拟错误 500,它开始接收 503。似乎打开电路取决于谁进行调用,这是预期的行为吗?
【问题讨论】:
-
Istio 使用 Envoy 来实现这些功能,只是为了增加一些清晰度,
circuit breaking和outlier detection在 Envoy 中是两个不同的东西。连续的 5xx 是 outlier detection 而不是 circuit breaking 的一部分。无论如何,这两者都具有何时允许通信以及何时不允许通信的配置。对于异常值检测,基础弹出时间为 30s,因此 30s 之后的任何调用都将是 200
标签: istio envoyproxy circuit-breaker