分布式技术原理与算法解析
聂鹏程
智载云帆 CTO,前华为分布式 Lab 资深技术专家
39663 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 43 讲
分布式技术原理与算法解析
15
15
1.0x
00:00/00:00
登录|注册

29 | 分布式高可靠之流量控制:大禹治水,在疏不在堵

匀速排队
预热
直接拒绝
直接拒绝
线程池
适用场景
适用场景
宽进严出
控制每个服务器的请求数
滑动窗口
区别
通过QPS指标进行流量控制
通过并发线程数进行流量控制
令牌桶策略
漏桶策略
消息队列
分布式系统中的流量控制
网络传输中的流量控制
思考题
知识扩展:拥塞控制
Sentinel流量控制工作原理
分布式系统流量控制策略
流量控制
分布式系统流量控制

该思维导图由 AI 生成,仅供参考

你好!我是聂鹏程。今天,我来继续带你打卡分布式核心技术。
在上一篇文章中,我带你学习了分布式高可靠中的负载均衡。负载均衡的核心在于,将用户请求均匀分配到多个处理服务器处理,以解决单个服务器的单点瓶颈问题。但,如果用户请求数非常多的话,即便实现了负载均衡,服务器能力达到上限,还是无法处理所有的用户请求。
比如,类似双十一、双十二的秒杀场景,用户流量突增时,即使做了负载均衡,我们仍然会感受到点击抢购时,需要等待较长的时间。这背后的原理是什么呢?
你是不是想到了,这是因为系统控制了用户的请求量呢?没错,这就是今天我们要一起打卡的流量控制技术。

什么是流量控制?

说到流量控制,如果你学过计算机网络的话,第一反应肯定是网络传输中的流量控制。网络传输中的流量控制,就是让发送方发送数据的速率不要太快,让接收方来得及接收数据,具体的实现方法就是滑动窗口。
简单来讲,滑动窗口指的是,在任意时刻,发送方都维持一个连续的允许发送的数据大小,称为发送窗口;接收方也会维持一个连续的允许接收的数据大小,称为接收窗口。每次发送方给接收方发送数据后,必须收到接收方返回的确认消息,发送窗口才可向后移动,发送新的数据。
接下来,我们通过一个简单的例子,来看看滑动窗口在网络流量控制中,是如何发挥作用的吧。如图所示,发送窗口和接收窗口大小均为 1,发送方发送数据 D1 后,只有接收到来自接收方的确认消息 ACK,发送窗口才可向后移动,即发送方才可以发送后续数据 D2。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

分布式系统中的流量控制技术是关键的,本文重点介绍了漏桶策略和令牌桶策略。漏桶策略通过固定速率处理请求,适用于间隔性突发流量;而令牌桶策略则通过令牌控制请求处理,适用于有突发特性的流量。此外,文章还介绍了阿里开源的Sentinel流量控制框架,以及通过并发线程数和QPS指标进行流量控制的方式。总的来说,本文通过实际案例和技术原理,帮助读者了解了分布式系统中流量控制的重要性和常用策略,为读者提供了一定的技术参考和思路。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式技术原理与算法解析》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • Jackey
    之前做商城的时候设计过限流系统,基本上就是这两种实现。稍微多做了一点就是我们在前端也做了一定的策略,就是把用户短时间内的请求合并,我们知道在秒杀的时候大多数人都会疯狂点秒杀按钮,而实际上可能只有第一次请求是有效的,因此前端可以做一个限制,这样可以有效减少发给服务器的请求数量
    2019-12-04
    18
  • xingoo
    背压(反压),通过服务器端的性能监控,延迟客户端的发送请求,比如HBase的客户端提交过程,会参考服务端jvm,内存等的使用情况,决定客户端休眠多长时间。
    2019-12-04
    18
  • 安排
    消息队列控制流量的策略本质也是漏桶吧?不管发给消息队列的速率是多大,服务器在消息队列中取出请求的速率是固定的。
    2019-12-04
    7
  • 有铭
    我有个疑惑,既然说令牌策略,一般把令牌数限制为系统最大处理能力略低一点的数目,那么我只要把漏桶策略的执行任务速度调整为令牌策略的令牌数目,那起的作用难道不是和令牌策略的作用相同,此时网盘感觉它们没区别啊
    2019-12-04
    8
    2
  • 本节讲的是限流策略怎么做,实际开发中没有做过,不过有两点我想表达一下,第一限流本质就是堵而不是疏,只是请求的流量可以拒绝或让其等待,而水流是不能这么容易拒绝的,第二点通常系统基础服务会有限流措施,应用层会采用其他的方式,当然,秒杀抢购的场景因为货物有限,也是需要的。 限流的核心作用是为了保护系统的可用性,防止系统资源耗尽导致系统不可用。反过来,如果系统资源是充足的,也就不用限流啦!这就需要流量评估、压测、扩容、全链路压测了,另外,实际工作中常常使用降日志、降级服务的方式来保证系统的可用性。
    2020-02-20
    1
    1
  • 随心而至
    感觉Sentinel是针对ThreadPoolExecutor,以及使用的队列做了定制,不知道是不是这样
    2019-12-04
    1
  • Geek_383ffd
    老师可以讲下 Sentinel 的滑动窗口机制吗
    2021-10-14
  • dandy
    给出滑动窗口,令牌桶,漏桶的代码
    2020-11-05
  • Dale
    使用分布式缓存来缓解高并发请求
    2020-01-20
  • 张先生
    springMVC怎么做限流呢? 请求进来然后去判断线程池有没有空闲资源,有就用线程去处理,没有就直接抛异常???
    2020-01-07
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部