在性能测试中,须要根据具体的性能需求和系统架构等状况,采用不一样的测试策略,其中最多见的策略就有容量测试。html
这篇博客,就来聊聊容量测试以及容量规划的一些内容。。。数据库
1、什么是容量?如何理解?缓存
在开始以前,有一点须要知道:系统的处理能力是有限的!性能优化
一、容量定义服务器
所谓容量,即系统处于最大负载状态或某项指标达到所能接受的最大阈值下对请求的最大处理能力。网络
二、如何理解架构
①、系统的容量(处理能力)是有限的;并发
②、容量是可度量的;负载均衡
2、如何统计容量指标?运维
一、统计维度
通常来讲,能够从以下两个维度来定量系统的容量:
维度类型 | 列举说明 |
最大负载状态 | 服务器CPU使用率达到100% |
内存使用达到最大值 | |
磁盘IO延时超过所能接受的最大时延 | |
磁盘使用率超过最大限制 | |
网络使用率达到上限(最大吞吐量) | |
最大接受阈值 | 每秒请求数/事务数(QPS/TPS) |
响应时间(ART/99%RT) | |
事务成功率(通常要求99.99%甚至更高) | |
超时/异常错误率 | |
配置参数,好比:最大链接数、最大线程数、JVM内存分配上限 |
二、统计方法
通常来讲,经常使用的采集数据的方法,有如下几种方式:
①、埋点采集:即在系统的各个节点,根据须要添加埋点,针对性的进行数据采集;
②、日志/数据库:经过日志服务(好比ELK)或者运维监控(如今很流行的Devops),采集分析数据;
③、Agent/探针:在须要采集的节点添加Agent/探针,实时采集,数据存入时序数据库(好比influxdb),实时展现;
三、注意事项
①、采集对比的数据必定要采集线上的真实数据,这样才能反映真实客观的系统压力。
②、容量测试环境的配置,必定要和线上保持一致(服务器数量能够不一样,但配置尽量保持一致)。
3、容量测试
容量测试是性能测试里的一种测试方法,它的目的就是测量系统的最大容量,为系统扩容,性能优化提供参考,节省成本投入,提升资源利用率。
一、测试思路
①、根据具体的业务状况和系统架构,经过配置测试的手段,测量获得单个服务节点在对应的业务场景下最大的性能表现;
②、根据系统架构(集群、分布式、微服务)特色,经过启用≥2的服务节点,来获得服务节点的增长和系统性能的提高比例;
③、经过线上采集的系统数据,分析出过去某段时间(或某个业务)的高峰流量,而后经过计算,获得容量扩容,须要投入的实际服务数量;
二、约束/中止条件
在测试过程当中,只要限定的某项指标达到最大可接受阈值或某项资源达到最大使用状态,即刻中止测试。
三、选择合适的容量指标
考虑到业务需求和系统架构的不一样,在选取容量指标时通常遵循以下原则:
①、数据密集型:即并发请求量较大的类型,通常TPS和RT是比较关注的指标;
②、数据存储型:即须要存储读写的数据量较大的类型,通常吞吐量和IO是比较关注的指标;
4、容量规划
一、为何须要容量规划?
对于业务愈来愈复杂的商业形态,每一个业务都由一系列不一样的系统来提供服务,每一个业务系统都部署在不一样的机器上。容量规划的目的在于让每个业务系统可以清晰地知道:
①、何时应该增长服务节点,何时应该减小服务节点(好比服务端接受到的流量达到什么量级)?(好比双十一,大促,秒杀)
②、为了双 11 、促销、秒杀、渠道拓展引流等业务需求,须要扩充到什么数量级的服务,才能即保证系统的可用性、稳定性,又能节约成本?
二、容量规划四步走
①、业务流量预估阶段:经过分析历史数据以及实时的线上监控,预估将来某个时间点或者某个业务可能会有多少多少的流量冲击;
②、系统容量评估阶段:根据具体的业务场景,分析每一个业务场景的流量配比,而后计算每一个业务大概须要多少服务节点来提供可靠稳定的性能支撑;
③、系统容量测试阶段:经过全链路压测或者PAT/UAT环境的压测,来模拟真实的业务场景,肯定每一个服务节点的具体性能表现,进行针对性的调整;
④、流量分配调整阶段:根据压测的结果,设定限流、服务降级等系统保护措施,来预防当实际流量超过系统所能承受的最大流量时,系统没法提供服务;
三、扩容手段
①、垂直扩容
升级服务的硬件配置,让单个服务节点的容量更大,来提供更高的系统服务能力。好比:
加大服务机器的CPU数量和内存,更换性能更好的高速缓存服务器,数据存储用NAS盘替换等。
②、水平扩展
即增长服务节点的数量,让可提供服务的服务变得更多,来提高系统整体的服务能力。常见的方式有:
服务集群:服务器的数量由1→N(但须要重点关注负载均衡);
分布式:提供服务的节点由统一集中管理部署,分散到不一样的地点;
容器:提供更灵活的弹性扩容机制,根据具体的访问流量大小来弹性扩容或者缩容;
四、更多参考
关于容量规划,能够看这里:阿里巴巴全链路压测
关于集群和分布式,看这里:分布式与集群的区别是什么?
内容仅仅是我的的一些思考和总结,若有更好的意见或建议,欢迎评论区指出,谢谢。。。