29 | 分布式高可靠之流量控制:大禹治水,在疏不在堵
聂鹏程
该思维导图由 AI 生成,仅供参考
你好!我是聂鹏程。今天,我来继续带你打卡分布式核心技术。
在上一篇文章中,我带你学习了分布式高可靠中的负载均衡。负载均衡的核心在于,将用户请求均匀分配到多个处理服务器处理,以解决单个服务器的单点瓶颈问题。但,如果用户请求数非常多的话,即便实现了负载均衡,服务器能力达到上限,还是无法处理所有的用户请求。
比如,类似双十一、双十二的秒杀场景,用户流量突增时,即使做了负载均衡,我们仍然会感受到点击抢购时,需要等待较长的时间。这背后的原理是什么呢?
你是不是想到了,这是因为系统控制了用户的请求量呢?没错,这就是今天我们要一起打卡的流量控制技术。
什么是流量控制?
说到流量控制,如果你学过计算机网络的话,第一反应肯定是网络传输中的流量控制。网络传输中的流量控制,就是让发送方发送数据的速率不要太快,让接收方来得及接收数据,具体的实现方法就是滑动窗口。
简单来讲,滑动窗口指的是,在任意时刻,发送方都维持一个连续的允许发送的数据大小,称为发送窗口;接收方也会维持一个连续的允许接收的数据大小,称为接收窗口。每次发送方给接收方发送数据后,必须收到接收方返回的确认消息,发送窗口才可向后移动,发送新的数据。
接下来,我们通过一个简单的例子,来看看滑动窗口在网络流量控制中,是如何发挥作用的吧。如图所示,发送窗口和接收窗口大小均为 1,发送方发送数据 D1 后,只有接收到来自接收方的确认消息 ACK,发送窗口才可向后移动,即发送方才可以发送后续数据 D2。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
分布式系统中的流量控制技术是关键的,本文重点介绍了漏桶策略和令牌桶策略。漏桶策略通过固定速率处理请求,适用于间隔性突发流量;而令牌桶策略则通过令牌控制请求处理,适用于有突发特性的流量。此外,文章还介绍了阿里开源的Sentinel流量控制框架,以及通过并发线程数和QPS指标进行流量控制的方式。总的来说,本文通过实际案例和技术原理,帮助读者了解了分布式系统中流量控制的重要性和常用策略,为读者提供了一定的技术参考和思路。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式技术原理与算法解析》,新⼈⾸单¥59
《分布式技术原理与算法解析》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(17)
- 最新
- 精选
- Jackey之前做商城的时候设计过限流系统,基本上就是这两种实现。稍微多做了一点就是我们在前端也做了一定的策略,就是把用户短时间内的请求合并,我们知道在秒杀的时候大多数人都会疯狂点秒杀按钮,而实际上可能只有第一次请求是有效的,因此前端可以做一个限制,这样可以有效减少发给服务器的请求数量2019-12-0418
- xingoo背压(反压),通过服务器端的性能监控,延迟客户端的发送请求,比如HBase的客户端提交过程,会参考服务端jvm,内存等的使用情况,决定客户端休眠多长时间。2019-12-0418
- 安排消息队列控制流量的策略本质也是漏桶吧?不管发给消息队列的速率是多大,服务器在消息队列中取出请求的速率是固定的。2019-12-047
- 有铭我有个疑惑,既然说令牌策略,一般把令牌数限制为系统最大处理能力略低一点的数目,那么我只要把漏桶策略的执行任务速度调整为令牌策略的令牌数目,那起的作用难道不是和令牌策略的作用相同,此时网盘感觉它们没区别啊2019-12-0482
- 钱本节讲的是限流策略怎么做,实际开发中没有做过,不过有两点我想表达一下,第一限流本质就是堵而不是疏,只是请求的流量可以拒绝或让其等待,而水流是不能这么容易拒绝的,第二点通常系统基础服务会有限流措施,应用层会采用其他的方式,当然,秒杀抢购的场景因为货物有限,也是需要的。 限流的核心作用是为了保护系统的可用性,防止系统资源耗尽导致系统不可用。反过来,如果系统资源是充足的,也就不用限流啦!这就需要流量评估、压测、扩容、全链路压测了,另外,实际工作中常常使用降日志、降级服务的方式来保证系统的可用性。2020-02-2011
- 随心而至感觉Sentinel是针对ThreadPoolExecutor,以及使用的队列做了定制,不知道是不是这样2019-12-041
- Geek_383ffd老师可以讲下 Sentinel 的滑动窗口机制吗2021-10-14
- dandy给出滑动窗口,令牌桶,漏桶的代码2020-11-05
- Dale使用分布式缓存来缓解高并发请求2020-01-20
- 张先生springMVC怎么做限流呢? 请求进来然后去判断线程池有没有空闲资源,有就用线程去处理,没有就直接抛异常???2020-01-07
收起评论