🐒常用限流组件及其实现

type
status
date
slug
summary
tags
category
icon
password
Blocked by
Blocking
AI summary
 
这里将包含 leaky-bucket、token-bucket、sliding-window、bbr限流算法
具体代码实现

leaky-bucket

以恒定速度漏水,不能处理短时间内有大量并发请求
uber有开源其限流实现:github.com/uber-go/ratelimit

基本使用

观察日志可知,1/10秒的速度滴下水滴
 

核心实现

内部有多个实现,包含atomic包实现的、mutex实现的以及一个无限流的unlimited 的结构体,他们都实现了 Limiter 这个interface。
具体看mutex实现的
 
 
 

token-bucket

按照固定速率往bucket中生成token,若bucket中的剩余量想要取的token量,直接放行
第三方实现 github.com/juju/ratelimit
是否阻塞,看具体的方法

具体使用

核心逻辑

算法总结
 
 
 

sliding-window

 
 
 
 
 
 
 

bbr todo

偶然间看别人的 gateway实现,看到了bbr限流;地址为 "github.com/go-kratos/aegis/ratelimit/bbr"
wiki原文:
TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由Google设计,于2016年发布的拥塞算法。以往大部分拥塞算法是基于丢包来作为降低传输速率的信号,而BBR则基于模型主动探测。该算法使用网络最近出站数据分组当时的最大带宽和往返时间来建立网络的显式模型。数据包传输的每个累积或选择性确认用于生成记录在数据包传输过程和确认返回期间的时间内所传送数据量的采样率。[39]该算法认为随着网络接口控制器逐渐进入千兆速度时,与缓冲膨胀相关的延迟相比丢包更应该被认为是识别拥塞的主要决定因素,所以基于延迟模型的拥塞控制算法(如BBR)会有更高的吞吐量和更低的延迟,可以用BBR来替代其他流行的拥塞算法,例如CUBIC。Google在YouTube上应用该算法,将全球平均的YouTube网络吞吐量提高了4%,在一些国家超过了14%。[40]
 

具体使用

 
 

核心逻辑

 
 

ref

 
 
 
 
Prev
go中常见的内存泄露场景
Next
pprof的使用
Loading...
Article List