【网络通信 -- WebRTC】WebRTC 源码分析 -- PacingController 相关知识点补充
【1】漏桶限流算法简介
漏桶算法 (Leaky Bucket) 是网络中流量整形 (Traffic Shaping) 或速率限制 (Rate Limiting) 时经常使用的一种算法,其主要目的是控制数据注入到网络的速率,平滑网络上的突发流量;
如图所示,把请求比作是水,水来了都先放进桶里,并以限定出水的速度,当水来得过猛而出水不够快时就会导致水直接溢出,即拒绝服务;
漏桶限流算法 -- 主要的属性字段
- 1. 处理请求的速率 (rate),该值代表多久处理一个请求
- 2. 桶的最大容量 (capacity),该值代表最多允许多少个请求排队
- 3. 桶中最后一个排队请求被处理的时间(last)
- 1) 当有新请求进来的时候,可以计算出新请求需要被处理的时间,last + rate
- 2) 根据 last、当前时间(t) 以及速率(rate) 计算当前还有多少个请求等待被处理,waitRequests = (last - t) / rate
漏桶限流算法 -- 请求实际的被处理的时间计算方法
- 1. 计算当前时间距离上次被处理时间的间隔
- 2. 与 rate 进行比较,计算与 rate 的差值,然后补全该差值
last = 当前时间(t) + (rate - delta)
漏桶限流算法 -- "桶" 满的判断方法
- 根据当前时间(t),和桶中排队的最后一个请求被处理的时间(last)之间的差值,再除以速率(rate),计算出正在等待被处理的请求数量,然后和桶的最大容量(capacity)进行比较即可
参考与致谢
本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。
【1】图解漏桶(LeakyBucket)限流器的实现原理
【2】接口限流算法:漏桶算法&令牌桶算法
【3】限流——漏桶算法和令牌桶算法的区别