全链路压测(13):高可用和性能优化

简介: 业务场景复杂化、海量数据冲击下,发现并解决业务系统的可用性、扩展性以及容错性问题。

大家好,这是全链路压测系列的第十三篇文章,也是倒数第二篇文章。


前面用了很多篇幅介绍了包括全链路压测的调研验证、落地实践前的准备工作细节、以及线上压测的一些注意事项。到了这里基本上技术实践的东西就讲完了,这篇文章,我想和大家聊聊,关于性能优化和高可用,我的一些理解。


开始聊之前,我想回到写这个系列文章的开头,先聊聊全链路压测出现的原因和本质。


理解全链路压测


什么是全链路压测


基于实际的生产业务场景和系统环境,模拟海量的用户请求和数据,对整个业务链路进行各种场景的测试验证,持续发现并进行瓶颈调优,保障系统稳定性的一个技术工程。


全链路压测解决了什么问题


业务场景复杂化、海量数据冲击下,发现并解决业务系统的可用性、扩展性以及容错性问题。


全链路压测创造了什么价值


  1. 业务角度:提升用户体验、增强业务竞争力、创造更多的业务价值;
  2. 技术角度:完善技术体系、提高服务可用性、更好的服务业务而体现自我价值;
  3. 管理角度:提高研发效能和团队协同沟通效率、降低技术实践和管理成本支出;


640.png


关于全链路压测的理解误区


  1. 全链路压测是一个技术工程,而非单纯的测试手段;
  2. 全链路压测只适用于部分企业和业务类型,而非一个银弹;
  3. 全链路压测的落地并非一蹴而就,需要较好的技术基础设施建设做保障;
  4. 落地全链路压测最大的挑战不是技术能力,而是企业的组织协调和沟通效率;
  5. 全链路压测的本质是尽量用较低的成本确保系统稳定可用,以保障系统在峰值流量下支撑业务目标达成;


高可用和性能优化


聊完了上面关于全链路压测的本质和目的、价值以及一些常见的理解误区之后,接下来我们谈谈关于服务高可用和性能优化的一些内容。


系统高可用和性能优化一直是技术领域热门的一个话题,无论是三高(高性能、高可用、高稳定),还是CAP(数据一致性、服务可用性、分区容错性),都强调了服务的性能和可用。


高可用四板斧


如何理解高可用


可用是一个名词,简单来讲就是系统既有的功能能否正常为用户提供服务;可用性是一个形容词,即系统的可用在某种评估标准下能得多少分。那么如何衡量可用性?目前业内大多从下面几点指标来评估:


  • 线上服务可用时常


服务可用时常即我们常说的SLA(即服务等级协议,全称:service level agreement)。SLA对互联网公司来说就是网站服务可用性的一个保证。9越多代表全年服务可用时间越长服务更可靠,停机时间越短,反之亦然。服务可用性指标可以通过下面的例子来理解:


全年以365天做计算,看看几个9要停机多久时间才能达到!

1年 = 365天 = 8760小时;

99.9% = 8760 * 0.1% = 8760 * 0.001 = 8.76小时;

99.99%= 8760 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟;

99.999% = 8760 * 0.00001 = 0.0876小时 = 0.0876 * 60 = 5.26分钟;


当然,服务可用时长还要区分核心业务和非核心业务,不同的业务造成的不可用影响程度也是不同的。


  • 故障响应解决耗时


这一点目前业内有个口号是:1-5-15。什么意思呢,就是:一分钟发现问题,5分钟定位问题,15分钟解决问题,线上业务恢复正常运营。要做到上述的指标需要很强的技术能力以及不断的演练才能达到,主要是如下几点:


  • 发现问题:强大完善灵敏的监控体系;
  • 定位问题:对业务和技术实现的熟悉程度以及高效的定位分析工具;
  • 解决问题:故障的自愈能力以及对异常情况的稳定性预案甚至故障演练;
  • 故障导致的业务资损


这一点很好理解,即线上故障对业务造成的损失。这一点业内在故障定级评估复盘时,大多采用最近一天/一周同时段的业务营收来做对比,当然,其中还可能包括用户的客诉以及赔偿的成本支出等维度。


如何做到高可用


  • 限流:控制访问应用的流量在系统承载范围内
  • 在业务请求入口(网关)限流,避免内部互相调用放大流量;
  • 限流是个演进状态,从连接池、IP、指定SQL到更细的层级粒度做限流;
  • 每个调用层都做限流,每个应用先保证自己可用,对其他依赖调用要做到“零信任”;
  • 降级:强依赖通过熔断做紧急处理,弱依赖提前主动降级
  • 主动降级:提前进行风险识别,然后针对性的降级,可降低已知的风险;
  • 紧急降级:假设出现重大的问题,才需要决策是否启用的方案(风险较大);
  • 预案平台:预案平台的目的是留痕,方便后续把限流降级等配置恢复回来;
  • 熔断:熔断下游强依赖的服务
  • 双十一零点的前半小时, 做一个动态推送,把日志关掉;
  • 真正流量来的时候,留一台机器来观察错误和异常的日志;
  • 隔离:核心和非核心业务做隔离
  • RPC group分组:假设有100个节点,40个给核心业务(交易),60个给其他业务;
  • 业务身份:中台架构可通过业务身份把订单秒杀等应用打上标记,便于隔离区分;


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


性能优化三板斧


聊完了高可用,接下来聊聊性能优化。


如何理解性能优化


  • 性能优化的目标


在保持和降低系统99%RT的前提下,不断提高系统吞吐量,提高流量高峰时期的服务可用性。


  • 性能优化的挑战
  • 日益增长的用户量(带来访问量的提升,大数据量的存储和处理);
  • 越来越多样的业务(业务的不断迭代和发展,会使其复杂性指数提升);
  • 越来越复杂的系统(为了支撑业务迭代发展,系统架构会变得很复杂);
  • 性能优化的路径
  • 降低响应时间;
  • 提高系统吞吐量;
  • 提高服务可用性;


PS:三者关系在某些场景下互相矛盾冲突,不可兼得


如何开展性能优化


首先要声明一点:性能优化没有边际,随着优化的范围越大细节越深,要投入的成本和精力就越大。而且在实际工作中,很多时候是没有太多时间让我们去做细致的分析优化的。特别是在版本迭代业务交付deadline、倒排期情况下,按时交付往往是第一优先级。


我并不是提倡大家不注重系统性能的表现和优化,而是想说明一点:性能优化的成本和及时交付带来的业务价值之间需要做评估和平衡。


而且现在各种技术框架工具以及编码规范和测试验证的最佳实践不断涌现,在更重要的价值面前,要做到性能优化实际上是很简单的事情,就是下面的性能优化三板斧:


  • 扩容:应用计算能力受限于硬件资源,只要应用服务具备弹性扩容的特点,完全可以用扩容来提升性能;
  • 升配:应用计算能力受限于硬件资源,提升硬件资源的配置从某种程度上来说就是在提升应用服务的处理能力;
  • 缓存:缓存的作用就是减少请求的访问链路和过程耗时,降低耗时就是在提升单位时间内应用服务的处理能力;
相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
11月前
|
监控 测试技术 UED
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(1)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(1)
196 0
|
11月前
|
域名解析 网络协议 数据可视化
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(2)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(2)
151 0
|
11月前
|
SQL 监控 关系型数据库
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(3)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(3)
143 0
|
数据可视化 测试技术 定位技术
全链路压测(14):生产全链路压测SOP
从实践经验的角度出发,生产全链路压测在技术实现上没有太多新花样,但要在不同的业务和企业落地,就各有各的实践路径。对于没有太多经验的同学来说,全链路压测的落地,大多还是基于个人的经验和熟悉的领域,即都是在局部作战,缺乏全局的视角和可视化地图。从全局来讲,缺少适用于自己的全链路压测最佳实践。
全链路压测(14):生产全链路压测SOP
|
监控 Java 测试技术
全链路压测(12):生产压测必不可少的环节
在生产环境开展全链路压测,相对于测试环境来说风险和成本都是比较大的。因此需要一套严格的流程管控和响应机制,以及高效的团队协同体系。
全链路压测(12):生产压测必不可少的环节
|
缓存 监控 安全
全链路压测(11):聊聊稳定性预案
从业务角度来讲,无论技术做任何的改动和优化,最终的目的都是为了业务目标的达成。而系统的稳定性,无论从用户体验还是业务目标达成的角度来看,都是不可忽视的一环。
|
SQL 缓存 运维
全链路压测(10):测试要做的准备工作
功能验证环境即用来验证技术组件本身的功能正确性和接入性能损耗的环境,有独立的随时可用的环境最好。如果考虑到成本,也可以用线下性能环境来进行验证。
全链路压测(10):测试要做的准备工作
|
运维 监控 安全
全链路压测(9):容量评估和容量规划
容量评估我在之前的文章《性能测试从零开始实施指南——容量评估篇》中已做过详细介绍,这里不多做赘述。关于容量评估,参考下面两张思维导图,更容易理解。
全链路压测(9):容量评估和容量规划
|
缓存 监控 NoSQL
全链路压测(8):构建三大模型
单机单接口的压测,可以通过梯度增加请求的方式,观察随着请求的增加,其性能表现&资源损耗的变化。在目前的微服务架构下,整体链路的性能瓶颈,取决于短板(木桶原理)。因此,单机单链路基准测试的目的,是在全链路压测开始前进行性能摸底,定位排查链路瓶颈。
全链路压测(8):构建三大模型
|
容灾 中间件 测试技术
全链路压测(7):核心链路四问
很多企业都会有自己核心的业务范围,这些核心业务也往往是主要的企业利润来源。以电商企业为例,为用户提供商品的购买服务,为商家提供商品的管理和上架及定价展示,利润大多为撮合用户和商家交易所带来的服务费以及广告等相关费用。
全链路压测(7):核心链路四问