美文网首页程序员
大白话讲讲限流、漏桶和令牌桶

大白话讲讲限流、漏桶和令牌桶

作者: elon_wen | 来源:发表于2020-09-20 10:22 被阅读0次

限流

所谓限流,核心点是限制流出,而不是流入。

怎么理解这句话?

比如去医院看病,如果人非常多的话,很大概率在进去之前,一群人就被拦在大门外排队,那扇门就是限流器。

每个时间段来看病的人数是不可控制的,因此限流器的流入是不可控制的,能做的是控制每段时间通过这个门的人数,也就是真正进入医院的人数。

漏桶和令牌桶

限流有几个常用的算法,比如漏桶和令牌桶。

漏桶就是从排队的人里面,每经过一段时间固定放进去几个人。

令牌桶就是每次进去之前,都要领一个号(令牌),拿到号才能进去,每段时间固定发放几个号。

当然这里我们假设排的队可以无限长,实际上不管是漏桶还是令牌桶,都是有大小的,漏桶里装的是请求,满了就拒绝服务了,令牌桶里装的是令牌,满了令牌只能溢出。

流量突增的场景

这两者之间虽然大体上功能一致,细节上还是有一些微妙的差异。比如令牌桶可以支持一定程度上的流量突增。

如果某个时间段人来的少比如6点,刚才讲号可以堆积,但不能无限堆积,超过一定量就废弃了。

如果堆积了一定的号,下一波人多的时候,比如8点,就可以多一点人一起进去。

而漏桶实际上并不具备这样的能力。

并发和时延

既然前面讲了限流,那最后再扯几句关于系统容量很关键的衡量指标:并发和时延。

大部分时候我们的说想设计一个支持高并发、低时延的系统。好像这俩概念永远是一起出现的。实际上,它们是从两个维度在看问题。

还是以医院为例,当只有一个医生坐诊的时候,系统能支持的并发数是1。

假设看病平均会花10分钟,那么时延就是10分钟。也就是一个请求发过去,rt(response time)是10分钟。

用并发数除以时延,那整个医院的每分钟能处理0.1个病人。这个就是系统所谓的吞吐量。

如果说要把吞吐量提高一倍,可以有2个办法:再增加一个医生,原来的大家排成一队变成两队一起处理。从这个角度来说,并发增加了,但是时延是不变的。

或者说通过各种先进的设备,把平均一个人看病的时间缩短到5分钟。从这个角度来说,时延变短了,并发不变。

当然,这里用的比喻,2个医生之间各看各的病,互相没什么影响,也就是说如果把医生数提高到10个,吞吐量就水平扩了10倍。这是比较理想的情况。

而再实际的秒杀场景下,由于可能会共享一些资源(比如数据库)使得系统无法做到完全的水平扩容。

没想到原来想顺带提一下的点比正文更长了,希望讲清楚了关于秒杀的一些基本概念。

相关文章

  • 大白话讲讲限流、漏桶和令牌桶

    限流 所谓限流,核心点是限制流出,而不是流入。 怎么理解这句话? 比如去医院看病,如果人非常多的话,很大概率在进去...

  • 基础架构 | 限流算法

    限流算法 令牌桶算法 漏桶算法

  • 漏桶算法与令牌桶算法的区别

    令牌桶算法是通过控制令牌生成的速度进行限流,漏桶算法是控制请求从桶中流出的速度进行限流。简单理解为:令牌桶控制进,...

  • 【Guava】使用Guava的RateLimiter做限流

    一、常见的限流算法 目前常用的限流算法有两个:漏桶算法和令牌桶算法。 1.漏桶算法 漏桶算法的原理比较简单,请求进...

  • Guava-RateLimiter详解

    常用的限流算法有漏桶算法和令牌桶算法,guava的RateLimiter使用的是令牌桶算法,也就是以固定的频率向桶...

  • Zuul 网关限流---Guava RateLimiter

    限流算法有漏桶算法和令牌桶算法,guava的RateLimiter使用的是令牌桶算法也就是以固定的频率向桶中放入令...

  • 2020-06-09

    目录 代理层限流 容器限流 API 限流 时间窗口 漏桶算法 令牌桶算法 总结 为了保护暴露在公网...

  • 高并发下的限流算法

    对于限流常见有两种算法: 漏桶算法 令牌桶算法 漏桶算法 漏桶算法比较简单,就是将流量放入桶中,漏桶同时也按照一定...

  • 常见限流算法及方案

    1.限流 1.1 限流的基本概念 1.1.1 计数器 1.1.2 滑动窗口 1.1.3 漏桶 1.1.4 令牌桶 ...

  • 高并发下的Nginx实用配置 - 限流和黑白名单

    1. 限流算法 漏桶算法 令牌桶算法 更多限流算法相关知识,请查看【单机限流 - 限流算法及隔离策略】[https...

网友评论

    本文标题:大白话讲讲限流、漏桶和令牌桶

    本文链接:https://www.haomeiwen.com/subject/ytmuyktx.html