欢迎光临
我们一直在努力

程序员阿亮带你认识服务限流、降级、熔断

大家好,这里是程序员阿亮,今天来给大家讲解一下咱们平时在学习分布式或者面对分布式场景、项目时经常会遇到的几个词—-限流、熔断、降级


前言

在构建高可用的分布式系统时,限流、熔断、降级是三个至关重要的稳定性保障机制。它们如同系统的三道防线,共同守护着服务的稳定运行。

一、限流

1.1 限流是什么

限流是指对系统的请求量进行限制,防止系统被突发流量冲垮。

在高并发场景下,防止大量的请求瞬间耗尽服务器资源,让服务器宕机,也可以防止一些恶意的流量攻击。

一般是被调用者对调用者进行限流,比如说我们有一个服务,我们提供给我们公司里面多个项目去调用,为了保证这个服务的可用性,我们会对每个调用方进行限流,防止突发流量打爆我们的服务器。

1.2 常见限流算法

实际上常见的限流算法在我的其他博客有讲解

限流算法

大家可以通过这篇文章仔细学习这些算法。

实际上常见的算法有令牌限流、桶限流、固定窗口限流、滑动窗口限流等,这里不过多叙述。

二、熔断

2.1 熔断是什么

熔断机制类似于电路保险丝,当服务调用失败率达到一定阈值时,自动切断服务调用,避免故障扩散。熔断的核心目标是快速失败或者返回降级结果,防止雪崩效应。

雪崩(Avalanche Effect) 在微服务架构中,是指由单个服务故障引发的一系列连锁反应,最终导致整个系统瘫痪的现象。

就好像我们在微服务里面有一个调用链,下游的服务无法提供正常服务,上游又有大量的请求打来,这样上游的请求堆积,线程耗尽,就这样逐级传播,最终整个服务都瘫痪了,这就是雪崩。

熔断的重要性:

  • 快速失败,减少等待时间
  • 防止故障扩散,保护调用方
  • 给故障服务恢复的时间
  • 提供降级方案,保证核心业务

2.2 熔断器的状态机

熔断器通常有三种状态:

  • 关闭状态(Closed): 正常调用服务,统计失败率
  • 打开状态(Open): 达到失败阈值,拒绝所有请求
  • 半开状态(Half-Open): 尝试恢复,允许部分请求通过
  • 三、降级

    3.1 降级是什么

    降级是指在系统压力过大或部分服务不可用时,暂时关闭或简化某些非核心功能,保证核心业务的正常运行。降级的核心目标是牺牲部分功能,保障系统整体可用性。

    降级的重要性:

    • 保证核心业务的可用性
    • 提升系统整体稳定性
    • 为故障恢复争取时间
    • 提供更好的用户体验

    就好像在双十一的购物节上,淘宝会在高峰期把退款功能关闭,这就是一种降级

    某次腾讯视频挂了之后,用户名默认显示腾讯用户,这也是一种降级

    一般都是在流量高压期把非核心业务先关闭,为核心抗压服务提供资源的一种做法,在高压期结束后再恢复。

    总结

    目的

    控制系统的流量,防止过度的流量导致系统崩溃。

    主动关闭一些非核心功能,以确保核心功能的正常运行。

    防止系统因某个服务的故障而整体崩溃,类似于电路的熔断器(快速失败保护)。

    手段

    各种限流算法:滑动窗口、漏桶、令牌桶

    开关;通过开关控制某些功能直接被降级。

    熔断器机制(如 Circuit Breaker):基于错误率/超时率自动熔断,支持半开状态恢复检测。

    工具

    Sentinel

    Sentinel

    Sentinel(也支持 Hystrix、Resilience4j 等)

    示例

    查询用户信息服务对每个调用方做限流,防止单一调用方不守规矩拖垮服务。

    • 双十一期间淘宝关闭退款功能 • 腾讯视频挂了时,用户名默认显示“腾讯用户”(兜底展示)

    电商平台支付时,若微信支付失败率突增、超时严重,临时熔断该支付渠道。

    发起方

    被调用方(服务端) / 调用方(客户端)

    被调用方(服务端) / 调用方(客户端)

    调用方(客户端)——由下游服务的调用端主动触发熔断判断与隔离

    实际上限流熔断降级都是系统在高并发、高负载场景下的保护策略,在生产环境中,这三者往往协同工作:限流保护系统不被打满,熔断隔离故障服务,降级确保核心体验。只有将它们有机结合,才能构建真正高可用的分布式系统。

    赞(0)
    未经允许不得转载:171主机测评 » 程序员阿亮带你认识服务限流、降级、熔断
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址