左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家
180928 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 119 讲
左耳听风
15
15
1.0x
00:00/00:00
登录|注册

49 | 弹力设计:限流设计

带权重的队列
优先级队列
基于响应时间的动态限流
令牌桶算法
漏斗算法
队列算法
计数器方式
弹性伸缩
延时处理
特权请求
服务降级
拒绝服务
限流的设计要点
限流的实现方式
限流的策略
限流设计
性能设计篇
管理设计篇
弹力设计篇
分布式系统设计模式

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

你好,我是陈皓,网名左耳朵耗子。
保护系统不会在过载的情况下出现问题,我们就需要限流。
我们在一些系统中都可以看到这样的设计,比如,我们的数据库访问的连接池,还有我们的线程池,还有 Nginx 下的用于限制瞬时并发连接数的 limit_conn 模块,限制每秒平均速率的 limit_req 模块,还有限制 MQ 的生产速,等等。

限流的策略

限流的目的是通过对并发访问进行限速,相关的策略一般是,一旦达到限制的速率,那么就会触发相应的限流行为。一般来说,触发的限流行为如下。
拒绝服务。把多出来的请求拒绝掉。一般来说,好的限流系统在受到流量暴增时,会统计当前哪个客户端来的请求最多,直接拒掉这个客户端,这种行为可以把一些不正常的或者是带有恶意的高并发访问挡在门外。
服务降级。关闭或是把后端服务做降级处理。这样可以让服务有足够的资源来处理更多的请求。降级有很多方式,一种是把一些不重要的服务给停掉,把 CPU、内存或是数据的资源让给更重要的功能;一种是不再返回全量数据,只返回部分数据。
因为全量数据需要做 SQL Join 操作,部分的数据则不需要,所以可以让 SQL 执行更快,还有最快的一种是直接返回预设的缓存,以牺牲一致性的方式来获得更大的性能吞吐。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

分布式系统设计模式中的弹性设计是保护系统在过载情况下不出现问题的重要手段之一。本文介绍了限流设计在分布式系统中的重要性和实现方式。限流的策略包括拒绝服务、服务降级、特权请求、延时处理和弹性伸缩,通过这些策略可以有效控制并发访问速率。文章详细介绍了限流的实现方式,包括计数器方式、队列算法、漏斗算法和令牌桶算法。这些算法在处理请求时都有各自的特点和适用场景,可以根据实际情况选择合适的限流算法来保护系统不受过载影响。 文章还提出了基于响应时间的动态限流设计,通过记录后端请求的响应时间并动态感知系统压力来自动化地限流。这种设计借鉴了TCP协议的拥塞控制算法,能够根据系统压力自适应地调整限流策略,从而更好地保护系统不受过载影响。此外,文章还总结了限流设计的要点,包括为用户承诺SLA、阻止某一用户耗尽资源、应对突发流量和节约成本等目的,以及在设计上需要考虑的一些因素。 总的来说,本文深入浅出地介绍了分布式系统中限流设计的重要性、实现方式和要点,为读者提供了深入了解分布式系统限流设计的重要知识。同时,文章还提出了基于响应时间的动态限流设计,为读者提供了新的思路和方法。文章内容丰富,对于正在设计或优化分布式系统的技术人员具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(43)

  • 最新
  • 精选
  • 华烬
    期待秒杀的文章,不过好像要等挺久的

    作者回复: 是的,中间还会有区块链加塞

    2018-03-21
    3
  • shufang
    限流看着怎么有点像熔断?

    作者回复: 我反而觉得熔断是限流的一种😏

    2018-03-20
    10
    3
  • 理帆
    对于要代码的同学我想说,工作久了你就会发现最重要的是思想、是方向,而不是实现、代码。并不是说代码本身不重要,但如果知道解题思路,那就成功了一半。如果没有思路,或者思路错了,那写代码毫无用处,甚至会起到反作用。思想决定高度,这不是一句空话。
    2020-04-16
    9
    44
  • LI
    文章都很好,就是缺少代码落地,看起来很理论
    2018-05-25
    10
    31
  • 天草二十六
    建议留言要代码的同学们,参考阿里Sentinel
    2019-11-13
    9
  • 张乐乐
    我们动态限流一般是根据资源来进行的,CPU/内存/带宽,存储对于出流部件可以转为带宽。根据响应时间来限流这个想起来比较难实施,后面再研究下。 此外,限流也可以考虑做多级,不同阶段不同的阈值限制,分层去限制,比如操作体统OS层,链接处理,业务处理。 也需要,考虑针对异常用户的识别限制,很多时候,一个异常用户带来的影响会特别大。
    2018-04-12
    1
    7
  • 权乐观
    感觉漏斗是最弱鸡的队列啊
    2018-04-01
    4
  • 秋天
    目前在做一个异步压测的东西,对于异步请求可以及时释放线程,导致发送请求的速率过快导致网络缓冲区被打满或者后端业务线程池耗尽,根据异步回调的成功和失败率,做了一个动态限流的算法,用于调节一个趋近于最优并发的一个量,不会导致网络缓冲区打满或者业务线程池耗尽。其实觉得目前市面上动态限流,还没有比较好的开源方案
    2020-06-09
    3
  • aoe
    第二遍看,才注意到实现的相关算法。第一次看热闹,感觉会了,面试的时候被问到,居然一脸懵!
    2020-04-10
    3
  • Star
    熔断是限流的一种怎么理解?能不能描述一下熔断和限流的关键区别?
    2018-10-19
    3
    3
收起评论
显示
设置
留言
43
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部