53 | 过载保护与容量规划
许式伟
该思维导图由 AI 生成,仅供参考
你好,我是七牛云许式伟。
软硬件升级与各类配置变更,即发布。
软硬件环境的故障。
终端用户的请求。比较典型的场景是秒杀类,短时间内大量的用户涌入,导致系统的承载能力超过规划,产生服务的过载。当然还有一些场景,比如有针对性的恶意攻击、特定类型的用户请求导致的服务端资源大量消耗等,都可能引发服务故障。
今天我们聊的是故障的第三大类:由终端用户请求导致的故障。它最典型的现象是 “过载”。
过载的成因与后果
我们要思考的第一个问题是:过载的原因是什么?
所谓过载,最直白的理解,当然就是因为活跃的用户超过了资源的承载能力范围,导致某类资源耗尽,进而体现出系统过载。
本质上,这是一个容量规划的问题。
资源怎么会不够了?往往有以下这么几个成因:
其一,用户增长太快了,资源规划上的预期没有跟上,导致资源储备不足。
其二,部分资源因为故障而下线,导致线上活跃的资源不足。举个例子,假设我们做了双机房容灾,但是往往这仅仅是架构上的容灾。从资源储备角度来说,我们需要按 2 倍的容量来做资源规划,才有可能在某个机房下线后系统不出问题。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了云服务中常见的过载问题及其解决策略。过载是指活跃用户超过资源承载能力范围,导致资源耗尽,是一个容量规划的问题。文章指出过载的成因包括用户增长过快、资源故障、关键资源负载能力变低以及重试导致的请求次数放大。过载会导致资源耗尽,如CPU负荷过高,请求变慢,进而影响其他资源,甚至形成雪崩效应。为了及早发现过载,文章建议基于关键资源如CPU和内存等来衡量服务的可用容量,而非简单地基于QPS设置阈值。这种基于基础资源用量的估算方法更为稳定可靠。文章强调了过载问题的严重性,以及通过合理的容量规划和监控方法来预防和解决过载问题的重要性。文章还介绍了服务端和客户端在应对过载方面的具体技术手段,包括过载保护、容量规划、服务优雅降级、重试、请求重要性级别标记、请求延迟和截止时间设置以及客户端侧的节流机制。这些策略旨在降低过载发生的概率,避免雪崩效应,以及在发生过载时最大限度地减少损失。通过本文的总结,读者可以快速了解云服务中过载问题的成因、影响以及相应的解决策略,为提高系统稳定性和可靠性提供了有益的参考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《许式伟的架构课》,新⼈⾸单¥68
《许式伟的架构课》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(13)
- 最新
- 精选
- 小名叫大明天呐,这么好的内容怎么没几个人交流呢。 前一段时间微信支付故障,前端没有关闭微信支付通道,后端其他逻辑因为失败在疯狂重试(不是有节奏的延长重试时间),服务端也没有做限流,差点导致悲剧。 过载保护确实很重要。 对于老师说的:基于QPS还是基于资源使用率,我们常规压测是基于QPS。容量规划上可以容忍一半的机器故障。
作者回复: 目前我看到的的确也是基于qps比较常见一些
2019-11-12211 - neohope1、技术的价值是在业务中体现的,业务系统出现问题时,要忍住自己查到问题根源的冲动,第一时间恢复业务。这是技术人员成长的必经之路。 2、在做好熔断降级策略之前,重试策略会将问题放大,很容易就成为雪崩的罪魁祸首。 3、在雪崩的时候,服务的自动恢复,业务的自动重试,会导致雪崩不止。 4、容量规划时,同时也要考虑业务的特性,是高CPU服务,还是高IO服务。不同类型服务,线程数设置、监控指标,熔断降级策略要有不同的考量。 5、多机房的一个大问题是数据同步,流量问题反而有更成熟的方案。
作者回复: 👍
2021-10-286 - Charles许老师,这几讲读下来,有一个疑问请教下: 每个人所处的项目规模有很大的不同,有的没做服务化还在跑负载均衡、有的可能到了七牛云的体量、有的可能是微博那种体量,另外就是人力可能也不允许,那么有什么衡量指标或依据可以判断一个服务端相关的SRE工作是否做到位?以此指导每个阶段应该做哪些最主要的事情?谢谢
作者回复: 用户量不大的时候,方案简陋些没关系的,毕竟出问题影响面也小,所以怎么平衡每个公司有自己的一杆秤
2019-11-012 - Tesla老师,请问重试是将请求失败的请求用代码直接再次发起请求吗?这会增加代码量,怎么判断一个接口需不需要重试的机制呢?
作者回复: 一般用比较统一的重试机制
2019-12-201 - 沉睡的木木夕关于重试这一块,我还有点心得。就是在编码的时候,要求团队对 api 返回的错误甄别,如果是系统未知错误就不重试。如果是类似于远程连接失败,规定时间超时,等网络层面而非业务逻辑层面的就要重试。但是也有如下问题 1、基于 QPS 这个我知道,但是基于资源使用率,这个数据是如何得来的?前者可以通过站点访问统计得知,后者呢? 2、“为每个用户设置独立的负载配额”,“当某个客户端检测到,最近的请求错误中的一大部分都是由于 “配额不足”错误导致时,该客户端就开始自行限制请求速度,限制它自己生成请求的数量” 这里我没懂,这里的负载配额是说什么?指分配如运存之类的资源?如何在一个正在运行的 app 中的用户设置所谓的“负载配额”呢。 这方面属于什么范畴,我想查资料了解下。我都不知道怎么查关键字搜资料了
作者回复: 1、资源使用率一般操作系统都会有统计。 2、普通qps限制是全局的,它可能会因为某个用户访问异常而影响其他用户,所以比较精细的qps限制是既限制全局qps配额,也限制单用户的qps配额。
2020-03-182 - 诗泽负载均衡处的过载保护是怎么做的?
作者回复: 比如,负载均衡是业务服务的前端,上面介绍的客户端侧能够做的过载保护机制都是可以考虑的。
2019-11-012 - Aaron Cheung用量的确很好 更好的解决方案,是直接基于该服务所依赖的关键资源,如 CPU 和内存等,来衡量服务的可用容量。我们为该服务预留了多少资源,这些资源已经用了多少,预计还能够用多久。2019-11-012
- ifelse学习打卡2023-09-25归属地:浙江
- 程序员Artist这一节很不错。指数等待重试、本地自适应拒绝、优化手段可能会导致大故障。2021-11-12
- 不温暖啊不纯良过载问题是由于用户增长量大大超过预期而导致,后台CPU的使用率达到100这个时候它的处理速度就非常的慢,再加上服务端的缓存机制和并发处理机制,不会在第一时间就拒绝请求,还是正常接受请求直到所有资源都被填满。 之前遇到过,因为频繁重复访问而导致数据库服务崩溃的情况,比如有一个定时任务因为执行失败而不断的重复执行,请每一次执行都要使用数据库资源,且在执行失败的时候没有来得及释放资源。然后就会导致数据库连接直接爆表。这个时候要么重启数据库,重置连接数,要么停掉这个服务来断开连接。 关于CPU的使用率达到100的情况,以前在工作中遇到过,就是在基于库表进行数据抽取清洗的时候,有三个程序并发的给数据库写入数据,这个时候安装数据库的那台服务器的CPU直接100%,速度特别的慢,最后是将数据库的资源进行扩容之后,才解决了这个问题。 老师今天讲的客户端节流策略,不知道是针对每一个用户的请求来节流呢,还是对整个客户端的请求来做一个节流,比如说按照某种标记,只发送重要请求,如果是按照按照用户来做,那么可能就只有VIP用户的所有请求能发送成功了,在系统过载的情况下。2021-06-10
收起评论