【问题标题】:Load test a Backbone App负载测试主干应用程序
【发布时间】:2013-08-06 12:03:09
【问题描述】:

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

我的应用程序利用 NGinx 的静态资产缓存,使用 node/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 名用户点击它,所有用户都加载相同的页面。

【问题讨论】:

  • 首先 - 有趣的问题。现在,如果我可以问 - 你在测试什么?测试环境是否与生产环境具有相同的规格?简单地用 apache bench 之类的东西来测试它对你没有多大好处。我最好的建议是捕获来自一群用户的实际客户端流量并将其中继到 VM 中的应用程序,直到它不再处理它为止。我们这样做是为了找到瓶颈,这非常有帮助。
  • eheh... 所以,我很惭愧,但是,prod 环境也是测试环境。该网站尚未上线(它是一次性使用的应用程序,可用作实时会议的支持仪表板),并且每年仅上线 3 天。因此,在这三天之外,prod 是 QA/DEV,而在这三天中,prod 是 prod...
  • 设置客户端应用程序似乎只是为了测试服务器需要做很多工作。为什么不能记录单个(手动执行)会话生成的所有 http 请求(包括 html、脚本和 css 加载调用)并并行重播该序列一千次?
  • @ChrisCamaratta 只是因为我不知道怎么做。如果有一些负载测试服务或一些工具可以做到这一点,我会使用它,这很适合我的账单。似乎一个好的负载测试工具可以以自动化的方式做到这一点。我真的不在乎如何该工具完成工作,它只需要对服务器征税,就像 1000 个客户端实际对服务器执行任务一样。
  • 基于这些 cmets,我想我会澄清我的问题...谢谢!

标签: node.js backbone.js express socket.io load-testing


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2015-02-08
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多