# 稳定性:限流的 4 种策略方案
作者:Tom哥
公众号:微观技术
博客:https://offercome.cn (opens new window)
人生理念:知道的越多,不知道的越多,努力去学
为了满足儿童时期的情怀,Tom哥也随大流刷了一波 上海迪士尼乐园
现场可谓人山人海,特别壮观
如果你负责迪士尼的游客管理,你会怎么制定规则?
既能让大家玩的开心,有不错的用户体验,又能避免因为人多可能出现的各种突发状况
聪明的小伙伴们可能已经想到了,对,限流。
如果放开闸口,游客一拥而上,大家都玩不好。
如果制定一些应对措施,比如一天限量3万张门票,并在入口检票处、各个游玩项目入口处都有排队机制,控制人数,维持秩序,保证大家都能玩的开心。
其实,不止是线下,线上也有流控。每年的春运抢火车票、天猫双十一购物狂欢节、618大促、秒杀活动、各种电商促销活动,都会带来瞬间高访问流量,如果不做有效控制,很容易把系统冲垮,影响用户体验,甚至引发各种资损。
总的来说,限流对保障系统稳定运行起着至关重要的作用。
# 什么是限流
限流定义:
限制到达系统的并发请求数量,保证系统能够正常响应部分用户请求,而对于超过限制的流量,则通过拒绝服务的方式保证整体系统的可用性。
说白了,限流 就是敢于说 不 。所以,为了保证效果,尽量将 限流组件前置化,降低无效流量 对系统的损耗。比如,部署在API网关 中,统一处理;当然如果担心分发下来的流量还是很大的话,下游的微服务系统内部也可以引入限流组件 ,多层保障~~
根据作用范围,限流分为单机版限流、分布式限流。
# 1、单机版限流
主要借助于本机内存来实现计数器,比如通过AtomicLong#incrementAndGet()
,但是要注意之前不用的key定期做清理,释放内存。
纯内存实现,无需和其他节点统计汇总,性能最高。但是也有缺点,无法做到全局统一 化的限流。
# 2、分布式限流
单机版限流仅能保护自身节点,但无法保护应用依赖的各种服务,并且在进行节点扩容、缩容时也无法准确控制整个服务的请求限制。而分布式限流,以集群为维度,可以方便的控制这个集群的请求限制,从而保护下游依赖的各种服务资源。