主题切换
微服务限流漏桶算法令牌桶算法
一、核心概念:微服务限流
1. 什么是限流
限流指对进入系统的请求流量进行管控,按照预设规则限制请求数量与访问速率,避免瞬时高并发、恶意请求超出系统承载上限。
2. 限流的核心作用
- 抵御突发流量、流量洪峰,防止服务被压垮
- 拦截爬虫、恶意刷接口等非法请求,合理分配系统资源
- 保障核心业务优先运行,提升整体服务稳定性
- 实现流量削峰,平滑流量波动
3. 常见限流层级
- 接入层:Nginx 全局流量限流
- 网关层:Spring Cloud Gateway 统一入口限流
- 应用层:业务接口、单机本地限流
二、主流限流算法原理
1. 漏桶算法
请求如同水流持续进入漏桶,漏桶会以固定恒定速率向外流出请求进行处理;当桶内请求堆满后,新到来的请求直接被拒绝或丢弃。
- 核心特点:强制请求匀速处理,流量绝对平滑
- 短板:无法应对短时间突发流量
- 典型应用:Nginx 速率限流、连接数限流
2. 令牌桶算法
系统按照固定速率向令牌桶内生成并放入令牌,请求执行前必须获取一枚令牌;桶存在最大容量,装满后不再新增令牌。
- 核心特点:可积攒令牌,允许短时间突发流量
- 优势:兼顾常规流量管控与突发场景
- 典型应用:Spring Cloud Gateway、Sentinel、Guava RateLimiter
三、漏桶算法与令牌桶算法对比
1. 共同点
- 均为业界主流流量控制算法,用于限制请求访问速率
- 都具备流量削峰、保护后端服务的能力
2. 核心区别
| 特性 | 漏桶算法 | 令牌桶算法 |
|---|---|---|
| 流量输出 | 固定速率流出,强制匀速 | 可使用存量令牌,支持突发流量 |
| 突发流量 | 不支持 | 支持 |
| 流量灵活性 | 较低 | 较高 |
| 主要使用场景 | 网关前置、Nginx 接入层限流 | 微服务网关、业务接口限流 |
| 代表组件 | Nginx | Spring Cloud Gateway、Sentinel |
四、面试相关问题
问:什么是限流?微服务中为什么要做限流?答: 限流就是管控请求的访问速率与数量。微服务架构下服务节点多、调用链路复杂,瞬时高并发或恶意请求容易造成服务雪崩,限流可以保护服务不被压垮,合理分配资源,保障业务正常运行。
问:简述漏桶算法的原理和特点答: 请求不断进入漏桶,漏桶以固定速率处理请求,桶满则拒绝新请求。该算法能将流量完全平滑,保证下游服务接收匀速请求,但无法处理突发流量。
问:简述令牌桶算法的原理和特点答: 系统定时向桶中投放令牌,请求必须获取令牌才能执行,令牌桶有最大容量。该算法可以积攒令牌,允许短时间突发流量,灵活性更高,是微服务网关常用的限流算法。
问:漏桶算法和令牌桶算法最大区别是什么?答: 漏桶强制请求匀速处理,不支持突发流量;令牌桶可预存令牌,能够承接短时间的突发请求,二者适用的限流场景也有所区分。