HiveMQ是什么

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

简单介绍

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

它是纯Java实现的。

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

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

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

拓扑图

Single HiveMQ是什么  hivemq 第1张

多个客户端直接与Broker连接。 Cluster HiveMQ是什么  hivemq 第2张

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

架构图

HiveMQ是什么  hivemq 第3张

  • 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是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注蜗牛博客行业资讯频道!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论电报频道链接