性能
(
perfotmance
)
——
应用程序的性能是进行典型操作所需的时间。性能常常用
“
响应时间
”
的标准来衡量。性能经常是重要的业务需求之一。
响应时间
(
response time
)
——
是应用程序处理一个请求所需的时间
(
比如:从用户的浏览器得到的一个
HTTP
请求
)
。一般我们对平均响应时间感兴趣,在负载增大时响应时间的一贯性也很重要。提高负载后若响应时间曲线出现锯齿,往往说明性能乏善可陈,还有潜在的不稳定。
延迟时间
(
latency
)
——是从应用程序得到反馈所需的最少时间(不管程序是否需要做多工作才能得到这个反馈,远程方法调用具有很长的延迟;不管被调用的方法是否成功,都有一个固定的最小开销)。
吞吐量(
throughput
)——是程序或者组件在一段给定时间内所能进行工作的总和(对
web
应用来说,常常用每秒点击率来衡量;对事务处理应用来说,则是每秒能完成的事务数)。
可伸缩性(
scalability
)——指应用程序如何应对增长的流量。说到可伸缩性的时候,我们通常指向上可伸缩(
scaling up
),以便应对更大的负载。可伸缩性经常等价于水平可伸缩性(
horizontal scalability
):向上伸缩到服务器集群来提高吞吐量。 我们也可以通过把应用转移到更强的服务器上来提高吞吐量。后者要简单得多,但显然并不能让应用更牢固,也只能得到有限的提高。
另一种选择是垂直伸缩(
vertical scaling
):在每台服务器上运行多份服务。“垂直伸缩”这个术语被
Fowler
用来指“为单台服务器增加更多的计算能力”,比如添加额外的
CPU
或者内存。
性能和可伸缩性有时候在现实中是对立的。能在单台服务器上高性能运行的应用,却可能无法被部署到集群中, 比如:为了获得高性能,针对每个用户在
session
中维护大量的数据;而在集群环境下,这些数据无法被高效地复制。然而,必须意识到,性能地下的应用同样不会具有很好的可伸缩性。如果应用程序在单台服务器上浪费资源,就以为着即便在集群中运行,也只不过是浪费更多的资源。
性能测试简单说,就是在预期的压力下,我的应用能跑多快。注意,这里的压力是你预期的,更多的时候就是你的性能指标。
负载测试(
load test
)——目标是给系统以期望的负载量[
在没有速度要求的情况下,我的应用能支撑多少的并发用户,这里更多的是考虑容量。
]
压力测试(
stress test
)——目标是在超过期望能力时确定系统行为[
超过容量压力下的表现,也关注应用的恢复能力,这里更多的是关注系统的变化,属于健壮性测试(robustness )一类
]
稳定性测试
(
stability test
)——
测试系统长时间运行的表现,更多的是发现一些资源泄漏等问题,一般压力随便设置。
基准测试对比性测试
(
benchmark
)
——一般用来厂商之间同类产品之间,相同产品版本之间的对比。