限流器是一种限制某种操做在必定时间内的执行次数(例如每秒钟5次)或者执行量(例如每秒钟1G大小的数据)的机制。算法
限流器是一种防护性的编程实现方式,在大数据量高并发访问时,常常会出现服务或接口面对暴涨的请求而不可用的状况,甚至引起连锁反映致使整个系统崩溃。此时你须要使用的技术手段之一就是限流,当请求达到必定的并发数或速率,就进行等待、排队、降级、拒绝服务等。编程
在一个大型的分布式系统,系统设计要考虑不少不少方面:缓存
举一个简单的例子:假设一个商城,有下单和查看本身的订单这两个业务。限量秒杀的时候,用户下单量在某一时候忽然飚高。系统目前容量可能不够承担这么大的并发下单量,致使请求阻塞,排队,并进而致使全部的资源都被下单请求吃掉,用户查看本身订单的请求也没法执行或者很慢。同时,用户请求刷不出来就会不断地刷,致使进一步请求堆积。并发
若是彻底不采用限流器,通常须要经过设置适当的请求超时,尽可能小的同步等待队列和合适的断路策略,来防止过载。可是,这种方式并不能避免上面说的4个问题。负载均衡
在目前的微服务体系中,通常一个进程既是服务提供方,又是服务调用方。在服务网格下更是如此。对于服务提供方,限流主要是控制外部流量防止压力过大。对于服务调用的时候限流,主要是考虑压力均匀(虽然服务调用通常有负载均衡算法,可是通常的负载均衡算法无法保证真正的负载彻底均衡,客户端限流器能够进一步帮助防止压力所有打到了某一个实例)。分布式
对于服务端限流,当触发限流的时候,服务端通常会拒绝请求,而且可能返回 429 这个 HTTP 状态码。客户端是这个请求直接异常,仍是缓存起来以后继续重试,取决于客户端的策略。ide
每日一刷,轻松提高技术,斩获各类offer:微服务