HiveMQ是什么

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

简单介绍

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

它是纯Java实现的。

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

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

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

拓扑图

Single HiveMQ是什么

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

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

架构图

HiveMQ是什么

  • 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/secQoS 04.00QoS 12.00

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

机器:

TestMsg/secInstance Typec4.2xlargeRAM15GiB (~ 16 gb) vCPU8Physical ProcessorIntel Xeon 2666 e5 v3Clock速度(2.9 GHz)专用EBS带宽(Mbps) 1000操作SystemVanilla亚马逊Linux ami-b73b63a0

结论:

hivemq客户话费8分47秒连接1000 w个连接到hivemq,平均每秒500个连接CPU:

38%→25%内存:6.97 - -7.6

快速结果:连接,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是什么