【问题标题】:How circuit is closed again?电路如何再次闭合?
【发布时间】:2018-12-28 06:04:54
【问题描述】:
我正在尝试了解 Hystrix。我了解当服务调用第 3 方服务并且该服务没有响应并且超出配置的阈值时,电路将打开并且后续呼叫将被短路。
但我无法理解电路是如何再次闭合的。让我们假设我们的服务正在调用 3rd 方服务,并且该服务无法正常工作,因此打开了电路。 5 分钟后,服务开始正常工作,现在电路应该关闭。调用服务如何知道第 3 方服务已经开始表现良好,现在应该关闭电路?
【问题讨论】:
标签:
architecture
microservices
hystrix
【解决方案1】:
实际上有三种状态:OPEN、CLOSED 和 HALF_OPEN。一旦断路器打开并且经过了一定的时间,它就会允许单个请求潜入。这是 HALF_OPEN 状态。如果成功,断路器将闭合,否则将返回 OPEN 状态,直到再次经过该时间量,再次进入 HALF_OPEN 状态。您可以使用 circuitBreaker.sleepWindowInMilliseconds 属性指定从 OPEN 转换到 HALF_OPEN 之间的时间量。
【解决方案2】:
考虑 Hytrix 断路器从 CLOSED 到 OPEN 的转换。它使针对该断路器的所有请求短路。
一段时间后 (HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds()) 下一个请求被允许通过
(这是半开状态)。
如果请求失败,断路器将在睡眠窗口期间返回 OPEN 状态。
所以,这个 HALF-OPEN 状态调用决定了是打开还是关闭电路。
如果请求成功,断路器将转换为 CLOSED 并且 1. 中的逻辑再次接管。结帐hystrix working.