千家信息网

HiveMQ是什么

发表于:2024-12-02 作者:千家信息网编辑
千家信息网最后更新 2024年12月02日,小编给大家分享一下HiveMQ是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!简单介绍HiveMQ是企业级MQTT B
千家信息网最后更新 2024年12月02日HiveMQ是什么

小编给大家分享一下HiveMQ是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

简单介绍

HiveMQ是企业级MQTT Broker,提供高性能、高可用、高扩展、高安全性的企业级服务。

它是纯Java实现的。

官网地址:http://www.hivemq.com

基于它如上的描述,所以后续我们就是基于它的高性能、高可用、高扩展、高安全性这几个特点来分析它的源码。

注意:本篇源码都是基于HiveMQ 3.1.2版本源码讲解。

拓扑图

Single

多个客户端直接与Broker连接。 Cluster

多个客户端与Load Balancer连接,由Load Balancer做负载均衡,将连接分发到各个Broker。 多个Broker组成Cluster,由JGroup进行集群通讯。 多个Broker由一致性hash环虚节点,进行集群中数据的主主备份,以达到高可用。 HiveMQ提供多种集群Discovery来达到不同组网场景中的集群发现。

架构图

  • Handlers由实现Netty ChannelHandlerAdapter。处理SSL;处理MQTT协议的codec;处理监控数据收集;处理流量限制;扩展点回调触发等客户端长链接。

  • SPI是HiveMQ扩展出来为做HiveMQ Broker端二次开发,提供各种- - - Callback、 Cache、Scheduler、Authentication、Authorization、- Configuration等等扩展点;还提供了各种异步/同步的接口Service。以便开发人员基于HiveMQ开发属于自己的业务;

  • Plugins是基于SPI提供出来的扩展点,按照HiveMQ的Plugin开发要求,注册属于客户自己的Plugin,HiveMQ官方也给我们提供出来了一些基础插件及各种插件的示例。

  • ClusterServices是处理集群连接、数据备份、数据交换、节点状态、一致性has虚拟节点等处理的一堆Service

  • Persistences是处理消息的存储、Cluster节点间的数据存储/同步。

  • LocalPersistences是处理消息在当前节点的信息存储。

开源框架使用

  • 使用Guice做DI

  • 使用Netty 4做网络框架

  • 使用JGroups做Cluster Node之间的集群通讯

  • 使用Exodus做Broker信息文件持久化存储

  • 使用Dropwizard Metrics做Broker的统计、监控

  • 使用Kryo做序列化/反序列化

  • 使用Jetty做Broker端servlet容器

  • 使用Resteasy做Broker端restfull框架

  • 使用Quartz/做Broker端任务的调度

  • 其他还有一些使用的框架不一一列举

官方工具: https://www.hivemq.com/developers/community/

身份认证:https://www.hivemq.com/docs/4.2/extensions/introduction.html(貌似可以为每个网格提供一个身份认证器?)

硬件配置及性能优化:https://www.hivemq.com/docs/4.2/hivemq/system-requirements.html(包含文件句柄数调整及TCP缓冲器大小调整)

hivemq扩展开发库:https://github.com/hivemq?q=extension&type=&language=java(提供各种各样的api,感觉可以做很多东西)

扩展开发库api:https://www.hivemq.com/docs/4.2/extensions-javadoc/index.html

hivemq扩展程序HTTP提供了就绪检查,这意味着服务能够检测HiveMQ实例是否脱机:https://github.com/hivemq/hivemq-heartbeat-extension

hivemq基准测试

基准1000W连接/40个节点=25W/node

Message Rate for Publisher

TestMsg/sec
QoS 04.00
QoS 12.00


详细性能测试报告可到官网下载PDF文档

机器:

TestMsg/sec
Instance Typec4.2xlarge
RAM15GiB (~16GB)
vCPU8
Physical ProcessorIntel Xeon E5-2666 v3
Clock Speed (GHz)2.9
Dedicated EBS Bandwidth (Mbps)1000
Operating SystemVanilla Amazon Linux ami-b73b63a0

结论:

hivemq client话费8分47秒连接1000W个连接到hivemq,平均每秒500个连接

CPU:38%→25%

内存:6.97-7.6

Quick Results: Connect & Subscribe Test - 10,000,000 MQTT clients

HiveMQ 3.3.0

40 node Cluster

Connect Duration: Connect Speed (avg):

CPU Memory

Subscribe Duration: Subscribe Speed (avg):

CPU Memory

8 min 47 sec 19,011 connects/sec 30 % 5.07 GB

4 min 31 sec 36,765 subscribes/sec 38 % 6.97 GB

测试表明,HiveMQ每秒平均可处理174万条消息(每秒1,739,876毫秒/秒)出,而每秒可处理16.7万条消息(166,925毫秒/秒)入。 在30分钟的测试时间内,总共有31.3亿条消息(3,131,776,800 msg)传出消息和3亿msg(300,465,888 msg)传入消息。

查看系统带宽时,HiveMQ平均每秒处理389.78兆字节(408,711,565字节/秒)出,并处理327.84 MB /秒(343,762,614字节/秒))入。

在测试执行期间,CPU使用率平均为64.72%,内存为11.33 GB(12,164,655,331字节)。

QoS 0测试表明

HiveMQ在大型群集中具有强大的吞吐能力,可以充分发挥其在水平扩展方面的优势。 具有1000万个并发连接的客户端的HiveMQ实现了每秒170万条外发消息的恒定吞吐量,平均CPU负载不超过64%。 为了使数字更易于掌握,让我们将它们与一些庞大的Internet应用程序进行比较,其中一个很好的例子是WhatsApp。 2014年,WhatsApp发推文称,一天之内,它们已收到640亿条消息(传入200亿条消息,传出440亿条消息)。 将总计640亿条消息与我们在测试中获得的数量进行比较,每30分钟添加传入和传出流量时,我们有3,432,242,688条消息。每天总共增加了1647.5亿条消息(164,747,649,024条消息)。 HiveMQ群集每天可以轻松处理通过整个WhatsApp基础架构发送的消息量的2.5倍! 在查看性能以及负载指标时,很明显,HiveMQ不仅提供高吞吐量,而且以64%的CPU和73%的内存使用率保持受控和稳定的状态。

QoS 1测试表明,

HiveMQ每秒平均可处理78万条消息(779,576 msg / sec),每秒可处理78万条消息(779.577 msg / sec)。 在30分钟的测试期间内,总共有14亿条消息(1,403,237,449 msg)传出消息和14亿消息(1,403,237,882 msg)传入。

查看系统带宽时,HiveMQ平均每秒处理279.44兆字节(293,010,785字节/秒),并处理220.24 MB /秒(230,935,379字节/秒)。

HiveMQ可以处理硬件上的10.000.000个连接,并具有出色的,稳定的吞吐量,同时在传入和传出两个方向(QoS 1测试)上具有170万个传出消息(QoS 0测试)和780 msg / sec。 HiveMQ能够轻松地水平扩展到群集节点的中间两位数 HiveMQ能够处理具有高放大倍数的大型扇出情况。在测试时间范围内,吞吐量保持恒定且稳定,消息速率随群集大小和CPU数量而变化 HiveMQ具有水平扩展的能力,因此非常适合小型和大型部署。 它是最具扩展性的MQTT代理,即使提供QoS 1保证,也具有出色的性能。

hivemq配置项

操作系统

生产:Linux是生产环境当前支持的唯一操作系统。建议使用CentOS7或其他基于RHEL的发行版。

最低硬件要求
  • 至少4GB RAM

  • 4个或更多CPU

  • 100GB或更多可用磁盘空间。

环境

生产:需要OpenJDK JRE 11或更高版本。

Linux配置优化

您可以通过几种方式优化Linux配置:

增加打开文件限制

如果在Linux操作系统上运行HiveMQ,请确保允许HiveMQ进程打开足够数量的文件。要调整限制,请在/etc/security/limits.conf文件中添加以下几行:

  • hivemq hard nofile 1000000

  • hivemq soft nofile 1000000

  • root hard nofile 1000000

  • root soft nofile 1000000

调整TCP设置

在具有许多连接的系统上,可能有必要调整TCP配置并使系统打开更多套接字。要进行这些调整,请在/etc/sysctl.conf文件中添加以下行:

#这会使内核在服务过载时主动发送RST数据包。

net.ipv4.tcp_fin_timeout = 30

#可分配的最大文件句柄。

fs.file-MAX = 5097152

#启用等待插座的快速回收。

net.ipv4.tcp_tw_recycle = 1

  • #从协议的角度来看,在安全的情况下,允许将等待套接字重新用于新连接。

net.ipv4.tcp_tw_reuse = 1

  • #的默认大小接收缓冲区的套接字使用。

net.core.rmem_default = 524288

  • #该套接字使用的发送缓冲区的默认大小。

net.core.wmem_default = 524288

  • #套接字使用的已接收缓冲区的最大大小。

net.core.rmem_max = 67108864

  • #套接字使用的已发送缓冲区的最大大小。

net.core.wmem_max = 67108864

  • #每个TCP连接的接收缓冲区的大小。(最小值,默认值,最大值)

net.ipv4.tcp_rmem = 4096 87380 16777216

  • #每个TCP连接发送的缓冲区的大小。(最小值,默认值,最大值)

net.ipv4.tcp_wmem = 4096 65536 16777216

要应用更改,请键入sysctl -p或重新启动系统。

以上是"HiveMQ是什么"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

消息 处理 测试 大小 系统 字节 文件 节点 缓冲 套接字 数据 缓冲区 集群 开发 调整 最大 万条 客户 吞吐 配置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全教育主题团日活动简报 数据库面试题汇总 carbon在哪个数据库 国家网络安全教育周ppt 数据库能够做联机事务处理吗 网络技术实验指南 网页登陆页面用了什么网络技术 澳太尔仿真软件计算服务器 软件开发考研报考哪个专业好 稳健安全的sql分布式数据库 传送网通信网络技术 计算机网络技术兴起的意义 广东常规软件开发供应商 如何让幼儿网络安全 网络技术支撑破案经验材料 北创高科网络技术有限公司 sql数据库怎么创建表设置主键 陈顶天软件开发成功了吗 软件开发验收方式有哪些 计算机与网络技术应用试题 服务器机房管理维护要求 前后端服务器通信 北海网络安全会议 网络安全作业指导书 如何构建本地geerit服务器 经营范围网络技术服务 海南商业软件开发预算 长春市办公软件开发公司 sql数据库误更新怎么恢复 装修erp软件开发
0