熔断_降级_限流

# 基础知识 ## 什么是熔断? > <font color='blue'>**如果微服务A调用微服务B, 恰好此时微服务B宕机了或网络分区故障, 会导致Fegin调用的不断重试**</font> > <font color='pink'>**Feign的不断重复调用, 会导致当前这个功能的耗时变长, 不仅占用系统资源, 还会导致吞吐量的下降, 因此, 当某个微服务或网络出现问题的时候, 我们需要给一个备用方案**</font> > <font color="red">**为了解决这个问题, 当调用的另一个微服务网络或其出现问题的时候, 我们可以返回一个默认的解决方案的结果, 来替代这次远程, 这就被成为熔断**</font> ### 进一步理解 > <font color="orange">**熔断是因为网络或者被调用方出现问题, 调用方不得不采取的一种策略, 熔断是被动触发的**</font> > <font color="green">**使用熔断的目的是为了避免整条调用链路的级联崩溃, 即有可能某个功能需要调用多个微服务, 如果某个调用出现了问题, 不断重试会使整个调用链路级联崩溃**</font> ## 什么是降级? > ~~**如果秒杀微服务压力巨大, 而auth授权认证微服务压力很小, 几乎不用, 那么我们就可以主动下线授权认证为服务, 把他所占有的资源让给秒杀微服务, 这被称为降级**~~ > <font color="blue">**如果微服务A调用微服务B, 如果调用过程中异常比例, 异常数或RT达到一定的阈值, 调用方不满意, 就可以主动将被调用发下线, 之后再也不调了**</font> > <font color="blue">**同理上述场景, 如果被调用方觉得自己的RT, 异常比例, 异常数达到一定阈值, 自己把自己下线了**</font> ### 进一步理解 > <font color="orange">**降级和熔断最大的区别是主动和被动, 如果调用方设置了降级, 那么是调用方主动切断与被调用方的联系, 即被调用方下线了, 走熔断逻辑, 反之, 如果被调用方设置了降级, 即自己切断与调用方的联系, 即自己给自己限流了, 走流控逻辑**</font> ## 什么限流 > <font color="blue">**如果秒杀服务的流量过大, 我们可以对流量进行限制, 这个限制就是限流**</font> ### 进一步理解 > <font color="orange">**限流是调用方, 具体是高流量的调用方觉得流量太高了, 主动对自己限制**</font> ## 总结! ### 为什么要熔断降级限流? > <font color="red">**熔断, 降级, 限流的最终目的都是为了保证微服务能正常的运行, 不会因为流量过高而崩溃, 增强微服务的抗压能力, 增强健壮性**</font> ### 熔断-降级的异同 #### 相同点 1. **最终, 某个功能会因为熔断或降级导致的不可用** 2. 能保证集群的大部分资源都能正常运行, 防止崩溃, 增强系统稳定性 #### 不同点 1. **熔断是因为被调用方出现了问题, 不得不采取的备用策略, 被动的** 2. **降级是因为调用方或被调用方主动关闭, 把资源让出来, 主动的** ## 额外说明 ### 降级的特别说明 > **一般降级都是由调用发发起的** #### 被调用方发起降级的优缺 ##### 优点 > 如果被调用方发起的降级, 那么无论什么情况都会访问被调用方, 然后返回一个流控结果, 不停机运行 ##### 缺点 > 需要真正的调用被盗用方, 需要时间和资源开销 #### 调用方发起降级的优缺 ##### 优点 > 如果是调用发发起的降级, 相当于直接把这个微服务下线了(对于降级的调用方而言), 那么, 最终不会去调用该微服务, 直接走熔断逻辑, **省去了调用所需要的时间和资源开销** ##### 缺点 > 因为切断了对方, 因此, 不会调用对方, 相当于对方停机了 ### 总结 > **如果调用方发起的降级, 走熔断逻辑** > **如果被调用方发起的降级, 走流控逻辑** > <font color="red">**综上所述, 最优选应该是调用方发起降级**</font>