背景

最近了解到很多朋友对限流、熔断、降级、隔离、超时重试的概念和应用场景理解的不是很到位,所以想用五篇的篇幅稍微系统的介绍一下。

本篇是第一篇,是限流做详解,如果反馈好的话,我会继续写下面四篇。不好的话就算了,算我理解不够,再自己总结总结。

限流的概念

有朋友问我限流和熔断有什么区别,我的理解很简单。限流作用是防御上游流量超过处理能力的手段,熔断作用是容错下游的快速失败手段。

举个生活中的限流例子:

小A最近打算找个女朋友,他拜托了很多朋友帮自己介绍,朋友们也很给力,很多姑娘都愿意和小A聊一聊。小A发现时间忙不开了,他就制定了一个计划,一天见2个。这就是限流。

举个生活中的熔断例子:

小A在见这些姑娘的时候,如果有的姑娘不守时,超过约定时间半小时还没有出现,那小A就会离开。不然会耽误见下一位姑娘,这是一种熔断手段。另外,如果有的姑娘特别能说,聊天超过了3小时,小A也会打断姑娘,把姑娘先送走,不然也会耽误见下一位姑娘。这也是需要的熔断措施。

限流的原理

不管任何编程语言的实现,目前主流的底层就是基于令牌桶算法和漏斗算法。这两种算法达到的效果有所不同。

令牌桶算法

令牌桶算法是先有个固定容量的桶,一个任务会以固定的速率往桶里放token,请求来了会去取token。如果桶满了,token就溢出了。多出来的token就不要了。如果请求太快,token生产速度跟不上消费速率,桶空了,有的请求取不到token,这时候就会直接返回错误而不继续处理。

举个例子:

比如小A最后找到了心仪的女朋友小C。他俩相处融洽,一起包饺子吃。小A负责擀皮,小C负责包。小A会把擀好的皮放到一块案板上。这个案板可以放20张皮。如果皮擀多了,就放不下,这时候小A就会停下来等。如果皮擀的慢,小C没的包,也就只能停下来。这里的皮就相当于是token,包饺子就相当于是处理业务的请求。用图表示如下:

漏斗算法

漏斗算法也是先有个固定容量的桶,请求来了先经过桶,从桶里出去的速率是一定的。如果请求量让桶满了,多出来的请求就不处理了。如果桶是空的,新来的请求就能马上处理。

事实上,各种MQ比如kafka就是典型漏斗算法。broker就是这个固定容量的桶,生产者会不断的将数据写到broker里,消费者是采用的拉取模式,总是以固定的速率来消费。

令牌桶算法和漏洞算法的比较

限流的实现

基础实现

在Java中业界用的比较多的是Google出品的Guava RateLimiter和另外的一款resilience4j-ratelimiter来实现限流。原理差不多。

下面以RateLimiter为例进行讲解。要实现一个限流总共需要用到RateLimiter的两个方法:

1>RateLimiter.create() 静态方法创建对象,初始化桶容量

2>acquire()或者tryAcquire()  获取请求token,两者使用一个即可。acquire方法是阻塞式的,用来实现漏斗算法;tryAcquire是非阻塞式的,用来实现令牌桶算法。

阻塞式是如果到达指定条件前一直不返回结果,通过下面的源码可看到内部实际上是用sleep来实现的阻塞。因为所有的请求获取权限时都会sleep固定的时间才返回,就达到了匀速的目的。

非阻塞是立即返回是否获取到权限(token)。这时候请求如果获取权限成功就处理请求,获取权限失败就直接返回一个自定义的快速失败处理方式。平时请求速率小于token产生速率,桶渐渐满了。一旦有突发流量,因为桶里有存量token,也可以直接获取到权限,就是为什么令牌桶算法可以应对突发流量的原理。

高阶实现

上面实现里讲的是工具组件,如果只使用工具组件有个问题。限流实际上需要定期进行容量评估,是一个动态的过程,如果只使用工具组件就需要每次修改代码。当然也可以将每个值写到一个统一配置里,比如zookeeper来进行管理。

如果规模大的情况下更好的一个解决方法是使用专门的平台。这个平台可以支撑更多维度的配置,比如集群维度的限流。集群维度和单机维度的区别是如果设置了一个总的阈值,系统可以根据机器资源情况自动计算出每台机器的限流情况。

在业界,阿里有个sentinel,有人称为微服务哨兵。它是一套更完整的生态,除了我上面提到的功能之外,还提供了动态系统保护、热点限流等功能。

放不下的原理_稳定性五件套-限流的原理和实现相关推荐

  1. Sentinel 集群限流设计原理

    本节目录 1.集群限流使用场景 2.集群限流与单机限流的异同思考 3.探究集群限流实现原理 3.1 ClusterBuilderSlot 详解 3.2 集群限流模式实现原理 3.2.1 Default ...

  2. 充电器充满变灯电路图(五款充电器充满变灯指示电路详细)一般充电器的工作原理是稳压限流。根据检测到的充电电流变化来实现红转绿的,不同容量的蓄电池所要设定转灯的电流值不同

    充电器充满变灯电路图(一)         电路原理图: 输入直流电压高于所充电池电压3伏即可.R1.Q1.W1.TL431组成精密可调稳压电路,Q2.W2.R2构成可调恒流电路,Q3.R3.R4.R ...

  3. java redis 限流_Redis——限流算法之滑动窗口、漏斗限流的原理及java实现

    限流的意义 限流一般是指在一个时间窗口内对某些操作请求的数量进行限制,比如一个论坛限制用户每秒钟只能发一个帖子,每秒钟只能回复5个帖子.限流可以保证系统的稳定,限制恶意请求,防止因为流量暴增导致系统瘫 ...

  4. 反激qr工作原理_锂电池均衡电路的工作原理

    Δ  点击上方蓝色字关注 21Dianyuan * 本文是 21Dianyuan 社区资深版主 YTDFWANGWEI  原创  技术文章,感谢作者的辛苦付出. 新能源和电动汽车的发展,都会用到能量密 ...

  5. lightgb原理_污染治理设施监管平台原理,智慧安全用电订制

    污染治理设施监管平台原理 3.根据权利要求1所述的一种电能表校表台,其特征在于,所述的托板接近检测端子的一端设置有挂钩,所述的挂钩用于防止电能表滑出托板以及在退出检测时使电能表随着推杆的后退而退出检测 ...

  6. java -jar 工作原理_可执行Jar包运行原理

    spring boot有一个很方便的功能就是可以将应用打成可执行的jar.那么大家有没想过这个jar是怎么运行起来的呢?本篇博客就来介绍下spring boot可执行jar包的运行原理. 1. 打可执 ...

  7. nuget的原理_微服务架构中APIGateway原理

    背景 我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest ...

  8. 预充电电路工作原理_变频冰箱开关电源电路工作原理及检修。

    电冰箱的开关电源电路主要用来为电冰箱其他电路和各部件提供工作电压,市电220V 电压经过开关电源电路处理后,通过接线端子为电冰箱的用电部件供电. 下图所示为三星BCD-226型电冰箱的开关电源电路框图 ...

  9. npcap loopback adapter是什么意思_抖音限流是什么意思? 抖音为什么突然限流?

    抖音限流是什么意思​ 抖音为什么突然限流​是由B2B101网站()为您收集修改整理而来,更多相关内容请关注B2B101网站b2b营销推广栏目. 抖音的流量来源于两方面,一方面来自于关注的粉丝,另一方面 ...

最新文章

  1. java datetime int_关于jodatime:Java中DateTime对象之间的小数天数
  2. 什么是Android PendingIntent?
  3. 【Android应用开发】Android Studio - MAC 版 - 快捷键详解
  4. hdu 1026 Ignatius and the Princess I(优先队列+bfs+记录路径)
  5. java boxplot_Matlab Boxplots
  6. python 一次输入10个数_python 如何一次输入3个整数
  7. 后端技术:命名不规范,lombok泪两行!
  8. 一家可能永远无法赚钱的公司,把自己卖了400亿
  9. Faster RCNN杂谈
  10. TableView全展开实现ContentSizedTableView
  11. Win10“混合现实门户”图标更新:加入Fluent Design风格
  12. PHP性能分析工具:xhprof
  13. Qt开发经验小技巧合集
  14. https页面加载http资源的解决方法
  15. 函数:无参无返回值函数的使用
  16. 使用python编写一个完整的接口自动化用例
  17. web前端高级JavaScript - 彻底掌握基于HTTP网络层的“前端性能优化”
  18. Vue 正则表达式验证表单字段(如用户名/密码/真实姓名/身份证/手机号/邮箱)的合法性
  19. php重力传感器,HTML5中如何调用手机重力感应的接口
  20. 计算机网络专业土味情话,各个专业的“土味情话”,撩不到你算我输!

热门文章

  1. 如何有效地提高工作效率
  2. 中科院院士谈量子技术发展 20年后黑客消失
  3. 每次打开WPS都会打开【我的WPS】的解决方法
  4. 修改docker内java内存_在docker中使用java的内存情况
  5. 美团后台开发两轮面经(已入职)
  6. 华翼宽带android客户端,实地测试 看华翼宽带是否带宽缩水_网络设备评测-中关村在线...
  7. 中国行政区编码_邮政编码_区号编码
  8. 题解报告(CDUT暑期集训——第二场)
  9. 2019纪中暑期(9-3=6)天期末考试 总结
  10. 杰理之MIDI 乐谱解码 【篇】