首页 > web前端 > js教程 > 正文

带有 Web MQTT 插件的 RabbitMQ 与 Node.js:性能和内存使用情况比较

Susan Sarandon
发布: 2024-11-02 20:56:02
原创
589 人浏览过

简介

在需要实时、高效数据通信的应用中,两种常用的技术是带有 Web MQTT 插件的 RabbitMQ 和 Node.JS (Socket.IO)。带有 Web MQTT 插件的 RabbitMQ 允许使用 MQTT 协议通过 WebSocket 进行通信,而 Node.JS (Socket.IO) 提供 JavaScript 运行时,可以高效地实时处理事件。本文将 RabbitMQ 与 Web MQTT 插件和 Node.JS (Socket.IO) 的性能和内存使用情况进行比较,特别是在处理通知、数据重新加载和队列管理等 36 个事件方面。它还分析此设置是否最佳或需要进一步调整。


带有 Web MQTT 插件的 RabbitMQ 概述

什么是具有 Web MQTT 插件的 RabbitMQ?

RabbitMQ 是一个支持多种协议的消息代理,包括 MQTT。 RabbitMQ 中的 Web MQTT 插件使客户端能够使用 MQTT 协议通过 WebSocket 与代理进行通信。这对于需要实时双向通信(例如通知或数据排队)的基于 Web 的应用程序特别有用。

RabbitMQ 与 Web MQTT 插件的主要功能

  1. WebSocket 通信:允许基于 Web 的客户端通过 WebSocket 使用 MQTT,从而实现服务器和浏览器客户端之间的直接通信。
  2. 队列和主题管理:支持队列和主题配置,以实现有效的消息流量管理。
  3. 保留消息:存储最后一条消息,以便新连接的客户端无需重新请求即可收到最新信息。
  4. 轻量级消息的高可扩展性:非常适合发送低延迟实时通知的应用程序,例如数据重新加载和通知队列。

Node.JS (Socket.IO) 概述

什么是 Node.JS (Socket.IO)?

Node.JS (Socket.IO) 是一个基于 Chrome V8 引擎构建的 JavaScript 运行时,旨在处理非阻塞 I/O 操作。在此上下文中,server.js 用于通过 WebSocket 或 HTTP 协议管理通知事件、数据重新加载和队列,具体取决于应用程序要求。

Node.JS (Socket.IO) 的关键功能

  1. 非阻塞 I/O:允许同时处理多个请求而不阻塞其他操作,非常适合事件驱动的应用程序。
  2. 事件驱动架构:仅在特定事件发生时运行代码来减少资源消耗。
  3. 双向通信:Node.JS (Socket.IO) 非常适合需要客户端和服务器之间通过 WebSocket 进行持续双向通信的实时应用程序。
  4. 效率和响应能力:高效处理大量基于 I/O 的连接,例如管理通知和队列。

挑战和限制

带有 Web MQTT 插件的 RabbitMQ

  1. 资源消耗:RabbitMQ(尤其是使用 Web MQTT 插件)可能会消耗大量内存和 CPU 来处理大量消息。在此测试中,RabbitMQ 显示 CPU 使用率约为 5.2%,对于消息代理来说相对较高但合理。
  2. 高负载下的延迟:在极高的负载下,消息传递可能会出现轻微的延迟,这可能会影响严重依赖实时性能的应用程序。
  3. 更复杂的配置:与 Node.JS (Socket.IO) 相比,带有 Web MQTT 插件的 RabbitMQ 需要更多的初始配置,尤其是设置队列、主题和绑定。

Node.JS (Socket.IO)

  1. 单线程:Node.JS (Socket.IO) 使用单线程,因此 CPU 密集型操作可能成为瓶颈。在测试中,CPU 使用率达到了 50.5%,这对于单线程应用程序来说很高,并且可能会导致延迟。
  2. 内存泄漏:如果管理不当,Node.JS (Socket.IO) 应用程序可能会遇到内存泄漏,尤其是在事件活动频繁且长时间运行的应用程序中。
  3. 对外部库的依赖:Node.JS (Socket.IO) 通常依赖于许多第三方库,如果不维护这些库,可能会影响整体性能。

性能分析一目了然

RabbitMQ with Web MQTT Plugin vs. Node.js : Performance and Memory Usage Comparison

RabbitMQ with Web MQTT Plugin vs. Node.js : Performance and Memory Usage Comparison

流程概述

  • 带有 Web MQTT 插件的 RabbitMQ
    • CPU 使用率:5.2%
    • 内存使用量:2.8%(5.97 GB 虚拟内存,887 MB 常驻内存)
    • 正常运行时间:18小时26分钟
  • Node.js (server.js)
    • CPU 使用率:50.5%
    • 内存使用量:0.4%(1.04 GB 虚拟内存,257 MB 常驻内存)
    • 正常运行时间:4小时1分钟

这些数字给出了每个服务如何消耗资源的初步印象。

CPU 使用率比较

  • RabbitMQ 对 CPU 的占用相对较小,仅消耗 5.2%,即使它管理 38 个事件(通知、数据重新加载和队列管理任务)。这种低 CPU 使用率是 RabbitMQ 的特征,因为它针对消息处理和异步通信进行了优化。
  • Node.js (server.js) 消耗的 CPU 显着增加,达到 50.5%。这种高使用率表明 server.js 可能正在处理更多计算密集型任务,可能与管理 WebSocket 连接、处理请求或处理实时数据有关。这种高 CPU 使用率可能会影响服务器在较高负载下或同时运行其他应用程序时的性能。

内存使用情况比较

  • RabbitMQ 显示较高的内存使用量,驻留内存为 887 MB,这对于通过 Web MQTT 插件处理连续 WebSocket 连接和 MQTT 消息传递的消息代理来说是合理的。它的虚拟内存占用量(5.97 GB)很高,但这通常是由于预分配而不是实际使用的内存造成的。
  • Node.js (server.js) 的内存占用要低得多,只有 257 MB 常驻内存。 Node.js 应用程序通常占用的内存较小,但会根据任务的复杂性而增长。它相对较低的内存使用率表明它对于处理任务进行了很好的优化,尽管较高的 CPU 使用率可能表明 CPU 密集型任务的效率低下。

正常运行时间和稳定性

  • RabbitMQ 的正常运行时间超过 18 小时,并且它使用的 CPU 最少,这表明它在较长时间内保持稳定和高效。
  • Node.js (server.js) 仅运行了 4 小时,但消耗了大量 CPU。如果这种 CPU 使用趋势持续下去,它可能会成为瓶颈,可能需要重新启动或优化,特别是对于期望高正常运行时间的生产环境。

对系统性能的影响

  • 带有 Web MQTT 插件的 RabbitMQ 似乎对 CPU 的要求较低,内存使用量适中。这使得它非常适合需要高吞吐量消息传递和最小延迟的应用程序。当前的资源使用量似乎并不过分,但建议在较长的正常运行时间内监控内存,因为消息代理可以通过大量持久消息来累积内存使用量。
  • Node.js (server.js) CPU 使用率为 50.5% 表明它可能受 CPU 限制,这可能会影响其他进程或降低高负载下的系统响应能力。如果 server.js 处理 WebSocket 连接,优化异步任务的代码或卸载某些进程可以减少 CPU 使用率。 Node.js 中的高 CPU 使用率也可能表明需要跨多个实例进行负载平衡,特别是当服务器需要扩展以处理更多事件时。

优化建议

  • RabbitMQ:虽然 RabbitMQ 的内存使用量适中,但建议进行监控以确保其不会随着时间的推移无限制地增长,尤其是随着事件量的增加。
  • Node.js (server.js)
    • 优化 CPU 使用率:检查任何 CPU 密集型操作的代码或可能受益于异步处理的同步代码。
    • 基准和负载测试:进行压力测试,看看 server.js CPU 使用率是否会随着并发事件的增加而进一步增加。这可以帮助识别特定的代码瓶颈。
    • 扩展:考虑通过在负载均衡器后面运行多个实例来水平扩展 server.js,特别是在典型工作负载下持续存在高 CPU 使用率的情况下。

延迟

  • 带有 Web MQTT 插件的 RabbitMQ:通常具有较低的延迟,特别是在轻量级消息的实时通信中,非常适合通知和数据重新加载场景。
  • Node.JS (Socket.IO):低延迟,但高 CPU 负载可能会导致延迟,特别是在应用程序处理 CPU 密集型事件时。

结论

带有 Web MQTT 插件的 RabbitMQ 对于需要实时消息处理的应用程序来说是一个不错的选择,特别是对于包括通知、数据重新加载和队列管理在内的 36 个事件。 RabbitMQ 的 CPU 使用率约为 5.2%,对于高消息传递负载来说是稳定的,特别是在需要低延迟和双向通信时。

Node.JS (Socket.IO) 适合需要具有双向通信的事件驱动架构的应用程序。然而,随着CPU使用率达到50.5%,应用程序在需要高CPU处理的场景中可能会面临限制。因此,如果使用量持续增长,可以考虑集群或工作线程等解决方案。

总体:

  • 带有 Web MQTT 插件的 RabbitMQ:强烈推荐用于具有大量消息传递和通知需求的应用程序。它还简化了通过 WebSocket 有效管理连接和消息的过程。
  • Node.JS (Socket.IO):非常适合需要快速响应和双向通信但可能需要进一步调整以减少 CPU 负载的 Web 应用程序。

通过 Glances 进行性能分析,两种技术都通过捕获每个进程中的最高 CPU 使用率值来展示结果,这非常适合此场景。然而,定期监控是必要的,以防止 CPU 或内存使用量出现峰值,从而影响整体系统性能。

如有错误请指正?

注意:如果您有任何测试建议,请在下面评论,并随时推荐其他客户端和服务器之间实时通信的工具。

文档:
https://www.rabbitmq.com/docs/web-mqtt
https://socket.io/docs/v4/

以上是带有 Web MQTT 插件的 RabbitMQ 与 Node.js:性能和内存使用情况比较的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板