流量控制的常用方式
-
在解释什么是限流之前,我们先了解一个点,就是服务的请求上限,也可以理解为是服务承载量,即该服务支持一定时间内最多能够支持多少请求。只有将服务承载量进行量化,能够被测量,才能根据这个测量值,采取一定的对应措施。
服务承载量,指的是单位时间内的处理量。北京地铁早高峰,地铁站都会做一件事情,就是限流了!想法很直接,就是想在一定时间内把请求限制在一定范围内,保证系统不被冲垮,同时尽可能提升系统的吞吐量。做到真正的限制,不是那么容易的。因为每一个方案实现原理都不同,也就意味着代码实现不同。
限流常用的方式有:
计数器:确定方法的最大访问量MAX,每次进入方法前计数器+1,将结果和最大并发量MAX比较,如果大于等于MAX,则直接返回;如果小于MAX,则继续执行。计数器的实现方式,简单粗暴。在一段时间内,进行计数,与阀值进行比较,到了时间临界点,将计数器清0
滑动窗口:计数器滑动窗口算法是计数器固定窗口算法的改进,解决了固定窗口切换时可能会产生两倍于阈值流量请求的缺点。
滑动窗口的意思是说把固定时间片,进行划分,并且随着时间的流逝,进行移动,这样就巧妙的避开了计数器的临界点问题。也就是说这些固定数量的可以移动的格子,将会进行计数判断阀值,因此格子的数量影响着滑动窗口算法的精度。
漏桶:漏桶算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。
以固定速率从桶中流出水滴,以任意速率往桶中放入水滴,桶容量大小是不会发生改变的。
令牌桶:令牌桶算法是对漏斗算法的一种改进,除了能够起到限流的作用外,还允许一定程度的流量突发。令牌桶算法是以恒定的速率将令牌放入桶中,这个时候如果来了突发流量,如果桶中有令牌,则可以直接获取令牌,并处理请求,基于该原理,就解决了漏桶算法中不能 处理突发流量 的问题。
西南地区IT社群(QQ)
- 云南
- 【昆明网页设计交流吧】243627302
- 【昆明nodejs交流吧】 243626749
- 【VUE】838405306
- 【云南程序员总群】343606807
- 【昆明UI设计】104031254
- 【云南软件外包】15547313
- 贵州
- 【PHP/java源码/站长交流群】55692114
- 四川
- 【成都Java/JavaWeb交流】86669225
- 【vaScript+PHP+MySql】116270060
- 【UI设计/设计交流学习群】135794928
- 重庆
- 【诺基亚 JAVA游戏博物馆】 559479780
- 【PHP,Java,Python,C++接单】 442103442
- 西藏