容量保障落地四步走

简介: 任何项目在实施前都需要明确目标和衡量指标,否则很容易失去方向,最后的结果也会南辕北辙,容量保障也不例外。

上篇文章介绍了和容量保障相关的理念和特点,有同学私信我说希望介绍更详细的落地步骤。


这篇文章,结合我自己的实践经验和其他人的应用实践,为大家介绍下容量保障落地的几个步骤和注意细节。


一般来说,无论是什么技术项目,都可以拆成这几个步骤来落地:


  • 明确目标和衡量结果的指标;
  • 制定落地实施方案并进行验证;
  • 针对验证结果进行分析是否达到预期;
  • 项目完结后不断复盘迭代进行维护优化;


容量保障在实际工作中落地也可以遵循这几个步骤,下面的内容我也会从这几个方面来说明。


明确容量保障的目标和指标


任何项目在实施前都需要明确目标和衡量指标,否则很容易失去方向,最后的结果也会南辕北辙,容量保障也不例外。


同时要明确一点:任何技术都是为业务服务的,技术要支撑业务目标更好达成,业务目标达成才能体现技术的价值


那么容量保障的目标是什么?我认为是如下两点:


  1. 降本:在保障线上业务稳定运行的情况下降低保障的成本(容量规划);
  2. 预防:解决已知的线上容量问题,提前进行风险评估预防未知的问题(容量治理);


我在之前软件工程相关的文章中提到过,要做到更好的质量保障,要考虑三要素:范围、时间、成本。


同理,要做好容量保障,成本因素是不可忽视的问题。这里的成本主要指硬件成本、人力成本以及协调沟通成本。


因为基于硬件部署的服务其本身的性能受制于物理硬件制约,所以成本因素是首先要考虑的。同时,为了应对线上的一些突发情况或者其他因素,要保障系统可以有弹性的处理能力,因此系统的资源使用率也要保持在一个“安全水位”。这一点在互联网业务特别是电商大促是一个很典型的例子。


以我之前经历的项目而言,类似电商大促“安全水位”都是保持在40%左右,当然控制的好可以提升为50%(这又是容量治理的范畴了,而且要考虑到一些预案的作用比如限流降级熔断)。


确定了降本和预防的目标后,要针对目标进行量化,以确保目标可以有效达成。如果目标不能量化,那本身就难以实施常见的量化指标有如下几种:


  • SLA(服务等级协议):主要是 SLI+SLO。详细内容请我之前的文章:《SRE实战手册学习笔记之切入SRE》;
  • QPS/TPS/99R/Error%:这些关键指标表明系统能否在业务可接受范围内支撑预期的流量并且成功率较高;
  • 用户体验:这看似是一个定性的描述,其实可以拆解为几个更详细的指标和改进措施,举个例子:


之前公司的APP在访问商品详情页超时时会在页面放一个刷新按钮,用户可以不断点击,这其实相当于用户的未成功请求在不断重复,很影响用户体验。我们是怎么优化的呢?首先在类似商品详情的页面加一个遮罩,如果访问超时就弹出友好提示,并且在网关层进行合理的限流。这样既降低了系统的实时压力,也提升了用户下单时的感知体验。


容量测试如何进行实施验证


确定了容量保障的目标和量化指标之后,就可以针对性进行实施验证,这个实施验证过程也称之为容量测试。


上篇文章《容量测试解决了什么问题》已经介绍过容量测试的概念了,这里重点说明下容量测试的几个主要实施步骤:


确定容量测试实施范围


容量测试在落地初始阶段,建议小范围开展,这样可以更快验证和有效反馈,因此确定测试范围是很有必要的。确定测试范围一般可以从如下两个角度切入:


  1. 故障驱动:即出现了容量问题,针对性进行验证;
  2. 风险驱动:评估容易出现问题的风险点,将其纳入容量测试范围。常见的风险点如下:

a.关键路径上的关键服务:比如电商的订单、库存、支付服务;

b.有明显峰值流量的服务:比如秒杀、限时抢购、抽奖等服务;

c.对时延比较敏感的服务:一些底层或公共技术组件比如网关;

d.资源利用率较高的服务:比如搜索/推荐服务对内存要求比较高;

e.其他:新上线服务、已经存在风险的服务、历史经常发生故障的服务


科学合理开展容量测试


一般来说实施容量测试的步骤和常规的压测没什么区别,主要的步骤也无非如下几项:


  1. 设计测试方案;
  2. 测试方案评审;
  3. 前期测试准备(比如脚本和数据);
  4. 容量测试执行;
  5. 测试结果记录分析;
  6. 不断复盘持续改进;


有一点需要明确的是:容量测试是一种验证手段,不是测试手段(即先设计高性能高可用的服务,再通过容量测试去验证是否达到预期效果。而不是反复测试找性能瓶颈再想办法优化)


针对验证指标进行容量分析


其实容量测试的结果分析方法和性能测试没啥区别,没有需要特意说明的,不过这里还是列举几点注意事项供参考:


1.响应时间:相比于平均响应时间,更应该关注分位线,比如95rt,99rt;

2.请求&业务成功率:性能测试追求的是更高的tps和更低的rt,但是所有的技术指标都是建立在业务成功的基础上(举例:下单接口状态码返回200,但业务提示未查询到库存,这就是典型的技术正确业务失败(未成交));

3.资源使用率:常见的有cpu%和memery%,很多同学认为要降低资源使用率,其实不然。原因有如下几点:

a.不同的业务对资源的耗用和要求不同,比如搜索和推荐业务是计算密集型,常规的读写业务是cpu密集型;

b.资源使用率只是一个结果和现象,表明当前服务的某个资源并不繁忙,并不能说明其他地方不存在性能瓶颈;

4.性能拐点:这是很多同学容易陷入的误区,非要不断加压找到性能拐点。其实服务性能是否达到瓶颈,需要依靠服务端的各项指标结合业务场景去判断,而不是不断加压来判断。

5.指标抖动:这个也称之为指标毛刺,因为常见的可视化监控系统都是通过各种图表折线来展示。很多时候线上的容量故障都是由于无人在意也不明原因的“毛刺”导致的。指标出现抖动说明存在超出我们预期的情况,如果不重视,久而久之很容易出现问题。


容量治理最常见的几种方法


容量规划是容量保障的核心环节和难点,而容量治理则是一个长期持续的预防性建设工作。


容量治理从更高维度来看也是服务治理的范畴。而这些方法,又可以统称为预案(参考文章:《聊聊稳定性预案》)。


我在之前的文章中曾阐述过我的观点(参考文章:《高可用和性能优化》):


  • 性能提升三板斧:扩容、升配、加缓存
  • 容量治理四板斧:限流、熔断、降级、隔离


这里摘取部分内容,供大家参考:


1.扩容:应用计算能力受限于硬件资源,只要应用服务具备弹性扩容的特点,完全可以用扩容来提升性能;

2.升配:应用计算能力受限于硬件资源,提升硬件资源的配置从某种程度上来说就是在提升应用服务的处理能力;

3.缓存:缓存的作用就是减少请求的访问链路和过程耗时,降低耗时就是在提升单位时间内应用服务的处理能力;

4.限流:控制访问应用的流量在系统承载范围内;

a.在业务请求入口(网关)限流,避免内部互相调用放大流量;

b.限流是个演进状态,从连接池、IP、指定SQL到更细的层级粒度做限流;

c.每个调用层都做限流,每个应用先保证自己可用,对其他依赖调用要做到“零信任”;

5.降级:强依赖通过熔断做紧急处理,弱依赖提前主动降级;

a.主动降级:提前进行风险识别,然后针对性降级,可降低已知的风险;

b.紧急降级:假设出现重大的问题,才需要决策是否启用的方案(风险较大);

c.预案平台:预案平台的目的是留痕,方便后续把限流降级等配置恢复回来;

6.熔断:熔断下游强依赖的服务 ;

a.例如:双11零点前半小时, 动态推送,把日志关掉;

b.真正流量来的时候,留一台机器来观察错误和异常的日志;

7.隔离:通过身份识别做好核心/非核心业务隔离;

a.RPC group分组:假设有100个节点,40个给核心业务(交易),60个给其他业务;

b.业务身份:中台架构可通过业务身份把订单秒杀等应用打上标记,便于隔离区分;


PS:注意!无论是限流还是降级以及熔断和隔离,本质上对业务都是有损的。即在尽可能保障服务可用的情况下提供业务可用,保障业务目标的达成。这是一个需要不断验证和评估投入产出比的过程。

相关文章
|
运维 监控 算法
稳定性保障6步走:高可用系统大促作战指南!
年年有大促,大家对于大促稳定性保障这个词都不陌生,业务场景尽管各不相同,“套路”往往殊路同归,全链路压测、容量评估、限流、紧急预案等,来来去去总少不了那么几板斧。跳出这些“套路”,回到问题的本质,我们为什么要按照这些策略来做?除了口口相传的历史经验,我们还能做些什么?又有什么理论依据?
稳定性保障6步走:高可用系统大促作战指南!
|
4月前
|
物联网 测试技术 持续交付
持续部署的内涵和实施路径问题之持续部署过程中需要控制过程成本并保持高效的问题如何解决
持续部署的内涵和实施路径问题之持续部署过程中需要控制过程成本并保持高效的问题如何解决
|
消息中间件 缓存 监控
四个步骤,教你落地稳定性保障工作
本文将稳定性保障工作归纳为 梳理异常情况->配置监控告警->评估影响面->预定解决方案 四个步骤。从四个步骤详细介绍稳定性保障工作的落地方法。
49814 1
四个步骤,教你落地稳定性保障工作
|
域名解析 网络协议 数据可视化
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(2)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(2)
212 0
|
SQL 监控 关系型数据库
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(3)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(3)
202 0
|
监控 测试技术 UED
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(1)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(1)
298 0
|
7月前
|
存储 NoSQL 测试技术
质量与效率并重,测试左移助力块存储技术研发
修复一个Bug的成本在不同阶段有着天壤之别,发现问题越早,修复代价便越低。本文讲述了阿里云块存储在真实业务场景中的测试左移实践。
197 1
质量与效率并重,测试左移助力块存储技术研发
|
存储 弹性计算 运维
最佳实践丨企业上云后资源容量如何规划和实施
企业上云后,云上的预算直接影响上云的优先级、进度、深度。预算投入的多少,与业务发展和资源需求的容量评估紧密相关。精准的容量评估,可以使企业上云的预算规划更科学,同时也更贴合业务发展阶段的需要。本文分享业务上云后企业该如何进行容量的规划和实施
最佳实践丨企业上云后资源容量如何规划和实施
|
运维 Kubernetes Cloud Native
K8s 集群节点在线率达到 99.9% 以上,扩容效率提升 50%,我们做了这 3 个深度改造
2019 年阿里巴巴核心系统 100% 以云原生方式上云,完美地支撑了 双11 大促。这次上云的姿势很不一般,不仅是拥抱了 Kubernetes,而且还以拥抱 Kubernetes 为契机进行了一系列对运维体系的深度改造。
K8s 集群节点在线率达到 99.9% 以上,扩容效率提升 50%,我们做了这 3 个深度改造