做为本文的前言,首先向读者介绍一下降级、熔断和限流的概念与关系。也许很多人对此,早已谙熟于心,但是烦请允许我再啰嗦几句,方便第一次接触该领域的小伙伴们,都可以的理解消化本文。
所谓限流,本质就是对系统的被请求频率以及内部的部分功能的执行频率加以限制,防止因突发的流量激增,导致整个系统不可用。当流量出现激增,触发限流,那么对于那些系统暂时不想或无法处理的“流量”,我们该如何处理呢?这就自然引出了服务降级的概念,其本质就是提供降低系统正常运行所能提供的功能数,亦或是降低某些功能完成的完整度(质量)。而熔断就是众多降级手段中最常见的一种,其在流量过大时(或下游服务出现问题时),可以自动断开与下游服务的交互,并可以通过自我诊断下游系统的错误是否已经修正,或上游流量是否减少至正常水平,来恢复自我恢复。
简而言之,限流是从系统的流量入口考虑,从进入的流量上进行限制,达到保护系统的作用;降级,是从系统内部的平级服务或者业务的维度考虑,流量大了,可以干掉一些,保护其他正常使用;熔断强调的是服务之间的调用能实现自我恢复的状态;
Hystrix的golang版本项目地址是:
https://github.com/afex/hystrix-go Hystrix是Netflix开源的一个限流熔断的项目、主要有以下功能:
项目地址为:
https://github.com/sony/gobreaker gobreaker是索尼的开源的一个限流熔断的项目,是基于《微软云设计模式》一书中的熔断器模式的 Golang 实现的,本质利用的还是原子计数法、主要有以下功能: