惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
P
Proofpoint News Feed
Hugging Face - Blog
Hugging Face - Blog
MyScale Blog
MyScale Blog
A
About on SuperTechFans
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
MongoDB | Blog
MongoDB | Blog
博客园 - 【当耐特】
The Cloudflare Blog
F
Fortinet All Blogs
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
罗磊的独立博客
量子位
有赞技术团队
有赞技术团队
V
V2EX
Engineering at Meta
Engineering at Meta

祈雨的笔记

安全多方计算MPC spark原理解析 kueue执行源码分析 spark on k8s执行源码分析 spark-operator源码解析 系统压测遇到的缓存击穿问题 我的世界PC与安卓联机 蚂蚁金服流量投放平台的AIG改造 G1大对象致Old区占用率高 日志打印导致接口响应率下跌分析 Groovy加载类导致OOM分析 ERROR日志打印导致CPU满载 记OceanBase死锁超时 应用发版期间服务响应超时 Ark Serverless初探 系统优化复盘一二三 The user specified as a definer does not exist Kong网关初探 API网关选型调研 CPU火焰图常用工具 配置中心选型调研 root操作Nginx导致用户组错误 基于Proxifier使用代理 FastJSON字段智能匹配踩坑 Nacos初探 记一次Nginx服务器CPU满荷载故障 基于券系统分库分表的思考 limit不参与SQL成本计算致索引失效 Linux常用性能监控命令 golang低版本http2偶现400
限流算法
祈雨的笔记 · 2018-12-10 · via 祈雨的笔记

限流算法

概要

限流目的是通过对并发访问/请求进行限速或者一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或者等待、降级。

限流算法

常见的限流算法有:令牌桶算法、漏桶算法、计数器算法。

1、令牌桶算法

令牌桶算法是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌。

  • 假设限制2r/s,则每500毫秒向桶中添加令牌
  • 桶总最多存放b个令牌,当桶满时,新添加的令牌被丢弃或者拒绝
  • 当一个n字节的请求到达,将从桶中删除n个令牌,接着请求被放行
  • 如果桶中的令牌不足n个,则不会删除令牌,且该请求将被限速(被丢弃或在缓冲区等待)

2、漏桶算法

漏桶算法非常简单。

  • 一个固定容器的漏桶,按照固定速率放行请求
  • 请求可以以任意速率请求到漏桶
  • 如果请求超出桶的容量,则请求将被限速(被丢弃)

3、计数器算法

计数器主要用来限制总并发数,只要全局总请求数或者一定时间段的总请求数达到设定的阈值,则进行限速。该算法是一种简单粗暴的总数量限流,而不是平均速率限流。

区别

  • 令牌桶是按照固定速率往桶中添加令牌,请求是否被处理需要看桶中令牌是否足够,当令牌数减至0时,则拒绝新的请求
  • 漏桶则是按照固定速率流出请求,流入请求速率任意,当流入的请求数累积到漏桶容量时,则新流入的请求被拒绝
  • 令牌桶限制的是平均速率(允许突发请求),并允许一定程度的突发流量
  • 漏桶限制的是流出速率,从而平滑突发请求
  • 令牌桶和漏桶算法实现可以一样,但是方向是相反的,对于相同参数得到的流速效果一样
  • 计数器算法是总数量限流,令牌桶和漏桶都是平均速率限流