服务熔断机制和golang的实现
微服务集群中,每个应用基本都会依赖一定数量的外部服务。如果依赖服务过载,服务不可用的情况,在高并发场景下如果此时调用方不做任何处理,继续持续请求故障服务的话很容易引起整个微服务集群雪崩。
所以应该采用熔断的策略,不再调用下游服务。
首先先区分下熔断、限流、降级区别
限流
是针对服务请求数量的一种自我保护机制,当请求数量超出服务负载时,自动丢弃新的请求,是系统高可用架构的第一步。
熔断
是调用方自我保护的机制(客观上也能保护被调用方),熔断对象是外部服务。
降级
是被调用方(服务提供者)的防止因自身资源不足导致过载的自我保护机制,降级对象是自身。
触发条件 | 面向目标 | |
---|---|---|
限流 | 上游服务请求多 | 上游 |
熔断 | 下游服务不可用 | 下游 |
降级 | 服务自身负载高 | 自身 |