服务限流
什么是服务限流
限流就是为了提供稳定的服务,限制使用人数。
限流的目的是通过对并发请求进行限速,或者对一个时间窗口内的请求数量进行限速来保护系统。
一旦达到限制速率可以拒绝服务、排队或者等待。
多维度进行限流
请求到达服务接口时,可以采用多维度限流策略。
限流算法
-
限流算法-计数器(固定窗口)
计数器限制,每一分钟或者每一秒钟内的请求不能超过一定的次数,在下一秒计时器清零重新计算
存在的问题:
客户端在第一分钟的59秒请求了100次,又在第二分钟的1秒请求了100次,2秒内,后端要承受200次请求的压力,形成了流量突刺
-
限流算法-计数器(滑动窗口)
滑动窗口是细分后的计数器。它将每个时间窗口又划分成若干个时间片段,每过一个时间片段,整个时间窗口就会向右移动一格。
打满100次,客户端就拒绝访问。
时间窗口划分的越细,滑动窗口的滚动越平滑,限流效果越精确。
-
限流算法-漏桶
漏桶算法类似一个限制出水速度的水桶,通过一个固定大小的FIFO队列+定时取队列元素的方式实现。
请求进入队列后,会被匀速取出来处理,类似桶底部的开口匀速出水。当队列被占满后,后来的请求会直接被拒绝,类似水倒得太快溢出来。
优点是可以削峰填谷,不论请求多大多快,都只会匀速发给后端,不会出现突刺现象,保证下游服务正常运行。
缺点是桶队列中的请求会排队,响应时间拉长。
-
限流算法-令牌桶
令牌桶算法是以恒定的速度往桶里放置令牌,如果桶里的令牌满了就放弃,每进来一个请求去桶里找令牌,有的话拿走令牌继续处理,没有就拒绝请求。
令牌桶的优点是可以应对突发流量,当桶里有令牌时可以快速响应也不会产生漏桶队列中的等待时间。
缺点是相对于漏桶,一定程度上减少了对下游服务的保护。
https://www.cnblogs.com/junzi2099/p/14208640.html
标签:令牌,Java,请求,069,队列,算法,限流,窗口 来源: https://www.cnblogs.com/tangyouwei/p/service-flow-limitation-of-distributed-service-govern
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。