Skip to content

version4:熔断器实现的小瑕疵 #39

@TheTurtle2020

Description

@TheTurtle2020

这个类:CircuitBreaker.java

针对 HALF_OPEN 状态。分析下面两处目前的逻辑:

  1. recordFailure 方法:只要失败了,就要被打回 OPEN 状态。因此接下来的请求必须每个都执行成功,才能回到 CLOSED 状态,那么设置 HALF_OPEN_SUCCESS_RATE 即成功率似乎没有意义?
  2. recordSuccess 方法:如果 requestCount == 1 即第 1 次请求就成功了,那么成功率直接 100%,进而直接就会变成 CLOSED 状态,似乎有点武断。

个人观点:依然是 HALF_OPEN 状态

  1. 无论接下来的请求成功与否,requestCount++。
  2. 如果失败了,recordFailure 不应该直接回到 OPEN,仅记录失败时间即可。
  3. 如果成功了,recordSuccess 记录 successCount,并且设置一个最小 requestCounnt 数量如 HALF_OPEN_MIN_REQUEST_COUNT,防止第 1 次请求成功就侥幸溜走,但是后续又大量失败造成不必要的压力(虽然依然可以触发熔断)。

PS:提 issue 的时候还未编码实现,只是发现逻辑似乎有点问题。以上是目前个人的直观思路,若分析无误后续会提 PR。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions