您好,登錄后才能下訂單哦!
小編給大家分享一下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版本源碼講解。
Single
多個(gè)客戶端直接與Broker連接。 Cluster
多個(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)。
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
基準(zhǔn)1000W連接/40個(gè)節(jié)點(diǎn)=25W/node
Message Rate for Publisher
Test | Msg/sec |
---|---|
QoS 0 | 4.00 |
QoS 1 | 2.00 |
?詳細(xì)性能測試報(bào)告可到官網(wǎng)下載PDF文檔
機(jī)器:
Test | Msg/sec |
---|---|
Instance Type | c4.2xlarge |
RAM | 15GiB (~16GB) |
vCPU | 8 |
Physical Processor | Intel Xeon E5-2666 v3 |
Clock Speed (GHz) | 2.9 |
Dedicated EBS Bandwidth (Mbps) | 1000 |
Operating System | Vanilla 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保證,也具有出色的性能。
生產(chǎn):Linux是生產(chǎn)環(huán)境當(dāng)前支持的唯一操作系統(tǒng)。建議使用CentOS7或其他基于RHEL的發(fā)行版。
至少4GB RAM
4個(gè)或更多CPU
100GB或更多可用磁盤空間。
生產(chǎn):需要OpenJDK JRE 11或更高版本。
您可以通過幾種方式優(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
在具有許多連接的系統(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è)資訊頻道!
免責(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)容。