Skip to content

微服务限流漏桶算法令牌桶算法

一、核心概念:微服务限流

1. 什么是限流

限流指对进入系统的请求流量进行管控,按照预设规则限制请求数量与访问速率,避免瞬时高并发、恶意请求超出系统承载上限。

2. 限流的核心作用

  • 抵御突发流量、流量洪峰,防止服务被压垮
  • 拦截爬虫、恶意刷接口等非法请求,合理分配系统资源
  • 保障核心业务优先运行,提升整体服务稳定性
  • 实现流量削峰,平滑流量波动

3. 常见限流层级

  • 接入层:Nginx 全局流量限流
  • 网关层:Spring Cloud Gateway 统一入口限流
  • 应用层:业务接口、单机本地限流

二、主流限流算法原理

1. 漏桶算法

请求如同水流持续进入漏桶,漏桶会以固定恒定速率向外流出请求进行处理;当桶内请求堆满后,新到来的请求直接被拒绝或丢弃。

  • 核心特点:强制请求匀速处理,流量绝对平滑
  • 短板:无法应对短时间突发流量
  • 典型应用:Nginx 速率限流、连接数限流

2. 令牌桶算法

系统按照固定速率向令牌桶内生成并放入令牌,请求执行前必须获取一枚令牌;桶存在最大容量,装满后不再新增令牌。

  • 核心特点:可积攒令牌,允许短时间突发流量
  • 优势:兼顾常规流量管控与突发场景
  • 典型应用:Spring Cloud Gateway、Sentinel、Guava RateLimiter

三、漏桶算法与令牌桶算法对比

1. 共同点

  • 均为业界主流流量控制算法,用于限制请求访问速率
  • 都具备流量削峰、保护后端服务的能力

2. 核心区别

特性漏桶算法令牌桶算法
流量输出固定速率流出,强制匀速可使用存量令牌,支持突发流量
突发流量不支持支持
流量灵活性较低较高
主要使用场景网关前置、Nginx 接入层限流微服务网关、业务接口限流
代表组件NginxSpring Cloud Gateway、Sentinel

四、面试相关问题

  1. 问:什么是限流?微服务中为什么要做限流?答: 限流就是管控请求的访问速率与数量。微服务架构下服务节点多、调用链路复杂,瞬时高并发或恶意请求容易造成服务雪崩,限流可以保护服务不被压垮,合理分配资源,保障业务正常运行。

  2. 问:简述漏桶算法的原理和特点答: 请求不断进入漏桶,漏桶以固定速率处理请求,桶满则拒绝新请求。该算法能将流量完全平滑,保证下游服务接收匀速请求,但无法处理突发流量。

  3. 问:简述令牌桶算法的原理和特点答: 系统定时向桶中投放令牌,请求必须获取令牌才能执行,令牌桶有最大容量。该算法可以积攒令牌,允许短时间突发流量,灵活性更高,是微服务网关常用的限流算法。

  4. 问:漏桶算法和令牌桶算法最大区别是什么?答: 漏桶强制请求匀速处理,不支持突发流量;令牌桶可预存令牌,能够承接短时间的突发请求,二者适用的限流场景也有所区分。

Powered by VitePress 1.6.4 | 持续更新中