限流量控制:高并发系统中我们如何操纵流量?
如果系统的峰值流量会超过了预估的峰值,对于核心服务也产生了比较大的影响,而我们总不能把核心服务整体降级吧?那么在这个时候要如何保证服务的稳定性呢?你认为可以使用限流的方案。而提到限流,相信我们多多少少在以下几个地方出错过:
- 限流算法选择不当,导致限流效果不好;
- 开启了限流却发现整体性能有损耗;
- 只实现了单机的限流却没有实现整体系统的限流;
说白了,之所以出现这些问题还是对限流的算法以及实际应用不熟练。
究竟什么是限流
限流指的是通过限制到达系统的并发请求数量,保证系统能够正常响应部分用户请求,而对 于超过限制的流量,则只能通过拒绝服务的方式保证整体系统的可用性。限流策略一般部署 在服务的入口层,比如 API 网关中,这样可以对系统整体流量做塑形。而在微服务架构 中,你、也可以在 RPC 客户端中引入限流的策略,来保证单个服务不会被过大的流量压垮。
其实,无论在实际工作生活中还是在之前学习过的知识中,都可能对限流策略有过应用,举几个例子。
-
比如,到了十一黄金周的时候想去某个景区游玩,结果到了才发现景区有了临时的通知,每天仅仅售卖 10 万张门票,而当天没有抢到门票的游客就只能第二天起早继续来抢了。这就是一种常见的限流策略,也就是对一段时间内(在这里是一天)流量做整体的控 制,它可以避免出现游客过多导致的景区环境受到影响的情况,也能保证游客的安全。而 且,如果有挤过地铁,就更能感同身受了。北京早高峰的地铁都会限流,想法很直接,就是 控制进入地铁的人数,保证地铁不会被挤爆,也可以尽量保障人们的安全。
-
再比如,在 TCP 协议中有一个滑动窗口的概念,可以实现对网络传输流量的控制。可以想象一下,如果没有流量控制,当流量接收方处理速度变慢而发送方还是继续以之前的速率 发送数据,那么必然会导致流量拥塞。而 TCP 的滑动窗口实际上可以理解为接收方所能提 供的缓冲区的大小。
-
在接收方回复发送方的 ACK 消息中,会带上这个窗口的大小。这样,发送方就可以通过这 个

本文探讨了高并发系统中限流的重要性,介绍了固定窗口、滑动窗口、漏桶算法和令牌桶算法,并强调了在实际项目中如何选择和应用这些算法以确保服务稳定性和性能。还提到了在微服务架构下的流量控制实践和策略调整建议。
最低0.47元/天 解锁文章
1114

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



