容量保障核心技术与实战
吴骏龙
前阿里巴巴本地生活 P8 高级专家
5387 人已学习
新⼈⾸单¥29
登录后,你可以任选2讲全文学习
课程目录
已完结/共 19 讲
容量保障核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

04 | 容量治理的三板斧:扩容、限流与降级

你好,我是吴骏龙。
在前面几讲中,我谈到了容量测试和容量指标分析等工作,这些工作能够帮助你验证服务是否存在容量问题,并定位问题出现的原因。
找到问题以后,我们需要排除这些容量风险,确保服务的稳定性,这就是容量治理需要做的工作了。优秀的容量治理工作不仅仅能通过一系列手段解决已出现的容量问题,而且还能预防容量隐患,做到防患于未然。
下面,我们就来认识一下三个常见的容量治理手段:扩容、限流和降级,这三个手段分别基于不同的视角,在容量保障中发挥着各自的价值。在这些内容的讲解中,我会从我经历过的实际案例出发,告诉你一些实践中的难点和坑点,希望能带给你更多的收获。

扩容的实践要点

说到扩容,不得不提到在软件架构设计中经常出现的一个词,叫做“伸缩性”,更高端的说法叫“弹性”。以目前互联网服务的用户体量,已经不太可能通过单台服务器去支撑所有的流量,流行的做法是将多台服务器组成集群统一对外提供服务,伸缩性指的就是能够往这个集群中不断加入新的服务器资源,以应对流量增长的能力,而这个加入新的服务器的过程,就是扩容
如果容量瓶颈发生在服务器资源层面,扩容恐怕是最直接也是最“暴力”的容量提升手段了,尤其是在服务容器化盛行的当下,拉起一个新服务实例,往往只需要秒级时间,扩容的成本得到了有效的降低,能够快速消除容量风险。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

容量治理是保障系统稳定性和性能的重要手段。本文介绍了扩容、限流和降级这三种常见的容量治理手段。在扩容方面,强调了性能优化的重要性,提倡通过异步处理、读写分离、增加缓存、SQL调优等方式来腾出容量,避免无脑扩容和滥用扩容。同时,指出扩容需要联动系统整体资源共同规划,不能只关注服务资源,并且强调了对底层资源的影响也需要同时考虑。在限流方面,详细介绍了不同的限流策略和限流位置,并强调了限流应该是分层次的,根据业务特点选择合适的限流策略,确保限流策略的健壮性和可靠性。而降级则是从系统功能角度出发,人为或自动地将某些不重要的功能停掉或者简化,以降低服务负载,这部分释放的资源可以去支撑更核心的功能。文章还提到了降级的技术实现、分级策略和频繁演练的重要性。总的来说,本文通过实际案例讲解了扩容和限流的实践要点,提醒读者在容量治理中要谨慎对待扩容和限流,避免不经思考直接扩容,而是要努力通过性能优化和分层次的限流体系来解决容量问题。容量治理是一个全方位、体系化的思考认识,需要多角度覆盖容量保障的方方面面。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《容量保障核心技术与实战》
新⼈⾸单¥29
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • 继贤
    老师,咨询下,对于一些公共服务,会同时支撑好多个产品,如果按照每个产品每个场景业务指标来规划,可能公共服务的规划容量会很大,实际应用中,所有产品并不会同时出现峰值的情况,那么问题来了,对于公共服务,如何做成本最优估算?

    作者回复: 好问题!我来简化一下问题,考虑有一个公共服务A,支撑了业务服务B和C。B和C不一定会在某个时间点同时出现峰值,但是综合起来对于到达公共服务A的总压力来说,一定会有一个峰值点X,在这个峰值点X上B和C不一定是峰值,但它们对于A的累计压力值是最高的。于是,在X这个峰值点的业务场景就是你应该考虑的容量预估的基准场景。 当然,前提是B和C要保证能够承载各自的峰值压力。

    2021-05-20
    2
    3
  • 远航
    总结:限流的方式有两种,定量和定速。老师的问题应该用定速来解决,就是漏桶算法,但是这个桶要很大不能丢弃任何请求。

    作者回复: 精彩的回答!

    2022-08-26归属地:上海
    1
  • 于加硕
    本章主要是业务层的容量保障方案。 怎么避免无脑扩容呢?例如从运维视角,看到CPU使用率确实很高了,就应该扩容。运维从哪些方向,指标来判断业务代码需要优化呢?

    作者回复: 开玩笑的说,其实这是一个习惯问题,因为代码总是有优化空间的,但是不想优化也总是有理由的,哈哈。 建立这一习惯的方法是通过流程建设,将代码优化的流程植入到容量风险的防治工作中去。例如,运维可以与各团队的架构师合作,列出一些性能优化的检查项(如连接池大小、缓存大Key/热Key、慢SQL检测等),在提交扩容申请时,先通过这些检查项证明代码已经得到优化,再去执行扩容操作。在第14讲的最后部分,我还提到了一种激励措施来避免无脑扩容,你可以参考应用。 当然,应急响应不在其列,如果要紧急止损,该扩容还是要先扩容。

    2022-06-23
  • 肥宅快乐饮^_^
    既然第三方接口有明确的tps上限,那么应该使用流量整形的方式让所有请求以tps=5的速率匀速通过系统。对应的限流策略可以使用漏桶算法或者令牌桶算法

    作者回复: 理解的非常准确!

    2021-05-28
  • Roy Liang
    我觉得这个系统是内部服务,即使高峰期流量也有限,限流只针对第三方接口,使用简单的固定窗口就可以了

    作者回复: 虽然是内部系统,但是如果工资没及时发出去也挺可怕的吧,哈哈。可以再想一想,针对这里的第三方接口限流,有没有流量整形和平滑限流的要求?

    2021-05-20
  • Chuck
    消息队列异步处理
    2021-07-13
    1
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部