当前位置:网站首页>限流组件设计实战
限流组件设计实战
2022-07-01 02:57:00 【靈熙雲】
到此 灵熙云工作室 - 实践出真理 查看全文内容
为什么要限流
互联网系统通常都要面对高并发
请求(如秒杀、抢购等),难免会对后端服务造成高压力,严重甚至会导致系统宕机。为避免这种问题通常会添加限流
、降级
、熔断
等能力,从而使系统更为健壮。
Java领域常见的开源组件有
Netflix
的hystrix
,阿里系开源的sentinel(以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性)
等,都是蛮不错的限流熔断框架。
限流维度
QPS和连接数控制
设定IP维度的限流,也可以设置基于单个服务器的限流。在真实环境中通常会设置多个维度的限流规则,比如设定同一个IP每秒访问频率小于10,连接数小于5,再设定每台机器QPS最高1000,连接数最大保持200。
小知识:
吞吐量(TPS)
:指系统在单位时间内处理请求的数量。QPS 每秒查询率(Query Per Second)
:对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准(类似于TPS,只是应用于特定场景的吞吐量)。
传输速率
有的网站在这方面的限流逻辑做的更细致,比如普通注册用户下载速度为100k/s,购买会员后是10M/s,这背后就是基于用户组或者用户标签的限流逻辑。
黑白名单
如果某个IP在一段时间的访问次数过于频繁,被系统识别为机器人用户或流量攻击,那么这个IP就会被加入到黑名单,从而限制其对系统资源的访问,这就是俗称的“封IP”。
比如爬虫程序爬知乎上的美女图片,或者爬券商系统的股票分时信息,这类爬虫程序都必须实现更换IP的功能,以防被加入黑名单。
有时发现公司的网络无法访问12306这类大型公共网站,这也是因为某些公司的出网IP是同一个地址,因此在访问量过高的情况下,这个IP地址就被对方系统识别,进而被添加到了黑名单。
白名单可以自由穿梭在各种限流规则里,畅行无阻。比如某些电商公司会将超大卖家的账号加入白名单,因为这类卖家往往有自己的一套运维系统,需要对接公司的IT系统做大量的商品发布、补货等等操作。
分布式环境
分布式区别于单机限流的场景,它把整个分布式环境中所有服务器当做一个整体来考量。比如说针对IP的限流,限制1个IP每秒最多10个访问,不管来自这个IP的请求落在了哪台机器上,只要是访问了集群中的服务节点,那么都会受到限流规则的制约。
必须将限流信息保存在一个“中心化”的组件上,这样它就可获取到集群中所有机器的访问状态,目前有两个比较主流的限流方案
:
网关层限流
将限流规则应用在所有流量的入口处中间件限流
将限流信息存储在分布式环境中某个中间件里(比如Redis缓存),每个组件都可以从这里获取到当前时刻的流量统计,从而决定是拒绝服务还是放行流量
基础算法
固定窗口算法
固定窗口算法又叫计数器算法,是一种简单方便的限流算法。主要通过一个支持原子操作的计数器来累计 1 秒内的请求次数,当 1 秒内计数达到限流阈值时触发拒绝策略。每过 1 秒,计数器重置为 0 开始重新计数。
如:使用
AomicInteger
来进行统计当前正在并发执行的次数,如果超过域值就直接拒绝请求,提示系统繁忙。
但固定窗口算法存在问题,比如当遇到时间窗口的临界突变
时,如 1s 中的后 500 ms 和第 2s 的前 500ms 时,虽然是加起来是 1s时间,却可以被请求 4 次。
滑动窗口算法
滑动窗口算法是对固定窗口算法的改进。既然固定窗口算法在遇到时间窗口的临界突变时会有问题,那么在遇到下一个时间窗口前调整时间窗口是否可以?
每 500ms 滑动一次窗口,可以发现窗口滑动的间隔越短
,时间窗口的临界突变
问题发生的概率也就越小
,不过只要有时间窗口的存在,还是有可能发生时间窗口的临界突变问题
。
漏桶算法
漏桶算法思路可把水
比作是请求
,漏桶
比作是系统处理能力
极限,水先进入到漏桶里,漏桶里的水按一定速率流出,当流出的速率小于流入的速率时,由于漏桶容量有限,后续进入的水直接溢出(拒绝请求),以此实现限流。
令牌桶算法
令牌桶算法
原理可以理解成医院的挂号看病
,只有拿到号以后才可以进行诊病。
系统会维护一个令牌(token)桶
,以一个恒定的速度
往桶里放入令牌
(token),这时如果有请求进来想要被处理,则需要先从桶里获取一个令牌
(token),当桶里没有令牌
(token)可取时,则该请求将被拒绝服务
。令牌桶算法通过控制桶的容量、发放令牌的速率,来达到对请求的限制。
小结
- 窗口算法实现简单,逻辑清晰,可以很直观的得到当前的QPS情况,但是会有时间窗口的临界突变问题,而且不像桶一样有队列可以缓冲。
- 漏桶模式消费速率恒定,可以很好的保护自身系统,可以对流量进行整形,但是面对突发流量不能快速响应。
- 令牌桶模式可以面对突发流量,但是启动时会有缓慢加速的过程,不过常见的开源工具中已经对此优化。
到此 灵熙云工作室 - 实践出真理 查看全文内容
边栏推荐
- Detailed data governance knowledge system
- Optimal transport Series 1
- Mouse over effect I
- Gartner research: in China, the adoption of hybrid cloud has become the mainstream trend
- Catch 222222
- MySQL index --01--- design principle of index
- Scale SVG to container without mask / crop
- 鼠标悬停效果六
- 【Qt】添加第三方库的知识补充
- Huawei operator level router configuration example | configuration optionA mode cross domain LDP VPLS example
猜你喜欢
Cloud native annual technology inventory is released! Ride the wind and waves at the right time
Huawei operator level router configuration example | configuration optionA mode cross domain LDP VPLS example
Cloud native annual technology inventory is released! Ride the wind and waves at the right time
STM32——一线协议之DS18B20温度采样
Restcloud ETL实践之数据行列转换
Network address translation (NAT) technology
基于OPENCV和图像减法的PCB缺陷检测
【小程序项目开发-- 京东商城】uni-app之分类导航区域
Completely solve the lost connection to MySQL server at 'reading initial communication packet
Install vcenter6.7 [vcsa6.7 (vCenter server appliance 6.7)]
随机推荐
Cloud native annual technology inventory is released! Ride the wind and waves at the right time
鼠标悬停效果一
Record a service deployment failure troubleshooting
kubernetes资源对象介绍及常用命令(二)
鼠标悬停效果二
【EXSI】主机间传输文件
鼠标悬停效果六
园区运营效率提升,小程序容器技术加速应用平台化管理
[PR # 5 A] two way running (state pressure DP)
Huawei operator level router configuration example | BGP VPLS configuration example
Mouse over effect III
Magnetic manometer and measurement of foreign coins
一文讲解发布者订阅者模式与观察者模式
Ipmitool download address and possible problems during compilation and installation
How to determine the progress bar loaded in the loading interface when opening the game
Is it safe to open an account online in a small securities firm? Will my money be unsafe?
[applet project development -- Jingdong Mall] classified navigation area of uni app
Scale SVG to container without mask / crop
Gartner研究:在中国,混合云的采用已成为主流趋势
Mouse over effect V