本文大纲
《如何做性能测试》
建立预期目标
在进行性能测试之前,确定明确、量化的预期目标是非常重要的一步。这有助于确保整个测试过程中的方向一致。
通过对应用服务器、数据库、缓存等组件的性能进行预估,并与“测得数据”做对比,可以帮助团队识别出系统的瓶颈所在,并有针对性地制定相应的优化策略。
为网站计算预期的QPS
假某Web应用每天计划应对500万PV的访问量,那么总体的QPS至少要达到多少才可以满足?如何计算呢?
为了评估应用服务器或数据库的实际承载能力,在测试前需要先估算出合理的QPS值。计算公式如下:
- QPS =(( 业务总请求量 * 80%)/(24小时*60分*60秒 * 40%))/1
- 公式中使用“24小时60分 60秒 * 40%”来表示表示一天中有80%的请求发生在一天的40%的时间内。这在某些情况下(如电商网站的日常运营)可能是合理的,但在其他特定行业或业务模式下可能需要调整。
这里使用了简化版的计算方式来预测不同日流量下的QPS需求,比如每天100万PV和500万PV(页面浏览量)的情况:
对于每天500万PV:((80%*500万)/(24小时*60分*60秒 * 40%))/1 = 115.7个请求/秒
对于每天100万PV:((80%*100万)/(24小时*60分*60秒 * 40%))/1 = 23.1个请求/秒

为缓存计算预期的QPS
使用Memcached和Redis作为缓存层有助于显著提升响应速度,对开源缓存软件性能有一个正确的预期,有助于你后续分析。
Memcached和Redis的单节点处理如下。
- Memcached单节点处理能力约为10万QPS;
- Redis同样支持极高负载场景,每秒可达8万次请求(同样为单机部署)。
以上数据仅做为一个标杆供你参数,这是在客户使用长连接连接池、KV值大小都非常小网络IO不会成为瓶颈的前提下,达到的性能。所以你的业务使用了缓存后能否达到此性能还要结合你的实际业务场景来分析。
如何单节点处理能力不能满足你的要求,那就需要考虑上集群式缓存来水平扩展性能了。
为数据库系统计算预期的QPS
Oracle、MySQL关系型数据库,按主键id查询命中索引命中缓存,约 8000~1万QPS (在我的个人电脑单机上测得)。
注:在关系型数据库中,因where条件不同、数据量不同、索引情况等,所以这里不讨论where条件查询时的速度。
关系型数据库是计算密集型 + IO密集型的系统,影响它性能因素非常多,如CPU能力、IO能力、内存大小等等。
这里重点关注一下容易被忽视的IO能力。 下面提供了一些常见磁盘的性能参数供你参考,请重点关注“随机IO能力”,关系型数据库十分依赖这个能力。
SSD硬盘的速度(SATA 3接口)
SSD顺序读取速度:550MB/s
SSD随机访问延时:100微秒(μs)以内。 (三星850EVO 是86微秒(μs))
IOPS:每秒钟处理的IO请求次数,可能在1万IOPS左右(队列深度为1,单线程)。
SSD硬盘的速度(PCI-E 3.0x4 接口)
SSD顺序读取速度:3000MB/s
SSD随机访问延时:60微秒(μs)以内。 (海康威视C2000Pro 是30~60微秒(μs))
IOPS:每秒钟处理的IO请求次数,一般在3万IOPS以内(队列深度为1,单线程)。
机械磁盘的速度
磁盘顺序访问:100200MB/s。15ms(寻道时间+旋转时间)
磁盘随机访问:一次约10
IOPS:每秒钟处理的IO请求次数。7200转的磁盘约在100 IOPS左右。
了解网络的速度
跨数据中心、国家之间的延时数据对设计分布式系统非常重要。当你的业务需要跨越复杂网络环境时,了解不同网络的速度与延时,对于你的性能分析是十分有帮助的。
千兆网卡的速度
每秒钟最大传输 1000Mb/s(125MB/s)
每秒钟最大包数 200000个/s
网络往返延时
局域网:1ms (两点小数据包无业务)
北京同城跨两IDC机房之间(裸光纤):2~3ms
国内异地跨两IDC机房之间(有专线):30ms
北京到上海:25ms (光速一秒钟30万公里,绕地球7.5圈,1秒钟=1000毫秒,北京到上海大约1318公里(千米),算1500KM,1ms传300公里,5ms,双向10ms,加上各种设备延迟20ms)
中国到美国:约200ms
移动网络延时
移动设备接入互联网的延迟和带宽也会影响用户体验。不同制式下的典型延迟时间如下:
- 4G :20毫秒以内;
- 3G :50~100ms;
- 2G :大约600ms(含运营商核心网络及骨干网时延)。
了解内存的速度
1毫秒=1000微秒,1微秒=1000纳秒
内存顺序读取吞吐量:40GB/s~50GB/s (DDR4 3200内存)
内存随机读取速度:100ns以内 (DDR4 3200内存约60~70ns)
CPU1级缓存延迟:1.2ns (Intel Core i5 12400F)
CPU2级缓存延迟:4.2ns (Intel Core i5 12400F)
CPU3级缓存延迟:18.2ns (Intel Core i5 12400F)