溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

HiveMQ是什么

發(fā)布時(shí)間:2021-12-10 11:10:27 來源:億速云 閱讀:2510 作者:小新 欄目:互聯(lián)網(wǎng)科技

小編給大家分享一下HiveMQ是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

簡單介紹

HiveMQ是企業(yè)級MQTT Broker,提供高性能、高可用、高擴(kuò)展、高安全性的企業(yè)級服務(wù)。

它是純Java實(shí)現(xiàn)的。

官網(wǎng)地址:http://www.hivemq.com

基于它如上的描述,所以后續(xù)我們就是基于它的高性能、高可用、高擴(kuò)展、高安全性這幾個(gè)特點(diǎn)來分析它的源碼。

注意:本篇源碼都是基于HiveMQ 3.1.2版本源碼講解。

拓?fù)鋱D

Single HiveMQ是什么

多個(gè)客戶端直接與Broker連接。 Cluster HiveMQ是什么

多個(gè)客戶端與Load Balancer連接,由Load Balancer做負(fù)載均衡,將連接分發(fā)到各個(gè)Broker。 多個(gè)Broker組成Cluster,由JGroup進(jìn)行集群通訊。 多個(gè)Broker由一致性hash環(huán)虛節(jié)點(diǎn),進(jìn)行集群中數(shù)據(jù)的主主備份,以達(dá)到高可用。 HiveMQ提供多種集群Discovery來達(dá)到不同組網(wǎng)場景中的集群發(fā)現(xiàn)。

架構(gòu)圖

HiveMQ是什么

  • Handlers由實(shí)現(xiàn)Netty ChannelHandlerAdapter。處理SSL;處理MQTT協(xié)議的codec;處理監(jiān)控?cái)?shù)據(jù)收集;處理流量限制;擴(kuò)展點(diǎn)回調(diào)觸發(fā)等客戶端長鏈接。

  • SPI是HiveMQ擴(kuò)展出來為做HiveMQ Broker端二次開發(fā),提供各種- - - Callback、 Cache、Scheduler、Authentication、Authorization、- Configuration等等擴(kuò)展點(diǎn);還提供了各種異步/同步的接口Service。以便開發(fā)人員基于HiveMQ開發(fā)屬于自己的業(yè)務(wù);

  • Plugins是基于SPI提供出來的擴(kuò)展點(diǎn),按照HiveMQ的Plugin開發(fā)要求,注冊屬于客戶自己的Plugin,HiveMQ官方也給我們提供出來了一些基礎(chǔ)插件及各種插件的示例。

  • ClusterServices是處理集群連接、數(shù)據(jù)備份、數(shù)據(jù)交換、節(jié)點(diǎn)狀態(tài)、一致性has虛擬節(jié)點(diǎn)等處理的一堆Service

  • Persistences是處理消息的存儲(chǔ)、Cluster節(jié)點(diǎn)間的數(shù)據(jù)存儲(chǔ)/同步。

  • LocalPersistences是處理消息在當(dāng)前節(jié)點(diǎn)的信息存儲(chǔ)。

開源框架使用

  • 使用Guice做DI

  • 使用Netty 4做網(wǎng)絡(luò)框架

  • 使用JGroups做Cluster Node之間的集群通訊

  • 使用Exodus做Broker信息文件持久化存儲(chǔ)

  • 使用Dropwizard Metrics做Broker的統(tǒng)計(jì)、監(jiān)控

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

  • 使用Jetty做Broker端servlet容器

  • 使用Resteasy做Broker端restfull框架

  • 使用Quartz/做Broker端任務(wù)的調(diào)度

  • 其他還有一些使用的框架不一一列舉

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

身份認(rèn)證:https://www.hivemq.com/docs/4.2/extensions/introduction.html(貌似可以為每個(gè)網(wǎng)格提供一個(gè)身份認(rèn)證器?)

硬件配置及性能優(yōu)化:https://www.hivemq.com/docs/4.2/hivemq/system-requirements.html(包含文件句柄數(shù)調(diào)整及TCP緩沖器大小調(diào)整)

hivemq擴(kuò)展開發(fā)庫:https://github.com/hivemq?q=extension&type=&language=java(提供各種各樣的api,感覺可以做很多東西)

擴(kuò)展開發(fā)庫api:https://www.hivemq.com/docs/4.2/extensions-javadoc/index.html

hivemq擴(kuò)展程序HTTP提供了就緒檢查,這意味著服務(wù)能夠檢測HiveMQ實(shí)例是否脫機(jī):https://github.com/hivemq/hivemq-heartbeat-extension

hivemq基準(zhǔn)測試

基準(zhǔn)1000W連接/40個(gè)節(jié)點(diǎn)=25W/node

Message Rate for Publisher

TestMsg/sec
QoS 04.00
QoS 12.00

?詳細(xì)性能測試報(bào)告可到官網(wǎng)下載PDF文檔

機(jī)器:

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

結(jié)論:

hivemq client話費(fèi)8分47秒連接1000W個(gè)連接到hivemq,平均每秒500個(gè)連接

CPU:38%→25%

內(nèi)存: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分鐘的測試時(shí)間內(nèi),總共有31.3億條消息(3,131,776,800 msg)傳出消息和3億msg(300,465,888 msg)傳入消息。

查看系統(tǒng)帶寬時(shí),HiveMQ平均每秒處理389.78兆字節(jié)(408,711,565字節(jié)/秒)出,并處理327.84 MB /秒(343,762,614字節(jié)/秒))入。

在測試執(zhí)行期間,CPU使用率平均為64.72%,內(nèi)存為11.33 GB(12,164,655,331字節(jié))。

QoS 0測試表明

HiveMQ在大型群集中具有強(qiáng)大的吞吐能力,可以充分發(fā)揮其在水平擴(kuò)展方面的優(yōu)勢。 具有1000萬個(gè)并發(fā)連接的客戶端的HiveMQ實(shí)現(xiàn)了每秒170萬條外發(fā)消息的恒定吞吐量,平均CPU負(fù)載不超過64%。 為了使數(shù)字更易于掌握,讓我們將它們與一些龐大的Internet應(yīng)用程序進(jìn)行比較,其中一個(gè)很好的例子是WhatsApp。 2014年,WhatsApp發(fā)推文稱,一天之內(nèi),它們已收到640億條消息(傳入200億條消息,傳出440億條消息)。 將總計(jì)640億條消息與我們在測試中獲得的數(shù)量進(jìn)行比較,每30分鐘添加傳入和傳出流量時(shí),我們有3,432,242,688條消息。每天總共增加了1647.5億條消息(164,747,649,024條消息)。 HiveMQ群集每天可以輕松處理通過整個(gè)WhatsApp基礎(chǔ)架構(gòu)發(fā)送的消息量的2.5倍! 在查看性能以及負(fù)載指標(biāo)時(shí),很明顯,HiveMQ不僅提供高吞吐量,而且以64%的CPU和73%的內(nèi)存使用率保持受控和穩(wěn)定的狀態(tài)。

QoS 1測試表明,

HiveMQ每秒平均可處理78萬條消息(779,576 msg / sec),每秒可處理78萬條消息(779.577 msg / sec)。 在30分鐘的測試期間內(nèi),總共有14億條消息(1,403,237,449 msg)傳出消息和14億消息(1,403,237,882 msg)傳入。

查看系統(tǒng)帶寬時(shí),HiveMQ平均每秒處理279.44兆字節(jié)(293,010,785字節(jié)/秒),并處理220.24 MB /秒(230,935,379字節(jié)/秒)。

HiveMQ可以處理硬件上的10.000.000個(gè)連接,并具有出色的,穩(wěn)定的吞吐量,同時(shí)在傳入和傳出兩個(gè)方向(QoS 1測試)上具有170萬個(gè)傳出消息(QoS 0測試)和780 msg / sec。 HiveMQ能夠輕松地水平擴(kuò)展到群集節(jié)點(diǎn)的中間兩位數(shù) HiveMQ能夠處理具有高放大倍數(shù)的大型扇出情況。在測試時(shí)間范圍內(nèi),吞吐量保持恒定且穩(wěn)定,消息速率隨群集大小和CPU數(shù)量而變化 HiveMQ具有水平擴(kuò)展的能力,因此非常適合小型和大型部署。 它是最具擴(kuò)展性的MQTT代理,即使提供QoS 1保證,也具有出色的性能。

hivemq配置項(xiàng)

操作系統(tǒng)

生產(chǎn):Linux是生產(chǎn)環(huán)境當(dāng)前支持的唯一操作系統(tǒng)。建議使用CentOS7或其他基于RHEL的發(fā)行版。

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

  • 4個(gè)或更多CPU

  • 100GB或更多可用磁盤空間。

環(huán)境

生產(chǎn):需要OpenJDK JRE 11或更高版本。

Linux配置優(yōu)化

您可以通過幾種方式優(yōu)化Linux配置:

增加打開文件限制

如果在Linux操作系統(tǒng)上運(yùn)行HiveMQ,請確保允許HiveMQ進(jìn)程打開足夠數(shù)量的文件。要調(diào)整限制,請?jiān)?etc/security/limits.conf文件中添加以下幾行:

  • hivemq hard nofile 1000000

  • hivemq soft nofile 1000000

  • root hard nofile 1000000

  • root soft nofile 1000000

調(diào)整TCP設(shè)置

在具有許多連接的系統(tǒng)上,可能有必要調(diào)整TCP配置并使系統(tǒng)打開更多套接字。要進(jìn)行這些調(diào)整,請?jiān)?etc/sysctl.conf文件中添加以下行:

#這會(huì)使內(nèi)核在服務(wù)過載時(shí)主動(dòng)發(fā)送RST數(shù)據(jù)包。

net.ipv4.tcp_fin_timeout = 30

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

fs.file-MAX = 5097152

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

net.ipv4.tcp_tw_recycle = 1

  • #從協(xié)議的角度來看,在安全的情況下,允許將等待套接字重新用于新連接。

net.ipv4.tcp_tw_reuse = 1

  • #的默認(rèn)大小接收緩沖區(qū)的套接字使用。

net.core.rmem_default = 524288

  • #該套接字使用的發(fā)送緩沖區(qū)的默認(rèn)大小。

net.core.wmem_default = 524288

  • #套接字使用的已接收緩沖區(qū)的最大大小。

net.core.rmem_max = 67108864

  • #套接字使用的已發(fā)送緩沖區(qū)的最大大小。

net.core.wmem_max = 67108864

  • #每個(gè)TCP連接的接收緩沖區(qū)的大小。(最小值,默認(rèn)值,最大值)

net.ipv4.tcp_rmem = 4096 87380 16777216

  • #每個(gè)TCP連接發(fā)送的緩沖區(qū)的大小。(最小值,默認(rèn)值,最大值)

net.ipv4.tcp_wmem = 4096 65536 16777216

要應(yīng)用更改,請鍵入sysctl -p或重新啟動(dòng)系統(tǒng)。

以上是“HiveMQ是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI