缓存性能测试
Performance test with cache
我们有一个重 CPU 绑定的服务,它会对给定的参数进行大量计算,当然,计算结果可以缓存。
例如,一个请求/data/{id}.png
第一次将花费近2秒,但我们会缓存响应以供以后用户使用。命中缓存时,响应时间为200ms(因为我们会在响应前对缓存做一些轻量级操作)。
现在我们想为这个服务提供一个性能测试报告,特别是最大并发和响应时间,但是对于一个指定的请求(指定id参数),有和没有会有很大的区别缓存。这意味着在测试过程中,如果我们清除缓存,并使用随机生成的 id
参数报告,可能命中的缓存太少,从而导致错误的报告。如果我们预先缓存大部分响应并进行一些测试,报告可能看起来不错。
所以我想知道如何体现这个套装的真实性能?
为了了解实际性能,您需要产生实际负载。不知道如何使用您的服务的详细信息,很难得出 "cached" 和 "new" 请求的准确分布,但有一点是显而易见的: 行为良好的负载测试必须代表现实生活中的应用程序用法,否则没有多大意义。
所以 happy path 测试会是这样的:
- 使用 "new" 和 "cached" 请求的预期分布
- 使用您系统的预期用户数
此性能测试类型称为 Load Testing. However I wouldn't stop at this stage as load testing doesn't tell the full story。
下一步是将您的系统置于长时间负载下(即整夜或周末)。您可能还想将负载增加到高于预期值。这种测试类型称为 Soak Testing and it is very good in discovering memory leaks 并且随着时间的推移会出现磁盘 space 等资源不足的问题
最后,您可以检查您的应用何时(以及如何)崩溃。从 1 个虚拟用户开始,逐渐增加负载,直到响应时间开始超过可接受的阈值或开始出现错误(无论先发生什么)。此时您可能还知道应用程序是否在负载减少时恢复正常。这种测试类型称为 Stress Testing and most probably this way you will know your application bottleneck
我们有一个重 CPU 绑定的服务,它会对给定的参数进行大量计算,当然,计算结果可以缓存。
例如,一个请求/data/{id}.png
第一次将花费近2秒,但我们会缓存响应以供以后用户使用。命中缓存时,响应时间为200ms(因为我们会在响应前对缓存做一些轻量级操作)。
现在我们想为这个服务提供一个性能测试报告,特别是最大并发和响应时间,但是对于一个指定的请求(指定id参数),有和没有会有很大的区别缓存。这意味着在测试过程中,如果我们清除缓存,并使用随机生成的 id
参数报告,可能命中的缓存太少,从而导致错误的报告。如果我们预先缓存大部分响应并进行一些测试,报告可能看起来不错。
所以我想知道如何体现这个套装的真实性能?
为了了解实际性能,您需要产生实际负载。不知道如何使用您的服务的详细信息,很难得出 "cached" 和 "new" 请求的准确分布,但有一点是显而易见的: 行为良好的负载测试必须代表现实生活中的应用程序用法,否则没有多大意义。
所以 happy path 测试会是这样的:
- 使用 "new" 和 "cached" 请求的预期分布
- 使用您系统的预期用户数
此性能测试类型称为 Load Testing. However I wouldn't stop at this stage as load testing doesn't tell the full story。
下一步是将您的系统置于长时间负载下(即整夜或周末)。您可能还想将负载增加到高于预期值。这种测试类型称为 Soak Testing and it is very good in discovering memory leaks 并且随着时间的推移会出现磁盘 space 等资源不足的问题
最后,您可以检查您的应用何时(以及如何)崩溃。从 1 个虚拟用户开始,逐渐增加负载,直到响应时间开始超过可接受的阈值或开始出现错误(无论先发生什么)。此时您可能还知道应用程序是否在负载减少时恢复正常。这种测试类型称为 Stress Testing and most probably this way you will know your application bottleneck