高并发场景限流方式

2018-09-19 17:15:16

为什么要限流

举例1:你开发了一个企业中非常核心的一个服务,日常情况下会有上百上千个应用调用,如果对服务的调用不加限制的使用,可能会给服务器造成非常大的压力,直接导致所有服务节点全部被请求占满,从而产生很大的生产事故。

举例2:公司搞了个大促销活动,准备了10台服务器来应对活动的到来,但促销活动开始后,原本估计只有100万人参加的促销活动,瞬间涌进来1000万用户,远远超过了服务处理能力的访问请求,导致后端的服务器直接满负荷运算,并伴随着大量的资源抢占和上下文切换,使得普通处理能力非常慢,除了直接影响业务请求的相应时间,造成更多的业务请求排队,甚至让整个平台崩塌。

像以上类似的场景都是因为平台没有提前做好评估和不具备限流导致的结果。限流的作用相当于电路上的保险丝,当过载的时候掐掉一些流量,让系统有能力集中资源以较快的速度处理平台处理能力范围内的业务请求,说白了就是一种保护策略,让平台保持稳定运行。

限流的方式

1.前端限流

用户的请求首先会通过前端web服务器分发到后端的应用集群上,一般用的比较多的前端web服务nginx就具备这个功能,nginx的limit_conn模块,可以用来限制瞬时并发连接数,在前端设置限流是最合适的限流拦截点。在这层限流后,一定会有部分用户的请求得不到系统正常的处理,所以平台一般会给用户返回到限流页面,在一定程度上减少用户因为请求没有成功处理的失落体验,限流页面的风格要和当前业务活动场景风格统一,页面也要包含跳转引导界面,以形成用户体验和业务处理流程的闭环,比如页面可以提示系统太忙了,请稍后再试试这样的友好提示语。

2.中层限流

中层限流的方式和策略有很多,具体根据自身的业务场景来选择,一般常用的有限制接口调用速率,接口超时设置,通过MQ排队方式处理业务,特殊的业务可以走缓存等等方式。

3.数据库限流

数据库限流基本是默认大家都在用的,一般都是配置了数据库连接池来限制总并发数。

这三种限流在整个平台体系里面是呈漏斗状的,越上层的服务器处理的事务越轻,应付请求的能力也越强,也就意味着同一请求越上层处理时间越短。前端的流量是最大的,到了中层会拦截掉一半,然后最终在数据库的又是少了一半。

6666666666e.png

(微信打赏)

(支付宝打赏)
原创不易,谢谢赞赏。你的支持就是我的动力,我会更加努力。
  1. 2018-09-25 17:09:35

    限流架构: 1.浏览器,最上层,会执行一些JS代码,这个地方往往进行第一次流量过滤,主要是过滤重复提交的数据。 2.代理,使用反向代理服务器,如nginx限流。 3.网站,单位时间内同一用户限制访问频率,做页面缓存等。 4.服务层,做队列,缓存等。 5.数据库层,当数据经过层层狙击到达数据层的时候,流量已经过滤掉绝大部分,没什么太大压力。

  2. 2018-09-25 17:03:10

    将请求尽量拦截在系统上游,流量层层过滤,当请求到达稀缺资源比如数据库的时候,流量变小,数据库的压力已经可以忽略,传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小。

  3. 2018-09-20 08:51:38

    原来这个就是限流哦,简单易懂。

最近很长一段时间里面,在职场中发现很多人不太会自我介绍了,虽然我也隐约感觉到叫别人做自我介绍是有那么点尴尬,但是兄dei,既然叫你做,你就做嘛,别带有情绪或者敷衍,要不然大家都尴尬啊。我不排除有些面试官是因为各种原因面试前没看简历

阿里云产品1000元服务器代金券大礼包免费领取。

阿里云服务器低门槛上云捷径,普惠上云,云服务器1核1G仅需293元/年。

企业级高性能实例,限时2-5折,限首次购买ECS用户参与,限购4台。