高性能消息中間件 nsq 解析-介紹

      網友投稿 911 2022-05-29

      隨著互聯網技術在各行各業的應用高速普及與發展,各層應用之間調用關系越來越復雜,架構、開發、運維成本越來越高,高內聚、低耦合、可擴展、高可用已成為了行業需求。

      一提到消息隊列 MQ(Message Queue),我們會想到很多應用場景,比如消息通知、用戶積分增減、抽獎中獎等,可以看出來 MQ 的作用有:流程異步化、代碼解耦合、流量削峰、高可用、高吞吐量、廣播分發,達到數據的最終一致性,滿足具體的業務場景需求。

      Nsq 是用 Go 語言開發的輕量級的分布式消息隊列,適合小型項目使用、用來學習消息隊列實現原理,對于學習 Go channel的原理和用法,以及如何用 Go 語言來寫分布式是一個很不錯的入門項目。

      Nsq 模塊介紹

      NSQ 最初是由 bitly 公司開源出來的一款簡單易用的分布式消息中間件,它可用于大規模系統中的實時消息服務,并且每天能夠處理數億級別的消息。

      NSQ 具有如下特性:

      分布式: 它提供了分布式的、去中心化且沒有單點故障的拓撲結構,穩定的消息傳輸發布保障,能夠具有高容錯和高可用特性。

      易于擴展: 它支持水平擴展,沒有中心化的消息代理( Broker ),內置的發現服務讓集群中增加節點非常容易。

      運維方便: 它非常容易配置和部署,靈活性高。

      高度集成: 現在已經有官方的 Golang、Python 和 JavaScript 客戶端,社區也有了其他各個語言的客戶端庫方便接入,自定義客戶端也非常容易。

      首先看下 NSQ 的項目結構:

      核心包為:nsqd、nsqadmin 和 nsqlookupd。apps 包中存放了各個入口方法。

      nsqd: nsqd 是一個守護進程,負責接收(生產者 producer )、排隊(最小堆實現)、投遞(消費者 consumer )消息給客戶端。它可以獨立運行,不過通常它是由 nsqlookupd 實例所在集群配置的。

      nsqlookupd: nsqlookupd 是守護進程負責管理拓撲信息。客戶端通過查詢 nsqlookupd 來發現指定話題( topic )的生產者,并且 nsqd 節點廣播話題(topic)和通道( channel )信息。有兩個接口: TCP 接口, nsqd 用它來廣播。 HTTP 接口,客戶端用它來發現和管理。

      高性能消息中間件 nsq 解析-介紹

      nsqadmin: nsqadmin 是一套 WEB UI,用來匯集集群的實時統計,并執行不同的管理任務。

      除此之外,圖中還涉及到一些基本的概念:

      Topic:一個 topic 就是程序發布消息的一個邏輯鍵,當程序第一次發布消息時就會創建 topic。

      Channels: channel 與消費者相關,是消費者之間的負載均衡, channel 在某種意義上來說是一個“隊列”。每當一個發布者發送一條消息到一個 topic,消息會被復制到所有消費者連接的 channel 上,消費者通過這個特殊的 channel 讀取消息,實際上,在消費者第一次訂閱時就會創建 channel。 Channel 會將消息進行排列,如果沒有消費者讀取消息,消息首先會在內存中排隊,當量太大時就會被保存到磁盤中。

      Messages:消息構成了我們數據流的中堅力量,消費者可以選擇結束消息,表明它們正在被正常處理,或者重新將他們排隊待到后面再進行處理。每個消息包含傳遞嘗試的次數,當消息傳遞超過一定的閥值次數時,我們應該放棄這些消息,或者作為額外消息進行處理。

      常用工具類:

      nsq_to _file:消費指定的話題(topic)/通道(channel),并寫到文件中,有選擇的滾動和/或壓縮文件。

      nsq_to _http:消費指定的話題(topic)/通道(channel)和執行 HTTP requests (GET/POST) 到指定的端點。

      nsq_to _nsq:消費者指定的話題/通道和重發布消息到目的地 nsqd 通過 TCP。

      小結

      本文主要介紹 nsq 的模塊、特性及其組成部分。nsq 專門為分布式、集群化而生,在處理 SPOF(single point of failure, 單點故障)、高可用、最終一致性方面很有優勢。

      Serverless 架構就不要服務器了?

      微服務架構中使用 ELK 進行日志采集以及統一處理

      沒有 try-catch,該如何處理 Go 錯誤異常?

      Go 分布式 架構設計

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:華為云發布國內首家AI模型市場,加速企業AI應用落地
      下一篇:使用ModelArts中開發工具學習Python(沙箱實驗記錄)
      相關文章
      亚洲av无码一区二区三区人妖| 亚洲综合av一区二区三区不卡| 亚洲成在人线在线播放无码| 亚洲专区中文字幕| 亚洲视频在线免费播放| 亚洲国语精品自产拍在线观看| 国产成人亚洲精品狼色在线| 国产亚洲人成A在线V网站| 亚洲色偷偷综合亚洲AV伊人| 国产亚洲Av综合人人澡精品| 亚洲 国产 图片| 亚洲国产精品日韩| 久久精品夜色噜噜亚洲A∨| 色噜噜亚洲精品中文字幕| 日本亚洲国产一区二区三区| 在线观看亚洲精品国产| 夜夜春亚洲嫩草影院| 处破女第一次亚洲18分钟| 国产精品亚洲а∨无码播放麻豆| 亚洲精品色播一区二区| 亚洲爆乳少妇无码激情| 天天综合亚洲色在线精品| 亚洲成a人片在线观看老师| 亚洲国产精品国产自在在线| 亚洲中文字幕丝袜制服一区| 亚洲日本va中文字幕久久| 亚洲av永久无码精品网站| 亚洲专区在线视频| 亚洲精品自产拍在线观看动漫| 亚洲网红精品大秀在线观看| 亚洲电影在线免费观看| 亚洲av片不卡无码久久| 亚洲日韩一区精品射精| 相泽南亚洲一区二区在线播放| 亚洲人成网站色在线入口| 国产亚洲一区二区手机在线观看| 亚洲va在线va天堂va四虎| 亚洲国产精品成人久久久| 亚洲欧美日韩久久精品| 亚洲精品国产精品乱码不卡| 亚洲精品无码久久久久|