深入浅出分布式技术原理
陈现麟
伴鱼技术中台负责人,前小米工程师
21241 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
深入浅出分布式技术原理
15
15
1.0x
00:00/00:00
登录|注册

10 | 雪崩(二):限流,抛弃超过设计容量的请求

限流能力和成熟度审视
复杂拓扑调用中的限流
持续迭代维护
压力测试
经验设置
平衡性能和精确性
集中式生成令牌
本地化处理
分配比例模型精确性问题
考虑实例性能差异
总阈值分配
调用时延
故障影响
性能瓶颈
令牌桶算法
外部存储实现
放弃流量整形能力
提高资源利用率
请求获取令牌的速率可变
固定速率生成令牌
增加排队时间
流量整形能力
限制出口流量
缓存请求
抗抖动性差
细粒度时间切分
固定窗口的优化
流量集中问题
抗抖动性差
统计周期内请求数量
定义固定统计周期
漏桶和令牌桶的选择场景
限流作为处理系统故障手段
其他位置手动启用限流
核心链路和服务默认启用限流
限流引入脆弱性
如何确定限流阈值
折中方案
本地化处理
集中式限流
否决式限流 vs 阻塞式限流
客户端限流 vs 服务端限流
令牌桶
漏桶
滑动窗口
固定窗口
多租户情况下保障隔离性
快速失败时考虑调用方重要程度
熔断机制是最后底线
熔断处理方式不够优雅
思考题
总结
限流机制的关键问题
分布式限流
单节点限流
限流算法
为什么需要限流
限流机制总结

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

你好,我是陈现麟。
通过上一节课的学习,我们了解了因为局部故障的正反馈循环而导致的雪崩,可以通过熔断来阻断,这样我们就为极客时间的后端系统,加上了熔断这一根保险丝,再也不用担心小故障被放大成一个全局的故障了,这让极客时间的后端系统,在稳定性上又向前跨进了一大步。
但是有的时候,我们明明知道一个服务的最高处理能力为 10 w QPS ,并且我们也知道这一次活动,这个服务的请求会超过 10 w QPS 。这个时候,如果只有熔断机制,我们就需要等待服务由于过载出现故障后触发熔断,然后再恢复正常,那么系统就是在被动地应对服务请求过载的问题。
其实这是一个典型的限流场景,那么,我们应该如何优雅地处理这个问题呢?在这节课中,我们将一起讨论,保障分布式系统稳定性的另一个方法——限流,从限流的原因入手,分析如何实现限流,再一起讨论限流机制要注意的关键问题,从这三个方面来分析,如何通过限流机制主动处理服务流程过载。

为什么需要限流

限流和熔断是经常一起出现的两个概念,都是用来解决服务过载问题的,那么在有了熔断机制后,为什么还需要限流呢?我认为主要有以下几个方面的原因。
首先,熔断的处理方式不够优雅。回到课程开始的例子,虽然在服务过载的时候,熔断可以避免雪崩的发生,但是熔断机制是被动感知故障,然后再进行处理的,它需要先让过载发生,等系统出现故障后,才会介入处理,让系统恢复到正常。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了分布式系统中的限流问题,包括为何需要限流、限流的实现方法以及限流算法等方面。首先介绍了限流的必要性,指出熔断机制的被动处理方式不够优雅,而限流可以更主动地解决服务流程过载问题,避免系统失控。其次,讨论了限流的实现方法,包括固定窗口、滑动窗口、漏桶和令牌桶算法等,以及单节点和分布式场景下的限流机制的权衡。文章深入浅出地解释了限流算法的原理和应用,为读者提供了全面的限流知识体系。在单节点限流方面,文章探讨了限流机制作用的位置、阻塞式限流和否决式限流的选择。在分布式限流方面,文章提出了集中式限流和本地化处理、以及折中的方案,为读者提供了多种思路和方法。总之,本文全面而深入地探讨了分布式系统中的限流问题,为保障系统稳定性提供了有力支持。文章还探讨了限流阈值的设置和引入的脆弱性,提出在核心链路和核心服务上默认启用限流机制,在其他位置上手动启用限流机制,将其作为处理系统故障的一个手段。文章内容丰富,对于需要了解分布式系统中限流问题的读者具有很高的参考价值。

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

全部留言(7)

  • 最新
  • 精选
  • HappyHasson
    Q:令牌桶和漏桶在使用上有没有很明显的区别(除了上游流量的抖动可能会扩散到下游服务 )?我们业务每次在使用选择时都会犹豫比对很久,最后都选了令牌桶。

    作者回复: 它们两个设计上的区别,令牌桶是限制进入的速率,漏桶是限制出的速率。一般来说,如果下游服务没有非常严格的速率限制,选择令牌桶会更好,它在效率和抗抖动之间的横权更好一些

    2022-02-20
    2
    5
  • 宇智波鼬
    有个小建议:能否在每节课开始或结束时讲解下上节课的问题的参考答案

    作者回复: 非常好的建议👍 由于课程快更新完了,看看怎么来放出参考答案。

    2022-03-29
    3
  • 孙志强
    关于抗抖动能力,令牌桶和漏桶实现层面是如何防抖动的,比如60QPS,是把时间切分到Ms级别来处理吗

    作者回复: 抗抖动主要是依靠桶的缓存能力,稳定的 QPS 控制是用来做流量整形的,精确的控制是依赖更小的时间片和滑动窗口来统计。

    2022-04-21
    1
  • 不吃辣👾
    老师 前面讲的固定窗口和滑动窗口给人的感觉就是不如令牌桶和漏桶。难道固定窗口和滑动窗口就没有应用场景了吗?这两个窗口可以被两个桶替代?

    作者回复: 固定窗口和滑动窗口相比于令牌桶和漏桶实现要简单并且需要的缓存要少,在一些简单的场景,这就是非常大的优势,选型的原则是合适才好。

    2022-04-03
    1
  • 青鸟飞鱼
    老师,觉得检测cpu和内存情况,来实现限流阈值的根据,会不会更好呢?

    作者回复: cpu 和 内存是系统级别的参数,粒度是非常粗的,限流需要做到接口级别,不过 cpu 和内存是非常好的过载指标,在扩容中会使用。

    2022-03-17
    2
    1
  • peter
    Q1:令牌桶部分:“也就是当请求流量突增的时候,上游流量的抖动可能会扩散到下游服务” 有限流,怎么会扩散到下游?什么情况下会扩散到下游? Q2:单节点限流,是说服务端只有一个节点吗? 还是说服务端有多个节点但只在一个节点上进行限流? 从后面看,应该是说某一个服务只有一个实例,即该服务只有一个节点,对吗?

    作者回复: Q1:令牌桶的流程速率是不限制的,所以在桶中的令牌满后,突然来大量的请求,由于令牌足够,所以下游的请求量也会短暂突增。 Q2:“某一个服务只有一个实例,即该服务只有一个节点”是对的,单节点限流是种简化的情况,为后面的分布式限流的讨论做准备。

    2022-02-18
    2
  • Jxin
    1.限流限的是请求数,但哪怕是同接口的每个请求对资源的占用都是不相同的。在一个服务内多个接口的资源是共享的,所以限制单接口并无法阻止其他接口的请求占用导致的服务不可用。你根本没办法把服务的资源平分给每个接口的每个请求,所以限流的值准不了,仅能用来防止特殊时段特殊接口的激增场景导致的服务不可用。所以面向的是服务中可能有激争抢占大量资源的接口,与是否核心链路并没必要因果关系。核心链路上的限流,是在我们限掉了比如供应商拉单这些非核心链路的请求,让出全部资源后,还撑不住时追加的,比如下单。但不是所有核心链路都时常有这种激增场景,比如注册用户。 2.工作中都是eda 用mq,等于都是漏斗。
    2022-02-25
    1
    3
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部