一、消息隊列使用場景
1.1 常見的使用場景
系統解耦
在分布式環境下,系統間的相互依賴,最終會會導致整個依賴關系混亂,特別在微服務環境下,會出現相互依賴,甚至是循環依賴的情況,對后期系統的拆分和優化都帶來極大負擔。那么我們就可以用MQ來進行處理。上游系統將數據投遞到MQ,下游系統取MQ的數據進行消費,投遞和消費可以用同步的方式處理,因為MQ接收數據的性能是非常高的,不會影響上游系統的性能。
異步處理
如果采用同步的方式,系統的性能(并發量,吞吐量,響應時間)會有瓶頸。如何解決這個問題呢?引入消息隊列,將不必要的業務邏輯異步處理。
異步處理也可以引來 并行處理的使用姿勢。在工作中,我們基于消息開發了一個簡單的分布式任務處理組件。該組件簡單分為三塊分別是 切分、加載、執行三個階段
每個階段都是以作為消費者,然后處理完畢后再作為生產者發送消息。消息消費無狀態,可以按需無限拓容。
流量削峰
由于使用消息,我們的鏈路變成了生產者發送消息,消息中間件存儲消息,最后消費者從消息中間件拉取消息的一個過程。而消息中間件的存儲能力能夠有效的幫助消費者進行緩沖。試想下,正常流量下消費者能夠愉快的進行消費,瞬時高峰流量來的時候,消費者消費能力跟不上,剛好阻塞在消息中間件,等峰值過后,消費者又能很快的將阻塞的消息進行消費。
流量削鋒也是消息隊列中的常用場景,一般在秒殺或團搶活動中使用廣泛!
數據分發
大部分開源的MQ中間件基本都支持一對多或者廣播的模式,而且都可以根據規則選擇分發的對象。這樣上游的一份數據,眾多下游系統中,可以根據規則選擇是否接收這些數據,這樣擴展性就很強了。
1.2 消息使用的先決條件
以上四種是MQ中間件最常見的場景,但是我們細想,MQ中間件的引入會帶來什么問題呢?那就是實時性。所以MQ中間件使用的先決條件是:能容忍延遲,只要求最終一致性較為合適。
二、消息相關的概念
MQ特點
先進先出
不能先進先出,都不能說是隊列了。消息隊列的順序在入隊的時候就基本已經確定了,一般是不需人工干預的。而且,最重要的是,數據是只有一條數據在使用中。 這也是MQ在諸多場景被使用的原因。
發布訂閱
發布訂閱是一種很高效的處理方式,如果不發生阻塞,基本可以當做是同步操作。這種處理方式能非常有效的提升服務器利用率,這樣的應用場景非常廣泛。
持久化
持久化確保MQ的使用不只是一個部分場景的輔助工具,而是讓MQ能像數據庫一樣存儲核心的數據。
分布式
在現在大流量、大數據的使用場景下,只支持單體應用的服務器軟件基本是無法使用的,支持分布式的部署,才能被廣泛使用。而且,MQ的定位就是一個高性能的中間件。
在JMS標準中,有兩種消息模型P2P(Point toPoint)和Publish/Sub(Pub/Sub)。
P2P
點對點,一個發,一個消費。涉及到的角色 發布者(Publisher)、消費者(Consumer)、消息隊列(Queue)
特點
一個消息只能被一個消費者消費,消費后會從隊列里移除
發布者和消費者無關系,發布者發送消息的行為不會隨消費者而改變
消費者消費完成消息,需要向隊列Ack,消息隊列發現消息消費成功即做消息移除
Pub/Sub
發布訂閱模式,一個發布,多方訂閱。涉及到的角色有 發布者(Publisher)、主題(Topic)、訂閱者(Subscriber)。
特點
每個消息可以有多個消費者
針對某個主題(Topic)的訂閱者,必須創建一個訂閱者之后,才能消費發布者的消息
為了消費消息,訂閱者必須保持運行的狀態
三、常見問題及解決方案
消息阻塞
1、消息阻塞一般都是流量激增,超過消費者消費能力;
2、或者消費者出現邏輯問題,導致不斷的重試或長時間等待。
第一種可以通過擴容解決
第二種只能緊急修復問題,發布上線,在阻塞的過程中會造成大量的消息積壓,這種情況也可以考慮臨時擴容
重復消費
重復消費一般發生下消費端,比如消費者處理完畢,在準備進行ack的時候出現了問題,應用重啟后,消息中間件以為該消息還未處理又推給了消費者,或者消費者拉取的時候重復。
一般的做法是消費端做冪等。
消息丟失
消息丟失一般分為生產者發送失敗、消息中間件丟失、消費丟失。
生產者丟失:可能以為網絡問題或者消息中間處理失敗導致,消息遺漏。
消息中間的丟失:一般中間件可以設置丟棄策略,大部分MQ中間件產品可以保證數據不丟失,這種情況基本不用考慮。
消費丟失:有的消息中間件支持自動ack,當消費者消費到消息,消息中間件也不管是否消費成功自動ack。這時候一般選擇消費者主動ack比較合適。
消息順序性
消息順序性一般通過MQ中間件保證,大部分MQ中間件只能做到局部有序,比如Kafka,只能保證單個partition隊列有序。有些也會做到全局有序,但是成本比較高。筆者目前服務的公司現在是支持全局有序的。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
(資料圖片僅供參考)最近小編看到大家都在討論管寧華歆是個什么樣的人相關的事情,對此呢小編也是非常的感應興趣,那么這件事究竟是怎么發生的呢?具體又是怎么回事呢?下面就是小編搜索到的關于管寧華歆是個什么樣的人事件的相關信息,我們一起來看一下吧!1、管寧的特點——淡泊名利,性淡氣清,愛憎分明。管寧,字幼安。北??ぶ焯摽h人。與華歆、邴原并稱為"一龍"。漢末天下大亂時,與邴原及王烈等人至遼東避亂。在當地只談...
什么是股市的靜默期?1、股市的靜默期是指公司上市前的靜默期,是從公司跟承銷商達成協議開始,一直到招股說明書做完后,再加25天。2、企業第一次向公眾發行股票被稱為IP0 ( Initial Public Offering) 。IP0的過程對每一個公司來說都應謹小慎微,甚至如履薄冰,每一個細節都可能會給公司的IPO進程造成致命影響。3、例如Google創始人在.上市緘默期曾接受了《花花公子》的采訪,就...
小盤績優股主要指業績優秀、業績相對穩定的公司的股票。經過長時間的努力,這些公司具有較強的綜合競爭力和核心競爭力,在行業內具有較高的市場占有率,從而形成了經營規模優勢,利潤穩步增長,市場知名度高,流通盤不超過1億股。小盤績優股票有哪些?小盤績優股票有:九安醫療、三變科技、順威股份、深南電A、高新發展、國機精工、芭田股份、信雅達、美爾雅、百大集團等。如何投資小盤績優股?小盤績優股的選擇方法如下:1)謹...