✅限流、降级、熔断有什么区别?

典型回答

限流、降级和熔断是三种常用的系统稳定性策略,它们在高并发和高负载的场景下尤为重要。通常我们说为了保证系统的可用性,限流、降级、熔断一把梭,但是其实他们是三个不太相同的概念,作用也不太一样。

限流

限流的目的是控制系统的并发流量,通过限制请求流量的手段防止过度的流量导致系统崩溃。一般用于应对突发流量高峰。


✅什么是限流?常见的限流算法有哪些?


一般是被调用方对调用方进行限流。举个例子,我提供了一个查询用户信息的服务,给集团内外的很多个调用方使用,但是我为了保证我的可用性,我会对每个调用方做限流,防止某个调用方不守规矩,把我的服务打挂了。

当然,也有在服务端给客户端直接做限流的,一般用于外部服务能力不太行的时候,比如电商网站大促的时候,可能会依赖很多银行的服务,但是银行服务本身可能没那么高的并发, 所以可能在电商网站上自己控制一下QPS,来起到限流的目的,避免下游系统被打挂

降级

降级是当系统负载过高时,主动关闭一些非核心功能,以确保核心功能的正常运行。一般用于在系统资源有限或响应时间过长时,通过降低服务质量保障核心服务。

✅什么是服务降级?

举个例子,双十一大促期间,淘宝上面会把退款功能关闭,这就是一种降级手段,通过把一些非核心功能降级掉来保证核心功能可用。或者在某次腾讯视频挂了的时候,用户名称默认显示腾讯用户,这也是一种降级方式,用兜底名称做展示.

降级可以做在客户端,也可以做在服务端,比如关闭部分非核心功能的话,可以直接把入口关掉,及服务端直接下掉入口。也可以客户端直接返回兜底逻辑,不做业务逻辑处理起到降级的目的。

熔断

熔断是为了防止系统因某个服务的故障而整体崩溃,类似于电路的熔断器。在检测到下游服务异常时,自动停止向该服务发送请求,并在一定时间后尝试恢复。

✅什么是熔断?

熔断一般发生在调用方,举个例子,当电商平台上用户支付时,收银台发现某个支付渠道,如微信支付失败率突增,超时严重,那么就可以临时把这个支付方式熔断掉。

限流 降级 熔断
目的 控制系统的流量,防止过度的流量导致系统崩溃。 主动关闭一些非核心功能,以确保核心功能的正常运行。 防止系统因某个服务的故障而整体崩溃,类似于电路的熔断器。
手段 各种限流算法:滑动窗口、漏桶、令牌桶 开关;通过开关控制某些功能直接被降级。 熔断器
工具 Sentinel Sentinel Sentinel
示例 我提供了一个查询用户信息的服务,给集团内外的很多个调用方使用,但是我为了保证我的可用性,我会对每个调用方做限流,防止某个调用方不守规矩,把我的服务打挂了。 双十一大促期间,淘宝上面会把退款功能关闭某次腾讯视频挂了的时候,用户名称默认显示腾讯用户,这也是一种降级方式,用兜底名称做展示 当电商平台上用户支付时,收银台发现某个支付渠道,如微信支付失败率突增,超时严重,那么就可以临时把这个支付方式熔断掉。
发起方 被调用方(客户端)/调用方(服务端) 被调用方(客户端)/调用方(服务端) 调用方(服务端)

原文: https://www.yuque.com/hollis666/xkm7k3/etgovbs6bgphlqso