NSQ 消息隊(duì)列

異步任務(wù)與消息隊(duì)列

同步任務(wù):一定要等任務(wù)執(zhí)行完了客们,得到結(jié)果管挟,才執(zhí)行下一個(gè)任務(wù)蟹地。

異步任務(wù):不用等任務(wù)執(zhí)行完李茫,直接執(zhí)行下一個(gè)任務(wù)沸手。

異步任務(wù)最簡(jiǎn)單可以用異步線程實(shí)現(xiàn)狰贯,golang 中可以用goroutine實(shí)現(xiàn)劫瞳,但受時(shí)間和不確定因素限制呕童,進(jìn)程有可能超時(shí)崔赌、退出或者被殺死意蛀,消息隊(duì)列可以定義任何時(shí)間的延遲耸别,幾天都可以。異步線程县钥、goroutine只是單機(jī)的實(shí)現(xiàn)秀姐,消息隊(duì)列是分布式的,可以跨語(yǔ)言夸系統(tǒng)若贮。消息隊(duì)列是獨(dú)立的省有,跨線程概念的,實(shí)現(xiàn)跨主機(jī)的分布式并發(fā)兜看。

消息隊(duì)列實(shí)現(xiàn)分布式的異步任務(wù)锥咸,利用分布式架構(gòu),實(shí)現(xiàn)可擴(kuò)展性细移,高性能等搏予,解決異構(gòu)系統(tǒng)通信,實(shí)現(xiàn)服務(wù)間的解耦弧轧。

消息系統(tǒng)類型

  1. Streaming的適合log日志批量寫入雪侥,強(qiáng)調(diào)性能。
  2. Queque隊(duì)列強(qiáng)調(diào)可靠性精绎,保證消息的正確傳達(dá)與處理速缨,強(qiáng)調(diào)task概念。

NSQ學(xué)習(xí)

NSQ是消息隊(duì)列的一種實(shí)現(xiàn)代乃,采用producer/consumer基于訂閱的模式旬牲,開(kāi)源、設(shè)計(jì)簡(jiǎn)單搁吓、架構(gòu)容易理解原茅,從而debug問(wèn)題變得簡(jiǎn)單明確,

因?yàn)镹SQ簡(jiǎn)單堕仔,可以通過(guò)NSQ了解和入門消息隊(duì)列擂橘,知道什么是消息隊(duì)列,消息隊(duì)列的基本概念和基本實(shí)現(xiàn)摩骨。

通過(guò)學(xué)習(xí)NSQ源代碼通贞,可以深入對(duì)go語(yǔ)言的理解。NSQ實(shí)際基于goroutine管道模式恼五,傳出過(guò)程:將goroutine chan 中傳遞message對(duì)象根據(jù)NSQ傳輸協(xié)議轉(zhuǎn)換成http tcp流中的frame二級(jí)制形式昌罩,傳入過(guò)程:通過(guò)http tcp 管道scream流讀寫解析消息,轉(zhuǎn)換到內(nèi)部go routine chan 消息灾馒,
峡迷,這樣就實(shí)現(xiàn)跨機(jī)器的網(wǎng)絡(luò)傳輸,從而實(shí)現(xiàn)分布式隊(duì)列。

t.memoryMsgChan = make(chan *Message, ctx.nsqd.getOpts().MemQueueSize)

NSQ可以定義內(nèi)存隊(duì)列的大谢娓恪(通過(guò)golang chan 方式 ),超過(guò)了直接落盤傅物,為了可靠性可以將內(nèi)存隊(duì)列長(zhǎng)度定義為零夯辖,讓所有消息直接落盤。

NSQ隊(duì)列實(shí)現(xiàn)通俗理解

領(lǐng)導(dǎo)負(fù)責(zé)布置任務(wù)董饰,把一個(gè)個(gè)任務(wù)放入隊(duì)列中蒿褂,個(gè)人負(fù)責(zé)完成任務(wù),從隊(duì)列中取出任務(wù)卒暂,任務(wù)完成后啄栓,給領(lǐng)導(dǎo)一個(gè)反饋(ACK)任務(wù)就被從隊(duì)列中刪除。重試過(guò)程相當(dāng)于也祠,一次任務(wù)搞不定(出錯(cuò)了)會(huì)被重新放進(jìn)任務(wù)隊(duì)列昙楚,但是會(huì)給你一個(gè)緩沖時(shí)間,等間隔預(yù)定義規(guī)則的時(shí)間再把任務(wù)發(fā)給你诈嘿。

NSQ分布式設(shè)計(jì)

NSQ分布式實(shí)現(xiàn)簡(jiǎn)單堪旧,不依賴第三方組件,不依賴于復(fù)雜算法奖亚。
具體實(shí)現(xiàn):consumer動(dòng)態(tài)訂閱全部的nsqd淳梦,可以從任何nsqd接收指定topic指定channal的消息,這樣不管從哪個(gè)nsqd發(fā)的消息都能收到昔字,某個(gè)nsqd掛了不影響使用(可用性爆袍,producer前可以掛loadblancer,或者通過(guò)主機(jī)池庫(kù)(如:隨機(jī)選擇主機(jī)ip)作郭,均勻向不同主機(jī)的不同nsqd發(fā)布消息陨囊,實(shí)現(xiàn)負(fù)載均衡,簡(jiǎn)單理解就是一個(gè)反過(guò)來(lái)的多http server加loadblancer的模型所坯。

NSQ特性

NSQ支持消息的壓縮
NSQ消息本身沒(méi)有順序
NSQ可以實(shí)現(xiàn)topic channel暫停
NSQ提供了簡(jiǎn)單的web ui谆扎,實(shí)現(xiàn)了可視化。

消息隊(duì)列分兩種一種push 一種pull芹助。
NSQ采用推的方式堂湖,通過(guò)ready inflight狀態(tài)來(lái)限流。

NSQ使用擴(kuò)展

通過(guò)nsq_to_file状土,用某個(gè)channel通過(guò)文件備份消息无蜂,可以配置類似log的Rotation周期。

通過(guò)nsq_to_nsq 把一個(gè)nsq群集的消息同步轉(zhuǎn)發(fā)到另一個(gè)nsq群集中蒙谓,實(shí)現(xiàn)擴(kuò)展斥季。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子酣倾,更是在濱河造成了極大的恐慌舵揭,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躁锡,死亡現(xiàn)場(chǎng)離奇詭異午绳,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)映之,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門拦焚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人杠输,你說(shuō)我怎么就攤上這事赎败。” “怎么了蠢甲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵僵刮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我峡钓,道長(zhǎng)妓笙,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任能岩,我火速辦了婚禮寞宫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拉鹃。我一直安慰自己辈赋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布膏燕。 她就那樣靜靜地躺著钥屈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坝辫。 梳的紋絲不亂的頭發(fā)上篷就,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音近忙,去河邊找鬼竭业。 笑死,一個(gè)胖子當(dāng)著我的面吹牛及舍,可吹牛的內(nèi)容都是我干的未辆。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锯玛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼咐柜!你這毒婦竟也來(lái)了兼蜈?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拙友,失蹤者是張志新(化名)和其女友劉穎为狸,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體遗契,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钥平,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姊途。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡知态,死狀恐怖捷兰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情负敏,我是刑警寧澤贡茅,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站其做,受9級(jí)特大地震影響顶考,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妖泄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一驹沿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蹈胡,春花似錦渊季、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至荷并,卻和暖如春合砂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背源织。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工翩伪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雀鹃。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓幻工,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親黎茎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子囊颅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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

  • 1. 概述 NSQ 是一個(gè)基于Go語(yǔ)言的分布式實(shí)時(shí)消息平臺(tái),它基于MIT開(kāi)源協(xié)議發(fā)布,由bitly公司開(kāi)源出來(lái)的一...
    楚江云閱讀 6,679評(píng)論 0 10
  • NSQ是一個(gè)實(shí)時(shí)的分布式消息平臺(tái)踢代。它的設(shè)計(jì)目標(biāo)是為在多臺(tái)計(jì)算機(jī)上運(yùn)行的松散服務(wù)提供一個(gè)現(xiàn)代化的基礎(chǔ)設(shè)施骨架盲憎。 NS...
    零一間閱讀 2,434評(píng)論 0 1
  • NSQ是一個(gè)實(shí)時(shí)的分布式消息平臺(tái)。它的設(shè)計(jì)目標(biāo)是為在多臺(tái)計(jì)算機(jī)上運(yùn)行的松散服務(wù)提供一個(gè)現(xiàn)代化的基礎(chǔ)設(shè)施骨架胳挎。 NS...
    零一間閱讀 2,195評(píng)論 0 2
  • 1.安裝 根據(jù)官方安裝指引頁(yè)面下載最新穩(wěn)定版的二進(jìn)制包https://nsq.io/deployment/inst...
    渺小Y閱讀 7,010評(píng)論 1 4
  • 使用場(chǎng)景 我這兒用一個(gè)實(shí)例來(lái)說(shuō)明nsq的使用饼疙,假設(shè)我有一個(gè)apiServer的程序,它負(fù)責(zé)面向用戶慕爬。有一個(gè)data...
    我的飯卡呢閱讀 7,485評(píng)論 0 3