5

我有一个代理对 PHP/MySQL REST API 的请求的 NGinx/Node/Express3/Socket.io/Redis/Backbone/Backbone.Marionette 应用程序。我需要对整个堆栈进行负载测试。

我的应用程序利用了 NGinx 的静态资产缓存,使用节点/express 和套接字的集群是使用 Redis 启用的多核。这就是说,我经历了很多麻烦来尝试确保它能够承受负载。

我使用 blitz.io 在 10 秒内吸引了 50,000 名用户,它甚至没有眨眼……这让我很担心,因为我想看到它崩溃,或者至少呼吸有点沉重;但是 50k 是您使用该工具可以投入的最大值,这向我表明他们希望您无法合理地处理或需要处理更多...当我意识到它实际上并没有发生时我期望的负载,因为负载是在页面加载后启动的,Backbone 应用程序启动并启动套接字连接并从正确的 REST API 端点(来自不同的服务器)请求数据。

所以,这是我的问题:

如何将整个应用程序作为一个整体进行负载测试?我需要负载测试以与客户端实际相同的方式对服务器征税,这意味着:

  1. 从我的 NGinx/Node/Express 服务器请求单页 Backbone 应用程序
  2. 启动来自 NGinx 的静态资产请求(模拟浏览器会做什么)
  3. 启动对 REST API 的请求(在不同服务器上运行的 PHP/MySQL)
  4. 创建到 Socket.io 服务的连接(在 NGinx/Node/Express 上运行,利用 Redis 处理多核垃圾)

如果测试工具使用类似浏览器的环境来加载页面、解析 JS 并运行它,那么一切都将是 copasetic(NGinx/Node/Express 服务器将受到打击,PHP/MySQL 服务器也将受到打击)。否则,测试工具将需要通过几乎同时触发至少十几种不同类型的请求来模拟这一点。否则,这就像对一扇门进行 10,000 次压力测试(也就是说,这毫无意义)。

我需要确保我的应用程序可以在一分钟内处理 1,000 名用户点击它,所有用户都加载相同的页面。

4

1 回答 1

1

您应该学习使用 Apache JMeter http://jmeter.apache.org/ 您可以使用它进行压力测试,请参阅本教程https://www.youtube.com/watch?v=8NLeq-QxkSw

正如您所说,“我需要负载测试以与客户端实际相同的方式对服务器征税”

这意味着测试与您使用的技术无关。

我强烈推荐 Jmeter,它被广泛使用,你可以将它与 Jenkins 集成并用它做很多很酷的事情。

于 2013-08-10T22:21:22.880 回答