前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >请你谈谈为什么分布式系统需要限流器

请你谈谈为什么分布式系统需要限流器

作者头像
干货满满张哈希
发布2021-04-12 13:38:18
3790
发布2021-04-12 13:38:18
举报
文章被收录于专栏:干货满满张哈希

什么是限流器?

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

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

为什么需要限流器

在一个大型的分布式系统,系统设计要考虑很多很多方面:

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

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

限流器的相关策略设计

如果完全不采用限流器,一般需要通过设置适当的请求超时,尽量小的同步等待队列和合适的断路策略,来防止过载。但是,这种方式并不能避免上面说的4个问题。

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

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

每日一刷,轻松提升技术,斩获各种offer:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是限流器?
  • 为什么需要限流器
    • 限流器的相关策略设计
    相关产品与服务
    负载均衡
    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档