什么是限流器?

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

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

为什么需要限流器

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

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

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

限流器的相关策略设计

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

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

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

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

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

  1. 面试官:作为架构师,请你谈谈Saas 应用如何搭建?

    点击上方蓝字,关注我们 引言 如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS).12-Factor 为构建如下的 SaaS 应用提供了方法论: 使用标准化流程自动配 ...

  2. 请你谈谈COOKIE的弊端

    请你谈谈COOKIE的弊端 a. 每个特定的域名下最多生成的cookie个数有限制 b. IE和Opera 会清理近期最少使用的cookie,Firefox会随机清理cookie c. cookie的 ...

  3. 面试官:请你谈谈ConcurrentHashMap

    点击上方蓝字,关注我们 没啥深入实践的理论系同学,在使用并发工具时,总是认为把HashMap改为ConcurrentHashMap,就完美解决并发了呀.或者使用写时复制的CopyOnWriteArra ...

  4. 请你谈谈TCP协议与UDP协议的区别

    1 面向连接: TCP协议是面向连接的,TCP协议需要在通信开始建立连接,在通信结束断开连接,这分别需要三次握手和四次挥手.而UDP协议则是非面向连接的,它不需要三次握手和四次挥手. 2 可靠性: T ...

  5. java面试请你谈谈mysql_Java面试题之MySQL

    第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF).第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分.选取一个能区分每 ...

  6. 单例模式应用场景_面试:请你谈谈单例模式的优缺点,注意事项,使用场景

    单例模式介绍: 单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个全局对象,这样有利于我们协 ...

  7. 请你谈谈IP地址和MAC地址关系,为何需要两个地址?

    唯一的MAC地址:MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址.硬件地址,用来定义网络设备的位置.在OSI模 ...

  8. 请你谈谈如何破坏双亲委派模型?

    1什么是双亲委派模型? https://blog.csdn.net/zs18753479279/article/details/114497506 2如何破坏双亲委派模型? 典型的两个方法:1自定义类 ...

  9. Web开发中软件工程艺术(Web程序员请进来谈谈,特别是有大型门户网站后台开发的程序员)

    近正着手一个大型综合性门户网站后台管理系统(准确说是内容管理系统)设计  与规划,对网站开发技术有一个较深刻的认识.从Internet的出现到现在,WebSite的开发技术有4个过程:        ...

最新文章

  1. 手把手教你搭建智能合约测试环境、开发、编译、部署以及如何通过JS调用合约方法
  2. 万字长文详解如何用Python玩转OpenGL | CSDN 博文精选
  3. leetcode--Two Sum(2)
  4. linux平台驱动运行空间,UIO(linux Userspace I/O子系统)用户空间设备驱动I/O技术介绍...
  5. clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight
  6. C#调用C++类(以COM组件的形式)
  7. Redis 数据库入门教程
  8. paip.gui控件tabs控件加载内容的原理以及easyui最佳实现
  9. Netty工作笔记0061---Netty心跳处理器编写
  10. MPLAB IDE 编译器文件归类整理
  11. 辣条社区:问题解答、面试系列、求职助力、学习资源,你需要的都在这里
  12. visual studio2010中几个快捷键的使用
  13. vue.js简单登录界面访问mysql_Vuejs实战项目:登陆页面
  14. 浙师大c语言题目,c语言程序设计谭浩强浙师大练习题.doc
  15. 开票服务器管理系统默认密码,税控盘初始密码和口令是多少-百旺税控盘初始密码和口令-牛账网...
  16. 华为电脑管家最新(11.1.1.95)版完美升级安装教程
  17. Python 开发个人微信号在运维开发中的使用
  18. 微信小程序:用户点击跳转付款码界面
  19. 荣耀80Pro直屏版和荣耀80Pro区别?
  20. Android小程序-乐学成语背景音乐(五)

热门文章

  1. Go语言云原生与微服务(一)云原生架构
  2. 谭浩强c语言第八章指针ppt,谭浩强c语言第八章_指针.ppt
  3. 一个优秀的领导者,无非就这3点
  4. UE4旅途之渲染后模型变黑(2UV坑)及阴影不清问题
  5. html中input标签中type属性小总(包含html5新增表单属性)
  6. C语言知识点总结:指针
  7. 基于uniapp开发的聊天界面
  8. 公众号运营引流月吸万粉之互推
  9. Struts原理与实践
  10. 用“番茄工作法”克服拖延症