容量预估/性能压测思考

1 背景

       随着业务的快速成长,日访问量越来越高,除了对功能要求很高以外,对性能要求也越来越高。 在实际工作中,我们往往会被一些问题所困扰。

       1)线上服务容量是多少?性能痛点在哪里? 可伸缩性(resilience)和可靠性(reliability)怎样?预先知道了系统的容量,做到心中有数,才能为最终规划整个运行环境的配置提供有利的依据。

       2)新开发的功能是否满足性能指标? 重新修改的代码会不会带来性能问题? 对服务或工具的参数修改是否有效果(如jvm参数,mysql或solr配置等)? 如果在上线用前就能进行验证,那么不仅能极大降低部署时发生意外的概率,还能为性能优化提供指导。

2 现状

      为尝试解决上述问题,我们在多个项目上进行过性能测试,使用过的方法主要分成三类。

方案 具体方式   优点 缺点
人为模拟请求 自己写代码或者使用简单的工具如httpload等去模拟用户请求进行测试   操作简单,能快速的得到cpu、mem、 load、 qps等极限值。 缺少真实用户交互行为,缺乏真实性
copy线上流量 使用tcpcopy工具实时copy线上流量到某台机器   操作简单,是真实线上请求,且对线上服务压力无影响 需要准备一套跟线上机器配置、依赖一致的独立环境,同时如果是服用线上的环境的话,一些写操作的请求被copy会有问题
线上流量切换 直接用线上的机器和环境,通过调整nginx配置参数,逐渐将要做压测的机器的权重增加,然后观察该机器各个指标性能   真实生产线流量,能把用户行为导向压测服务器,是最为真实的用户行为,能够把一些需要登陆,有用户交互行为的性能真实的反映出来 因为是用生产系统真实流量来模拟压测,无法得出最大值,如果阀值设置有误,也存在一定的风险。此外该性能测试也不能经常进行

3 存在的不足

     尽管我们在性能测试上做过一些尝试,但还远远不够,存在以下不足。

3.1 性能测试指标和标准尚未完全确立

     不同服务测试指标应该不同,相应的标准也不同,例如接入层服务和后端服务指标是不同的。如果我们能为各个服务制定类似如下的标准,以后再进行性能测试就有了参考依据。 随着服务的发展,这些标准也会随之相应改动,要求会越来越严格。


判断指标


不通过的标准


超时概率


大于万分之一


错误概率


大于万分之一


平均响应时间


超过100ms


0.99响应时间


超过200ms


qpm(每分钟处理的请求量)


小于2w


qpm波动范围(标准差)


正负3


cpu使用率


平均每核超过75%


负载(load)


平均每核超过1.5


jvm内存使用率


大于80%


gc平均时间


超过1s


fullgc频率


频率高于半小时一次


...


... 

 

 

3.2 性能测试不够全面

图1 淘宝性能测试曲线(a点:性能期望值;b点:高于期望,系统资源处于临界点;c点:高于期望,拐点;d点:超过负载,系统崩溃)

        根据上述压力变化模型,淘宝网将性能测试分成狭义的4种类型:

       a)性能测试:a点到b点之间的系统性能 

       定义:狭义的性能测试,是指以性能预期目标为前提,对系统不断施加压力,验证系统在资源可接受范围内,是否能达到性能预期。

       b)负载测试 :b点的系统性能

       定义:狭义的负载测试,是指对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到极限,例如某种资源已经达到饱和状态等。

      c)压力测试:b点到d点之间

      定义:狭义的压力测试,是指超过安全负载的情况下,对系统不断施加压力,是通过确定一个系统的瓶颈或不能接收用户请求的性能点,来获得系统能提供的最大服务级别的测试

      d)稳定性测试:a点到b点之间

      定义:狭义的稳定性测试,是指被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一段较长时间,以此检测系统是否稳定,一般稳定性测试时间为n*12小时

      我们现在的性能测试还没有那么全面,比如没有进行长时间的稳定性测试,长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中的隐含的问题或冲突。

3.3 性能测试手段缺乏

      线上流量切换方法不能经常执行,copy线上流量目前只能将所有(包括读和写)流量拷贝过来,而自己写程序模拟用户请求又缺乏真实性。一种思路是自己实现测试程序将前一天的请求重新跑一遍,其核心在于控制请求频率,使其与之前请求频率曲线一致,从而达到近似模拟的目的。

3.4. 缺少性能测试自动化工具或平台

      例如百度有个性能测试平台,有此平台后,可以方便地进行性能测试。其可以用于指导程序开发,使得在开发过程不仅关注功能,也关注性能,此外,性能测试纳入持续集成,每天出报表,每天都能知道自己服务的处理能力。

 

时间: 2024-11-08 18:16:55

容量预估/性能压测思考的相关文章

SolrQuery性能压测参考

大致有下面几类特征应用 一类 key-value,数据库join搬到倒排中而已, 代表应用 很大部分应用场景 一类 区间查询为主 代表应用 **** 一类 纯文本查,不存储,典型只查索引返回DB的索引id信息,代表应用 **** 一类 各种查询涵盖,facet.区间.group较多 典型代表 *** 如果应用场景相类似,已在线应用的性能或者历史压测数据具有一定的参考价值. 如果应用场景不类似,特别是有某个极端需求或者极端场景特征的话,通常需要具体测试和针对性优化. 搜索压测 性能压测需要关注:数

后端服务性能压测实践

后端服务性能压测实践 标签(空格分隔): 性能 压测 后端服务 压测实践 作者:王清培(Plen wang) 背景 环境检测 压力机及压力工具检测 Linux openfiles limit 设置 排查周边依赖 空接口压测检测 聚合报告中 throughput 计算 压测及性能排查方法 关注各纬度 log Linux 常规命令 性能排查两种方式(从上往下.从下往上) 总结 背景 最近大半年内有过两次负责性能压测的一些工作.一件事情做了一次可能还无法总结出一些东西,两次过后还是能发现一些共性问题,

三体PCC大赛题目 - facebook\微博 like场景 数据库设计与性能压测

标签 PostgreSQL , pipelinedb , facebook , 微博 , 流式统计 背景 高可用架构的一个PCC大赛,看了一下比赛规则,发现PostgreSQL很适合做这个场景,原样复刻,使用PG实现以及性能表现到底如何? 比赛内容介绍如下 https://github.com/archnotes/PCC 实现类似 facebook 中的 like 功能,需要: 可以对一个对象(一条feed.文章.或者url)进行 like 操作,禁止 like 两次,第二次 like 返回错误

innodb compression原理以及性能压测

压缩算法:innodb plugin采用了 zlib library函式库的LZ77 的压缩算法来对数据进行压缩,这种算法已经很成熟,在cpu利用率,压缩比率在50%以上,更为重要的是无数据丢失: innodb的数据存储方式:innodb在数据储存上采用聚簇的方式(B-树)来组织数据,叶子节点上存放了表中定义的所有列数据:第二索引同样也是B-树结构,在索引列的后面会加上聚簇键列,用于索引列到聚簇索引查找数据: 压缩B-树:由于对B-树的频繁的更新,进而导致B-树的页节点的分裂,不断的对数据进行解

PostgreSQL 在铁老大订单系统中的schemaless设计和性能压测

标签 PostgreSQL , UDF , schemaless , 自动建表 , 自动分区 , 订单查询 , 用户订单查询 , 席别订单查询 背景 数据的流动孕育数据生态,在很多大型系统中,业务系统之间的数据流动是很常见的事情. 例如铁大哥的订单数据的流动,可能带动很多围绕订单的业务需求.比如说订单查询: 1.按用户查询,返回用户30天内的所有订单. 2.按坐席和乘车日期查询,返回这个坐席的售出记录,看看有没有退票.有没有中途票可以加塞等. 以预售30天为例, 假设有20000趟车,20节车厢

磁盘性能压测二三事之——性能参数和指标

近日工作中遇到了一个磁盘压测时性能上不去的问题,经排查,发现原因有以下几个方面: 1 测试参数的选择 2 业务逻辑未关闭 本文就将通过对磁盘性能测试指标及参数的介绍,来理解以上两个原因为什么会对测试结果有影响. 首先来介绍一下磁盘性能的测试指标. 最常用的磁盘性能评价指标有两个:IOPS和吞吐量(throughput).IOPS是Input/Output Per Second的缩写,它表示单位时间内系统能处理的I/O请求数量,即每秒钟系统能处理的读写次数. 吞吐量衡量单位时间内系统能处理的数据的

记5.28大促压测的性能优化—线程池相关问题

目录: 1.环境介绍 2.症状 3.诊断 4.结论 5.解决 6.对比java实现 废话就不多说了,本文分享下博主在5.28大促压测期间解决的一个性能问题,觉得这个还是比较有意思的,值得总结拿出来分享下. 博主所服务的部门是作为公共业务平台,公共业务平台支持上层所有业务系统(2C.UGC.直播等).平台中核心之一的就是订单域相关服务,下单服务.查单服务.支付回调服务,当然结算页暂时还是我们负责,结算页负责承上启下进行下单.结算.跳支付中心.每次业务方进行大促期间平台都要进行一次常规压测,做到心里

双11备战核武器:全链路压测今年如何升级?

在刚结束的2017年双11中,阿里巴巴再一次更新了记录:每秒32.5w笔的交易创建峰值.25.6w笔的支付峰值.就是这样一个由上千个不同业务系统和技术组件构建的业务站点,在如此巨大的洪峰流量冲击之下,依旧稳如磐石,创造了一个用户体验丝般顺滑的双11购物狂欢节.这是一个互联网技术上的奇迹,堪称世界级的超级工程,而大促准备阶段的"全链路压测"就是奇迹背后的秘密. 众所周知,阿里巴巴有着非常丰富的业务形态,每一种业务形态背后都由一系列分布式的技术体系提供服务,随着业务的快速发展,特别是在双1

ECS上自建Redis服务压测报告

背景说明 最近处理的企业大客户问题中,出现好几例都是客户通过购买ECS进行自建Redis服务,并且在使用过程中碰到一些因云环境的内部限制等原因导致客户使用中碰到服务异常或者产品性能上无法满足业务需求的情况.每次处理过程都费时费力,TAM同学一直不辞辛苦的跟进,也拉动了ECS/Redis 研发,网络,存储等同学进去排查,又是抓包又是电话会议,最终可能排查下来都是因为场景使用上的不合理,导致客户在该过程用的不爽,我们支持得也累. 这里根据目前客户通常采用的Redis主备Sentinel架构模式,在E