? 搞懂限流算法这一篇就够了_CQITer_重庆IT人之家 yabo10.com亚博体育,亚博娱乐在线网站,亚博国际娱乐7171 ?

搞懂限流算法这一篇就够了

TL;DR(too long don't read)

限流算法:计数器、滑动窗口、漏桶、令牌桶。

限流方案:Guava的RateLimyabo10.com亚博体育er、Alibaba Sentinel

搞懂限流算法这一篇就够了

大家都知道,对于高并发的业务场景,我们为了保障服务的稳定,经常会祭出三大利器:缓存、熔断降级和服务限流。

服务限流作为一个核心的自保护机制,能够在非常高并发的情况下,其他机制都无法保障降级的情况下,保护系统不崩溃,以免产生雪崩效应。

我们设想这么一个场景。

名词解析,QPS(query per second 每秒查询数)

单台机器可以承受的最高QPS为 100,我们有5台机器,日常服务 QPS 为 300。

那么其实我们是毫无压力,根据前置的负载均衡服务器,每台 300/5 = 60 。可以完美提供服务。

今天,老板突然搞了一波促销,QPS 达到了 800。

好了,机器 A 的 QPS 达到了 160,已经完全扛不住了,直接宕机了。这时候集群只剩下4台机器,QPS依然是 800。平均分配到剩下的 4 台机器上,每台机器 200。就这样,机器一台一台倒下,雪崩了。

那如果我们的系统有限流,会是什么样的场景呢?

QPS 达到了800。好了,机器 A 的 QPS 达到了 160,但因为限流了100,所以机器依然正常运行,只是损失了 60 QPS 的客户,整个集群整体还是正常运行的。这时候就给开发和运营们留下时间开始降级扩容 bala bala....

可见,限流对于系统的自保护是非常重要的存在,然而很多工程师并没有正视它,或者说只是会用,并不清楚背后的原理。先说下结论。

常见的限流算法有:计数器、滑动窗口、漏桶、令牌桶。

常见的限流方案有:Guava的RateLimyabo10.com亚博体育er、基于分布式锁的令牌桶、Alibaba Sentinel

<计数器>

一般来说,计数器比较粗暴,就是看单位时间内,所接受的 QPS 的请求有多少,如果超过阈值,则直接拒绝服务。大概场景是这样的。

有这么一个煎饼果子摊,摊主叫老王,上面的老板说你一分钟只许卖 6 个饼(计数限流1分钟6个)。如果在前 0.1 秒已经有人预定了6个饼而且老王刚好神来之笔也已经做完了,那么老王在接下来的 59.59 秒只能坐在凳子上,等待下一分钟的到来。

看,简单粗暴的计数器,在系统性能允许的情况下,可能会浪费非常多的资源

<滑动窗口>

滑动窗口可以看做计数器的精细化实现,之前只能一分钟一分钟往前赶,现在可以根据实现的精细化 一秒一秒往前赶,虽然整体原理还是靠计数器。既往不咎,是一个适当时间里懂得忘记的计数器。

<漏桶>

看这张图可以看到漏桶的基础原理,我们会用一个桶作为缓冲区,所有的请求都先丢到桶里。系统以恒定速率慢慢消化这些请求。比较常见的实现就是队列,用一个缓冲区来保存没处理的请求,然后消费者恒定速度抓取一些请求进行处理。

搞懂限流算法这一篇就够了

有这么一个煎饼果子摊,摊主叫老王,老王一秒钟只能做一个饼。现在来了 100个顾客,那怎么办呢?就排队啊。老王的老婆啊潘,把这批顾客引导到了旁边的空地上站着,并给他们一个一个标记了号码。老王做完一个,就大喊一声号码,对应的的顾客就过来把饼拿走。

你看看这里的要求,要求有空地(桶),而且顾客等得起(等待时间)。

<令牌桶>

我们会有一个令牌管理员,按照一定的策略往令牌桶里放令牌。系统每接受到一个请求的时候,都会请求要一个令牌。如果拿到令牌,那么就处理这个请求,拿不到就直接拒绝这个请求。那么只要令牌发放的策略正确,这个系统就不会被拖垮,也能对机器的利用率更高。

搞懂限流算法这一篇就够了

有这么一个煎饼果子摊,摊主叫老王,老王也不知道自己能做几个饼。老王的老婆阿潘在老王旁边放了一个桶,里边放了一些牌子,并告诉老王,"我帮你看着,你看见有令牌你就做就是了"。 现在来了 100个顾客,老王挖粪涂墙,原来一秒钟只能做一个,现在一秒钟可以做好多个,老王不看顾客了,每次能拿到令牌就直接做。老王的老婆啊潘,眼睛一直看着老王,看看他手抖没是不是要上厕所了。如果手抖了或者可能扛不住了,那就少放一点令牌歇一歇。但如果一次性来了五个 vip 客户,那阿潘就不管那么多了,就直接丢多几个令牌让老王忙一点。

我们看到,令牌桶的方法可以根据系统负载,实时调节系统的处理能力,能够允许一定量级的瞬时高峰流量的快速消化。

相关推荐
新闻聚焦
猜你喜欢
热门推荐
  • 微软AI面试题有多难?这里有一份样卷

      究竟什么样的AI人才能被微软这样的巨头聘用呢?今天,文摘君就淘来了几道微软AI 面试题,同时给出了最基本的解答......

    06-25????来源:澎湃新闻网

    分享
  • 全球最聪明的大脑怎么看AI?他们预测了

      2017年AI领域取得了诸多成果。2018年AI又将何去何从?以下是来自世界顶级研究人员和行业领军人物对2018年AI领域发展作......

    02-20????来源:虎嗅网

    分享
  • 2017JavaScript框架战报 - React分战场

      我们来看看与React有关的软件包的生态系统。当Facebook构建React时,就有许多来自开源社区的第三方软件包。为提供完......

    02-27????来源:湖北新闻网

    分享
  • 小白学数据:教你用Python实现简单监督学

      监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段。即便是在无监督学习兴起的近......

    03-05????来源:今日头条

    分享
  • 现代编程语言Swift、Kotlin等十大有趣功能

      最近学习了一些现代编程语言,比如Reason,Swift,Kotlin和Dart。这些编程语言提供了许多新功能,本文主要分享了我认......

    04-29????来源:祁东新闻网

    分享
  • 领域场景分析的6W模型

      组成场景的要素常常被称之为6W模型,即描写场景的过程必须包含Who,What,Why,Where,When与hoW这六个要素。......

    04-30????来源:砍柴网

    分享
  • 开源应用服务器WildFly 12发新季度交付模式

      WildFly 12 Final版本现在已经可以下载了,WildFly是一款灵活的开源应用服务器,支持开发人员构建轻量级应用程序。支持......

    05-10????来源:青岛新闻网

    分享
  • 基于Spring Cloud的微服务落地

      微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,......

    06-04????来源:广西新闻网

    分享
  • 为什么阿里工程师纷纷在内网晒代码?

      前阵子,在阿里一个小黑屋里,5名对代码有着极致追求的工程师参与阿里代码领域最高荣誉“多隆奖”的最终角逐。......

    06-08????来源:四川新闻网

    分享
  • 超级大汇总!200多个最好的机器学习、

      我把这篇文章分为了四个部分:机器学习,自然语言处理,python和数学。在每个部分中我都列举了一些主题,但是因......

    09-25????来源:洛阳新闻网

    分享
返回列表
Ctrl+D?将本页面保存为书签,全面了解最新资讯,方便快捷。