前言
系统的可靠性,是用户使用的信心所在。在资源有限的情况下,面对不断增长的流量,如何保证系统依然处于一个正常负载的状态呢?限流。限流问题可以追溯到网络通信中的流量整形(Traffic Shaping)和流量控制(Traffic Policing)。下面一起小窥一下有哪些精彩的算法。
简单窗口
![ebb2b5080da01b8923fb6b90629aea19.png](https://i-blog.csdnimg.cn/blog_migrate/e7f55f12314c88dc76b398b78935aa87.png)
![a97597dcdd1f4127aaddcb2f5f259ff5.png](https://i-blog.csdnimg.cn/blog_migrate/62035703053a0301717251f401d3a81a.jpeg)
流量曲线
![e8c041719a9e352f9b175fc284e79416.png](https://i-blog.csdnimg.cn/blog_migrate/d1cdf9847ee8e1d0e722e77bcb9495c1.png)
优点:实现简单
缺点:精确度不够,临界情况下会qps会超出实际的值。
滑动窗口
简单来看,简单窗口精确度不够的原因在于,窗口移动的步伐太大,没有关注到之前窗口的流量。导致漏掉了一些统计窗口,所以我们可以慢慢的移动,让过去的流量被关注到,避免漏掉统计窗口。
![68fd6876271d044f711a636bba62c49f.png](https://i-blog.csdnimg.cn/blog_migrate/1851995de1d676f70b5565971bb50df8.jpeg)
但是这样就解决问题了吗?它只是概率性的缓解了问题。
![481494cf7e2d56d8c6a900c7c0d19d31.png](https://i-blog.csdnimg.cn/blog_migrate/1ae97c788ea359cd73369e5d8af95a7a.jpeg)
相邻的窗口之间确实没有了突发流量,但是只要是有滑动距离且滑动距离内可以进入多个流量,就会像上图所