EMQ 的共享訂閱

EMQ 是一款基于高并發(fā)的 Erlang/OTP 語言平臺設計,支持百萬級連接和分布式集群窘行,發(fā)布/訂閱模式的開源MQTT消息服務器。

EMQ

EMQ 單節(jié)點支持100萬并發(fā)MQTT連接峰值負載加派,超過了絕大多數(shù)的后端服務對消息的處理能力熟尉。因此往往需要多個后端服務節(jié)點來分擔。但是基于的 MQTT 3.1.1 協(xié)議標準熙卡,如果多個后端服務節(jié)點訂閱了相同的 topic杖刷,來自這些 topic 消息會被同時派發(fā)給所有的后端服務。為了解決這樣的問題驳癌,EMQ 提供了共享訂閱這個機制滑燃。

共享訂閱 (Shared Subscription) 是指在多訂閱者間采用分組負載平衡方式派發(fā)消息

EMQ 提供了如下兩種共享訂閱的方式:

  • $queue/ 隊列共享訂閱
  • $share/<group/ 分組共享訂閱

隊列共享訂閱是指以 $queue/ 開頭的 topic 例如 $queue/topic1,如果有多個客戶端同時訂閱了颓鲜,EMQ 會把發(fā)送到 topic1 的消息以負載均衡的方式派發(fā)給所有客戶端表窘,保證一條消息只會派發(fā)給一個客戶端。需要注意前綴 $queue 只適用于訂閱時甜滨,發(fā)布消息時不需要乐严。

分組共享訂閱是一個更加靈活的方式,實現(xiàn)方式為所有以 $share/<group>/ 開頭的的 topic 會以 group 來分組進行消息的負載均衡派發(fā)衣摩。例如有4個客戶端依次訂閱了$share/group1/topic1昂验,$share/group1/topic1,$share/group2/topic1 和 $share/group1/topic1艾扮。所有發(fā)送到 topic1 的消息會被同時派發(fā)到分組 group1 和 group2既琴,但是兩個分組中的每次都只會有一個客戶端收到消息。同樣前綴$share/<group>/ 只適用于訂閱時泡嘴,發(fā)布消息時不需要甫恩。

以上都是基于單個 EMQ 節(jié)點的共享訂閱方法,在多個 EMQ 節(jié)點組成的集群環(huán)境下也能實現(xiàn)共享訂閱的消息只會到達一個或者每組中的一個訂閱客戶端嗎酌予?

很遺憾填物,答案是不能。雖然 EMQ 能簡單的通過 HAProxy 來搭建分布式集群霎终,但是直到最新的 2.3.11 版本滞磺,都沒有支持集群環(huán)境下的共享訂閱。如果在集群中使用共享訂閱莱褒,在消息到達時击困,集群機制會把消息發(fā)送到每個 EMQ 節(jié)點上,隨后每個 EMQ 節(jié)點會把消息以負載均衡的方式派發(fā)給與自己建立連接的訂閱客戶端。換句話說阅茶,集群環(huán)境中的每個節(jié)點上都會有一個或者每組一個訂閱客戶端收到共享訂閱的消息蛛枚。

幸運的是,結(jié)合 EMQ 提供的本地訂閱機制可以實現(xiàn)脸哀,可實現(xiàn)集群下的共享訂閱蹦浦。

本地訂閱(Local Subscription) 只在本節(jié)點創(chuàng)建訂閱與路由表,不會在集群節(jié)點間廣播全局路由

本地訂閱的方式跟隊列共享訂閱很相似撞蜂,都是在普通的 topic 前加上固定的前綴盲镶。本地共享訂閱的前綴是 $local/。

使用本地共享訂閱以后蝌诡,來自訂閱的 topic 的消息只會在消息發(fā)布客戶端連接的 EMQ 節(jié)點上進行派發(fā)溉贿,也就做到了只有這個節(jié)點上一個或者每組中的一個共享訂閱客戶端收到消息。

如果消息發(fā)布客戶端所在的 EMQ 節(jié)點上沒有訂閱客戶端浦旱,由于本地訂閱的特性宇色,其他節(jié)點上訂閱客戶端也無法收到消息。因此必須保證 EMQ 集群中的每個節(jié)點上都至少得一個本地共享訂閱客戶端才能達真正意義上的共享訂閱颁湖。

由于該實現(xiàn)機制要求每個 EMQ 節(jié)點上都有共享訂閱客戶端宣蠕,結(jié)合業(yè)務就是要求每個 EMQ 節(jié)點上至少有一個消息處理服務連接,考慮備份則每個節(jié)點需要至少兩個服務甥捺。擴容 EMQ 節(jié)點需要同時對服務節(jié)點相應擴容植影,因而稱該實現(xiàn)方式為集群環(huán)境下的共享訂閱。

EMQ 官方團隊已經(jīng)表明會在下次大版本更新時支持集群下的共享訂閱涎永,因此如果目前單 EMQ 節(jié)點足夠支撐業(yè)務需求可延緩集群化時間思币,等待下個大版本更新的發(fā)布。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末羡微,一起剝皮案震驚了整個濱河市谷饿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妈倔,老刑警劉巖博投,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盯蝴,居然都是意外死亡毅哗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門捧挺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虑绵,“玉大人,你說我怎么就攤上這事闽烙〕峋Γ” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捕发。 經(jīng)常有香客問我疏旨,道長,這世上最難降的妖魔是什么扎酷? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任檐涝,我火速辦了婚禮,結(jié)果婚禮上法挨,老公的妹妹穿的比我還像新娘谁榜。我一直安慰自己,他們只是感情好坷剧,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著喊暖,像睡著了一般惫企。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陵叽,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天狞尔,我揣著相機與錄音,去河邊找鬼巩掺。 笑死偏序,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的胖替。 我是一名探鬼主播研儒,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼独令!你這毒婦竟也來了端朵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤燃箭,失蹤者是張志新(化名)和其女友劉穎冲呢,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體招狸,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡敬拓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了裙戏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乘凸。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖累榜,靈堂內(nèi)的尸體忽然破棺而出翰意,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布冀偶,位于F島的核電站醒第,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏进鸠。R本人自食惡果不足惜稠曼,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望客年。 院中可真熱鬧霞幅,春花似錦、人聲如沸量瓜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绍傲。三九已至扔傅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烫饼,已是汗流浹背猎塞。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杠纵,地道東北人荠耽。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像比藻,于是被迫代替她去往敵國和親铝量。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理银亲,服務發(fā)現(xiàn)款违,斷路器,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 姓名:周小蓬 16019110037 轉(zhuǎn)載自:http://blog.csdn.net/YChenFeng/art...
    aeytifiw閱讀 34,715評論 13 425
  • feisky云計算群凶、虛擬化與Linux技術筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,833評論 0 5
  • 首先请梢,給大家呈現(xiàn)一個場景: 下午放學回到家赠尾,小女孩坐在客廳看電視。這時候毅弧,房門"咯吱"一聲響了气嫁,小女孩...
    萌豆派對閱讀 496評論 0 1
  • 1.驅(qū)動初始化處理 2.類MemoryHeapBase繼承了類BnMemoryHeap,作為binder機制中Se...
    魏國彬閱讀 576評論 0 0