分布式系统架构下面对突增的高并发访问请求,如何实现限流以保护系统的可用性是需要关注的一个问题。分布式限流实现机制上有很多中,包括基于网关实现、基于中间件如Redis实现等,本文简要介绍限流的常用算法以及实现方案。
1、分布式限流概述
所谓“限流”是在高并发业务场景下,超过系统处理能力后,为确保系统稳定性和可用性所采取的技术手段。比如12306抢火车票的验证码图片,双十一等秒杀活动下的排队处理等,各个技术厂商的限流手段也是层出不穷。在现实生活中的限流也很常见,比如高峰期的地铁限流、黄金周的景区限流,还有疫情高峰期的排队核酸等。

在分布式系统中,面对大数据量的高并发访问请求时,可能有多个服务节点协同工作,每个节点可能会处理多个请求。因此,需要一种方法来控制每个请求的访问频率,以避免过多的请求导致系统负载过高或崩溃。常用的技术手段就是限流,限流其实就是在某个时间窗口对资源访问的限制,而分布式限流就是将整个分布式环境当一个整体来考量,当达到请求数或者并发限制后,就进行等待、排队、降级或者拒绝服务等限制。
1.1 分布式限流规则
限流通常是对时间和资源两个维度的限制:1)基于特定的时间窗口比如每分钟、每秒钟限制;2)基于可用资源的限制比如设定最大访问次数或连接数。

在实际的使用场景中会基于多个规则进行限制,常见的限流规则如下:
- 基于QPS和连接数控制:根据每个节点的QPS和连接数来设定限流值,如果某个节点的请求量超过了限流值,则拒绝该请求。
- 基于传输速率限制:通过限制每个请求的传输速率来控制请求的速率,如果传输速率超过了限制,则拒绝请求。
- 基于IP纬度限制:根据每个请求的IP地址进行限流,如果多个请求的IP地址属于同一个子网,则按照同一个限流规则进行限流。
- 基于服务器限制:根据每个请求所访问的服务器来进行限流,如果多个请求访问了同一台服务器,则按照同一个限流规则进行限流。
- 黑白名单限制:将拒绝请求的理由设置为黑名单,将允许请求的理由设置为白名单。黑名单可以根据实际需求进行设置,白名单可以从配置文件或用户输入中获取。
在实际业务场景使用过程中,需要根据具体情况进行调整和优化,以确保分布式限流算法能够满足实际需求,提高系统的性能和可用性。
1.2 分布式限流方案
分布式限流的主流方案包括从用户客户端限流、服务网关层实现限流以及基于中间件或限流组件实现限流。
- 客户端限流:类似于12306抢票的验证码限制,通过在前端增加验证访问达到限制流量的目的,从而大幅度降低系统的访问压力。
- 网关层限流策略:在分布式系统中,服务网关作为分布式链路的第一道关卡,承接了所有的用户请求。如图所示,从服务网关层->后端服务->后端缓存->数据库层,整个流量访问是一个漏斗型,在网关层做好流量的控制后,将极大的降低后端服务层的压力。常用的网关实现可以使用Nginx、Spring Cloud Gateway等。


文章介绍了分布式系统中应对高并发访问的限流技术,包括计数器限流、滑动窗口限流、漏桶限流和令牌桶限流等算法,并探讨了Nginx、Redis及SpringCloudGateway等实现限流的方案。
最低0.47元/天 解锁文章

1066

被折叠的 条评论
为什么被折叠?



