请你谈谈为何分布式系统须要限流器

什么是限流器?

限流器是一种限制某种操做在必定时间内的执行次数(例如每秒钟5次)或者执行量(例如每秒钟1G大小的数据)的机制算法

限流器是一种防护性的编程实现方式,在大数据量高并发访问时,常常会出现服务或接口面对暴涨的请求而不可用的状况,甚至引起连锁反映致使整个系统崩溃。此时你须要使用的技术手段之一就是限流,当请求达到必定的并发数或速率,就进行等待、排队、降级、拒绝服务等。编程

为何须要限流器

在一个大型的分布式系统,系统设计要考虑不少不少方面:缓存

  1. 系统动态扩容缩容,总会有滞后性。业务总会有高峰有低谷。集群大小不会一直按照高峰的时候的规模运行,这样成本过高了,通常会有动态扩容策略。可是这种动态扩容,通常是有滞后性的,不能保证瞬时高流量处理的很好。经过限流器,保证某个业务流量到来时,不会觉得这个业务致使其余业务也没法正常工做。
  2. 级联故障(cascading failure):分布式系统通常会有健康检查,也通常会有断路降级机制,流量高峰到来的时候,当某个节点过载,致使这个节点健康检查失败下线,或者断路器打开,致使这个节点的流量打入了其余节点致使其余节点也过载。
  3. 对于一个公共服务,不一样租户或者不一样用户都须要限流防止某个用户将全部的资源都抢光
  4. 流控:为了防止某一个节点负载特别高,可是其余节点负载较低。除了经过负载均衡控制外,还须要限流器保证某个节点不会压力太高。

举一个简单的例子:假设一个商城,有下单和查看本身的订单这两个业务。限量秒杀的时候,用户下单量在某一时候忽然飚高。系统目前容量可能不够承担这么大的并发下单量,致使请求阻塞,排队,并进而致使全部的资源都被下单请求吃掉,用户查看本身订单的请求也没法执行或者很慢。同时,用户请求刷不出来就会不断地刷,致使进一步请求堆积。并发

限流器的相关策略设计

若是彻底不采用限流器,通常须要经过设置适当的请求超时,尽可能小的同步等待队列和合适的断路策略,来防止过载。可是,这种方式并不能避免上面说的4个问题。负载均衡

在目前的微服务体系中,通常一个进程既是服务提供方,又是服务调用方。在服务网格下更是如此。对于服务提供方,限流主要是控制外部流量防止压力过大。对于服务调用的时候限流,主要是考虑压力均匀(虽然服务调用通常有负载均衡算法,可是通常的负载均衡算法无法保证真正的负载彻底均衡,客户端限流器能够进一步帮助防止压力所有打到了某一个实例)。分布式

对于服务端限流,当触发限流的时候,服务端通常会拒绝请求,而且可能返回 429 这个 HTTP 状态码。客户端是这个请求直接异常,仍是缓存起来以后继续重试,取决于客户端的策略。ide

每日一刷,轻松提高技术,斩获各类offer:微服务

image

相关文章
相关标签/搜索