限流、降级、熔断的区别和应用场景

限流、降级、熔断在概念、目的、实现方式和应用场景上都存在区别,以下是具体介绍:

区别

概念
  • 限流:通过对系统请求进行限制,控制单位时间内进入系统的请求量,确保系统不会因流量过载而崩溃。

  • 降级:当系统资源不足,或者某些非核心服务出现故障时,主动降低系统的服务质量,关闭一些非核心功能或返回兜底数据,保证核心功能的正常运行。

  • 熔断:当某个服务调用出现大量失败(如超时、异常等)时,熔断器就会"熔断",后续对该服务的请求不再直接发起调用,而是快速返回一个默认的响应,防止故障扩散。

目的
  • 限流:预防系统过载,从源头控制流量,保证系统的可用性和稳定性,避免因瞬间流量过大压垮系统。

  • 降级:在资源紧张或部分服务故障时,牺牲部分非关键功能,保障核心业务的稳定运行,提升用户在极端情况下的基本体验。

  • 熔断:隔离故障服务,避免因一个服务的故障影响到其他服务,最终导致整个系统出现级联故障,保障系统整体的稳定性。

实现方式
  • 限流:常见的有限制总并发数(如设置Tomcat最大连接数)、使用令牌桶算法(按照固定速率往桶里添加令牌,请求需要获取到令牌才能被处理)、漏桶算法(请求像水流进漏桶一样进入系统,以固定速率流出,超出桶容量的请求被丢弃)、滑动窗口算法(将时间划分为多个窗口,统计每个窗口内的请求数量,当请求数超过阈值时进行限流) 等。

  • 降级:一般通过配置开关来控制,在特定条件触发时,切换开关状态,关闭相关功能。例如,在代码中设置一个布尔类型的开关变量,当系统内存使用率超过80%时,将开关设置为关闭,停止某些非核心功能的调用。

  • 熔断:熔断器通常有三种状态,关闭状态(正常调用服务)、打开状态(快速失败,不调用实际服务,直接返回默认响应)、半打开状态(尝试恢复调用,允许部分请求通过来检测服务是否恢复正常 )。通过记录服务调用的失败次数、超时次数等指标,当达到预设的阈值时,将熔断器状态切换为打开,之后根据一定规则进入半打开状态进行试探。

应用场景

限流

  • 高并发的电商秒杀活动:例如在"双11"零点抢购时,大量用户同时涌入系统抢购商品,通过限流可以控制每秒进入抢购系统的请求数量,避免因瞬间流量过大导致系统崩溃,保证抢购活动能够有序进行。

  • API接口访问控制:对于一些开放给第三方开发者的API,为了防止某个开发者的应用过度调用接口,占用过多资源,会对每个API Key设置调用频率限制,比如每分钟最多调用1000次。

降级

  • 电商大促期间:当系统负载过高时,关闭商品评论加载、图片高清展示等非核心功能,优先保证商品浏览、下单支付等核心功能的可用性,让用户能够顺利完成购物流程。

  • 视频播放平台:在网络带宽不足或者服务器资源紧张时,降低视频的清晰度,从高清切换为标清甚至流畅画质,保证视频能够正常播放,避免出现卡顿或无法播放的情况。

熔断

  • 微服务架构中服务调用:比如在一个电商微服务系统中,订单服务调用库存服务获取商品库存信息,如果库存服务因为网络故障或者自身业务逻辑问题,导致订单服务调用连续多次失败,此时订单服务中的熔断器就会熔断,后续请求不再调用库存服务,而是直接返回库存查询失败的提示信息,避免订单服务因一直等待库存服务响应而被拖垮,进而影响整个电商系统的正常运行。

  • 第三方支付服务调用:当电商系统调用第三方支付接口进行支付操作时,若频繁出现支付超时或支付接口返回错误,为了不影响用户下单流程,系统会熔断对该支付接口的调用,提示用户更换支付方式,保障下单业务的正常流转。

相关推荐
kimi70413 小时前
HTTP的持续与非持续连接,HTTP报文格式
网络·网络协议·http
一只乔哇噻13 小时前
java后端工程师进修ing(研一版‖day49)
java·开发语言
稻草猫.13 小时前
Java线程安全:volatile与wait/notify详解
java·后端·idea
知北游天13 小时前
Linux网络:使用UDP实现网络通信(服务端&&客户端)
linux·网络·udp
半桔13 小时前
【网络编程】TCP 粘包处理:手动序列化反序列化与报头封装的完整方案
linux·网络·c++·网络协议·tcp/ip
ZeroNews内网穿透14 小时前
新版发布!“零讯”微信小程序版本更新
运维·服务器·网络·python·安全·微信小程序·小程序
<但凡.14 小时前
Linux 修炼:进程控制(一)
linux·运维·服务器·bash
无敌最俊朗@14 小时前
MQTT 关键特性详解
java·前端·物联网
JAVA学习通14 小时前
微服务项目->在线oj系统(Java-Spring)----[前端]
java·开发语言·前端
拾贰_C14 小时前
【SpringBoot】前后端联动实现条件查询操作
java·spring boot·后端