首页 web前端 js教程 带有 Web MQTT 插件的 RabbitMQ 与 Node.js:性能和内存使用情况比较

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

Nov 02, 2024 pm 08:56 PM

简介

在需要实时、高效数据通信的应用中,两种常用的技术是带有 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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1653
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1251
29
C# 教程
1224
24
前端热敏纸小票打印遇到乱码问题怎么办? 前端热敏纸小票打印遇到乱码问题怎么办? Apr 04, 2025 pm 02:42 PM

前端热敏纸小票打印的常见问题与解决方案在前端开发中,小票打印是一个常见的需求。然而,很多开发者在实...

神秘的JavaScript:它的作用以及为什么重要 神秘的JavaScript:它的作用以及为什么重要 Apr 09, 2025 am 12:07 AM

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

谁得到更多的Python或JavaScript? 谁得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

如何实现视差滚动和元素动画效果,像资生堂官网那样?
或者:
怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? 如何实现视差滚动和元素动画效果,像资生堂官网那样? 或者: 怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? Apr 04, 2025 pm 05:36 PM

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的演变:当前的趋势和未来前景 JavaScript的演变:当前的趋势和未来前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? 如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? Apr 04, 2025 pm 05:09 PM

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

JavaScript引擎:比较实施 JavaScript引擎:比较实施 Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

前端开发中如何实现类似 VSCode 的面板拖拽调整功能? 前端开发中如何实现类似 VSCode 的面板拖拽调整功能? Apr 04, 2025 pm 02:06 PM

探索前端中类似VSCode的面板拖拽调整功能的实现在前端开发中,如何实现类似于VSCode...

See all articles