我在一家完全采用云技术的公司工作,我们已启动了一个压力测试项目。该项目的理念是将生产中的所有内容加载到新环境中,然后对其进行压力测试,以找出系统的总容量以及瓶颈所在。
现在,我记得有一次我们对物理服务器和私有云进行压力测试,我记得几乎不可能获得生产及其所有移动部件的完整副本。此外,即使使用 sysbench、Jmeter 和 ab 等压力测试工具,您也无法像生产一样准确模拟流量。
我们通常会尽可能地监控和分析生产情况,找出问题,然后尝试通过在压力测试环境中进行模拟来解决该特定问题。
为了计算容量,我们过去常常(有些人现在仍然这样做)使用计算来预测何时能够满足容量或响应时间是否低于令人满意的水平。
考虑到重新创建生产和压力测试的项目非常耗费时间和资源,这是查找系统瓶颈和衡量容量的最佳方法,还是“旧”方法更好?
答案1
强调整个系统并使用类似生产的环境(甚至生产)总是更好的。
首先检查一下按比例缩小的测试环境能否发现性能负载问题?问题及其答案。
应用程序的底层基础架构由许多不同的组件构成,例如缓存、Web 服务器、应用服务器和磁盘 (I/O)。带宽和 CDN 也在其功能中发挥作用,因此在扩展时必须加以考虑。每个组件在应用程序中的行为根据其配置和扩展方式而不同。然而,分层结构使得计算每个组件的测试和扩展方式变得困难。
因此,如果可能的话,请始终在真实条件下进行系统测试。如果不可能,您仍然可以针对缩小规模的环境运行负载测试但是,不要指望您能够准确地推断出结果,例如这台机器有 10Gb 的 RAM 并且能够承受 1000 RPS,那台机器有 20Gb 的 RAM 因此将是 2000 RPS - 它不会以这种方式工作。