一、mq是什麼?
1、mq全稱為message queue 訊息佇列(mq),一種先進先出的資料結構,是一種應用程式對應用程式的通訊方法。mq是消費-生產者模型的乙個典型的代表,一端往訊息佇列中不斷寫入訊息,而另一端則可以讀取佇列中的訊息。訊息發布者只管把訊息發布到 mq 中而不用管誰來取,訊息使用者只管從 mq 中取訊息而不管是誰發布的。這樣發布者和使用者都不用知道對方的存在。
2、rocketmq作為一款分布式的訊息中介軟體,經歷了**雙十一的洗禮,在功能和效能上遠超activemq
3、你可以想想在生活中的一種場景:當你把信件投進郵筒,郵遞員肯定最終會將信件送給收件人。我們可以把mq比作 郵局和郵遞員。 mq和郵局的主要共同點是:它不處理訊息,但是,它會接受資料、儲存訊息資料、**訊息
二、mq有什麼特點。
主要圍繞三點:解耦、非同步、削峰。
1、解耦:
傳統模式的呼叫如下
系統的耦合度越高,容錯性越低。以電商為例,使用者建立訂單後,如果耦合呼叫庫存系統、物流系統、支付系統,任何乙個子系統出現故障或者公升級等原因暫時不可用,都會造成下單操作異常,影響使用者使用體驗。
使用訊息佇列解耦合,系統的容錯性就高了。比如物流系統發生故障,需要幾分鐘才能來修復,在這段時間內,物流系統要處理的資料被快取到訊息佇列中,使用者的下單操作正常完成。當物流系統恢復上線後,補充處理存在訊息佇列中的資料即可,終端系統感知不到物流系統發生過幾分鐘的故障。
2、非同步:
傳統呼叫模式:
在某場景下,a系統收到一條資料後需要在自己本地寫庫,同時還要在bcd三個系統寫庫,自己本地寫庫要 3ms,bcd 三個系統分別寫庫要 300ms、450ms、200ms。總共要延時3 + 300 + 450 + 200 = 953ms,接近 1s啊,對強迫症的人來說簡直要**!
使用mq之後:
如果使用 mq,那麼 a 系統連續傳送 3 條訊息到 mq 佇列中,假如耗時 5ms,a 系統從接受乙個請求到返回響應給使用者,總時長是 3 + 5 = 8ms,對於使用者而言,其實感覺上就是點個按鈕,8ms 以後就直接返回了,那就比原來傳統模式同步呼叫快了。
3、流量肖鋒:
a系統如果遇到請求流量瞬間猛增,有可能會將系統壓垮。有了訊息佇列可以將請求快取起來,分散到很長的一段時間處理,這樣可以大大提高系統的穩定性和使用者體驗。
一般情況下,為了保證系統的穩定性,如果系統負載超過閾值,就會阻止使用者請求,這會影響使用者體驗,而如果使用訊息佇列將使用者請求快取起來,等待系統處理完畢後通知使用者下單完畢,這樣比不能下單體驗要好。
三、mq的缺點。
1、系統可用性降低。
系統引入的外部依賴越多,越容易掛掉。本來你就是 a 系統呼叫 bcd 三個系統的介面就好了, abcd 四個系統好好的,沒啥問題。但是你偏偏要在系統a和bcd之間加個mq,好了,mq一掛,整套系統就蹦,a就調不到bcd了。
2、增加了系統的複雜度。
硬生生加個mq進來,怎麼保證訊息沒有重複消費?訊息丟失的情況?訊息的傳輸順序性?問題一大堆,都得一一的去處理。
HDFS的總結 通俗易懂
hdfs 上傳的資料經過切塊分布式儲存 並且每個塊都有多個備份 保證效能和可靠性 優點 支援超大檔案 檢測和快速應對硬體故障 流式資料訪問 簡化的一致性模型 高容錯性 可構建在廉價機器上 缺點 低延遲資料訪問 大量的小檔案 多使用者寫入檔案 修改檔案 不支援超強的事務 block 最基本的儲存單位。...
const用法總結(通俗易懂)
const的意思可以概括為 乙個不能被改變的普通變數 使得const在一定程度上提高程式的安全性和可靠性。const的幾種情況 int const size const int size 這兩條語句都是把size宣告為乙個整數,他的值不能被修改。可以在宣告的時候對他進行初始化,int const s...
通俗易懂講解迴圈佇列原理
迴圈佇列 環形佇列 顧名思義,為了能夠重複利用佇列,將佇列看作環形,迴圈使用,為什麼判斷隊滿的時候是 rear 1 maxsize呢?我們來簡單理解一下。1,隊空的時候 rear代表能寫入的位置,front代表能讀的位置 當rear front的時候隊列為空 想象當隊列為空的時候,能寫入是第乙個位置...