Golang 的熔断器调研

技术 Golang

什么是雪崩效应?

在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因服务提供者的不可用导致服务消费者的不可用,并将不可用逐渐放大的过程。

如果下图所示:A 作为服务提供者,B 为 A 的服务消费者,C 和 D 是 B 的服务消费者。A 不可用引起了 B 的不可用,并将不可用像滚雪球一样放大到 C 和 D 时,雪崩效应就形成了。

另外,在 A 不可用的情况下,由于 B 的重试会放大 A 的请求量,使 A 更加难以恢复。

image.png

熔断器

概念

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

能力

熔断器模式为远程服务提供的关键能力:

实现

image.png
熔断器状态机

熔断器的选型

对比项/框架sony/gobreakerrubyist/circuitbreakermercari/go-circuitbreaker
Stars1.1k867193
Forks79947
Issues Opened4101
Issues Closed9150
Last Updated2019-11-252019-10-212019-12-27
Latest Versionv0.4.1v2.2.1/
ComplexityEasyComplexMiddle
CancelContext SupportNoYesYes
Deadline SupportNoYesYes
Panel SupportNoYesNo
External Call SupportNoYesYes

github.com/sony/gobreaker

优点:

缺点:

github.com/rubyist/circuitbreaker

优点:

缺点:

github.com/mercari/go-circuitbreaker

优点:

缺点:

个人倾向于选择 github.com/rubyist/circuitbreaker

创建于2020年04月20日 14:18
阅读量 145
留言列表

暂时没有留言

添加留言