【高并发】如何实现亿级流量下的分布式限流?这些理论你必须掌握!!
大家好,我是冰河~~
在互联网应用中,高并发系统会面临一个重大的挑战,那就是大量流高并发访问,比如:天猫的双十一、京东 618、秒杀、抢购促销等,这些都是典型的大流量高并发场景。关于秒杀,小伙伴们可以参见我的另一篇文章《【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!》注意:由于原文篇幅比较长,所以被拆分为:理论、算法、实战(HTTP 接口实战+分布式限流实战) 三大部分。
高并发系统限流
短时间内巨大的访问流量,我们如何让系统在处理高并发的同时还能保证自身系统的稳定性?有人会说,增加机器就可以了,因为我的系统是分布式的,所以可以只需要增加机器就可以解决问题了。但是,如果你通过增加机器还是不能解决这个问题怎么办呢?而且这种情况下又不能无限制的增加机器,服务器的硬件资源始终都是有限的,在有限的资源下,我们要应对这种大流量高并发的访问,就不得不采取一些其他的措施来保护我们的后端服务系统了,比如:缓存、异步、降级、限流、静态化等。
这里,我们先说说如何实现限流。
什么是限流?
在高并发系统中,限流通常指的是:对高并发访问或者请求进行限速或者对一个时间内的请求进行限速来保护我们的系统,一旦达到系统的限速规则(比如系统限制的请求速度),则可以采用下面的方式来处理这些请求。
拒绝服务(友好提示或者跳转到错误页面)。
排队或等待(比如秒杀系统)。
服务降级(返回默认的兜底数据)。
其实,就是对请求进行限速,比如 10r/s,即每秒只允许 10 个请求,这样就限制了请求的速度。从某种意义上说,限流,其实就是在一定频率上进行量的限制。
限流一般用来控制系统服务请求的速率,比如:天猫双十一的限流,京东 618 的限流,12306 的抢票等。
限流有哪些使用场景?
这里,我们来举一个例子,假设你做了一个商城系统,某个节假日的时候,突然发现提交订单的接口请求比平时请求量突然上涨了将近 50 倍,没多久提交订单的接口就超时并且抛出了异常,几乎不可用了。而且,因为订单接口超时不可用,还导致了系统其它服务出现故障。
我们该如何应对这种大流量场景呢?一种典型的处理方案就是限流。当然了,除了限流之外,还有其他的处理方案,我们这篇文章就主要讲限流。
对稀缺资源的秒杀、抢购;
对数据库的高并发读写操作,比如提交订单,瞬间往数据库插入大量的数据;
限流可以说是处理高并发问题的利器,有了限流就可以不用担心瞬间高峰流量压垮系统服务或者服务雪崩,最终做到有损服务而不是不服务。
使用限流同样需要注意的是:限流要评估好,测试好,否则会导致正常的访问被限流。
好了,今天就到这儿吧,我是冰河,我们下期见~~
版权声明: 本文为 InfoQ 作者【冰河】的原创文章。
原文链接:【http://xie.infoq.cn/article/6aa8ce99dd1b7b1ff2866ff55】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论