在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因服务提供者的不可用导致服务消费者的不可用,并将不可用逐渐放大的过程。
如果下图所示:A 作为服务提供者,B 为 A 的服务消费者,C 和 D 是 B 的服务消费者。A 不可用引起了 B 的不可用,并将不可用像滚雪球一样放大到 C 和 D 时,雪崩效应就形成了。
另外,在 A 不可用的情况下,由于 B 的重试会放大 A 的请求量,使 A 更加难以恢复。

熔断器模式可以有效防止对故障服务的不断重试,可以使服务调用者继续执行,不用等待错误的修正,或者浪费 CPU 等待超时发生。熔断器模式也可以使应用程序能够诊断错误是否已经修正,如果已经修正,应用程序会再次尝试调用操作。
熔断器模式为远程服务提供的关键能力:

熔断器状态机
| 对比项/框架 | sony/gobreaker | rubyist/circuitbreaker | mercari/go-circuitbreaker |
|---|---|---|---|
| Stars | 1.1k | 867 | 193 |
| Forks | 79 | 94 | 7 |
| Issues Opened | 4 | 10 | 1 |
| Issues Closed | 9 | 15 | 0 |
| Last Updated | 2019-11-25 | 2019-10-21 | 2019-12-27 |
| Latest Version | v0.4.1 | v2.2.1 | / |
| Complexity | Easy | Complex | Middle |
| CancelContext Support | No | Yes | Yes |
| Deadline Support | No | Yes | Yes |
| Panel Support | No | Yes | No |
| External Call Support | No | Yes | Yes |
优点:
缺点:
github.com/rubyist/circuitbreaker
优点:
缺点:
github.com/mercari/go-circuitbreaker
优点:
缺点:
个人倾向于选择 github.com/rubyist/circuitbreaker。
暂时没有留言