若是把四個消息隊列都拉到一個羣裏,他們會聊些什麼?

這是個人第 64 篇原創文章
mysql

做者 | 悟空聊架構web

來源 | 悟空聊架構(ID:PassJava666)sql

轉載請聯繫受權(微信ID:PassJava)

本篇的靈感來自我超級喜歡的一篇文章:《若是把中國 442 位皇帝都放在一個羣裏面,他們會聊些什麼》。
數據庫

其實個人第一篇文章就是用這種方式寫的《悟空聊無事務》,這也是個人公衆號名字的來源,叫作:「悟空聊架構」編程

本篇也會以 「羣聊、單聊、朋友圈」 的方式來說解計算機世界中消息隊列的一些奇聞趣事。windows

從事軟件開發的同窗,必定都聽過或用過消息隊列,好比 RabbitMQ,Kafka。消息隊列簡單來講就是生產者將不少消息放到一個隊列結構中,由其餘消費者來消費。想了解更多隊列的知識,看下我以前寫的 18 個 Queue 的文章,保證整的明明白白。傳送門:45張圖庖丁解牛18種Queue微信

那若是把常見的四大消息隊列拉到一個羣裏,會碰出哪些火花呢?架構

被嫌棄

四大隊列被中間件大隊長拉到了一個羣裏面。併發

羣名:悟空聊架構羣。異步

成員數:25 個。

管理員:中間件大隊長。

羣主:神祕悟空哥。

你們來感覺下他們的聊天界面吧~

👇👇👇

羣聊畫面 1

RabbitMQ 單獨找中間件大隊長聊天的畫面。

單聊畫面 1

涉及的故事:

  • Erlang 是啥?
    • 並不是一門新語言,出現於 1987 年。並非面嚮對象語言。
    • 函數式編程,基於進程併發,高併發、分佈式是它的優點。
    • 由愛立信製造商專門爲通訊應用設計,在國內主要是遊戲領域用到。
  • Erlang 爲啥會被其餘隊列嫌棄?
    • 由於 RocketMQ、ActiveMQ 都是用 Java 實現的,Kafka 是用 Scale 和 Java 實現的,這三種消息隊列從語言實現上都有些相似。
    • 在國內現現在超流行的 Java 的技術生態中,懂 Java 又懂 Erlang 的就比較少了,願意花時間和精力在 Erlang 上面的就更少了。

快和慢

羣聊畫面 2

涉及的故事:

  • 他們討論的低延遲是啥?
    • 就是說這個消息隊列的響應速度是很是快的,好比插入一條消息,能夠很快的返回插入結果。能夠理解爲反射弧比較短。而RabbitMQ 的低延遲達到微秒級,而另外三個隊列都是毫秒級。
  • 他們討論的吞吐量是啥?
    • 吞吐量:系統在單位時間內處理請求的數量。
    • RocketMQ 自稱火箭,確定是有他的道理的,由於他的處理請求的速度快呀!吞吐量能夠達到 10 萬級,而另外三個隊列都是萬級。

無界面 vs 社區別涼

羣聊畫面 3

他們聊的操做界面又是啥?

  • RabbitMQ、ActiveMQ、Kafka 都是有界面來操做隊列或消息的,而 RocketMQ 就比較坑了, 只提供了命令行工具,這對於長期使用 windows 的用戶確實很難受呀。

他們說的阿里出品又是啥?

  • RocketMQ 由大廠阿里出品,已捐給 Apache 開源社區,活躍度不算高,會不會沒人修 bug 了?
  • RabbitMQ 有活躍的開源社區,總能找到修 bug 的,你願意用哪一個?大廠推薦用 RocketMQ,能夠本身折騰,小一點的仍是用 RabbitMQ 吧,節省解決問題的成本。

mysql 的朋友圈

羣聊畫面 4

點開圖片後查看大圖,mysql 不會飛 的朋友圈以下:

mysql 的朋友圈

中間件大隊長 邀請 mysql 不會飛進入了羣聊。

mysql 不會飛進入了羣聊

涉及的故事:

消息隊列經常使用在解耦、削峯、異步場景中。先對這幾個點來個大白話掃盲:

  • 悟空大白話削峯:關鍵詞:「別都丟給我!」  好比雙十一期間超多用戶下單,假如 10萬個請求都到數據庫了,數據庫一會兒是扛不住這麼多請求的,那麼消息隊列來解圍,把請求丟到消息隊列,訂單服務從消息隊列拿消息處理訂單請求,起到了一個緩衝的做用,這樣對數據庫的壓力就小多了。

  • 悟空大白話解耦:關鍵詞:「誰用誰拿」 。A 系統須要將數據傳給 B、C、D、E 系統,A 系統時刻須要考慮 B、C、D、E 四個系統若是宕機了怎麼辦?要不要重發,要不要消息持久化存起來?A 系統要考慮的問題太多了,可把 A 系統累壞了。這就是一種高耦合的現象,BCDE 四個系統強依賴 A 系統。那怎麼解耦?A 系統將數據丟到消息隊列,BCDE 系統本身想要數據的時候就去消息隊列裏面拿。

  • 悟空大白話異步:關鍵詞:「先去忙你的吧~」  。好比下一筆訂單,從訂單支付到訂單成功,這個閉環可能很長,好比要發送訂單成功消息、贈送優惠券等等操做,用戶等待的時間可能好久,用戶體驗就很差了,那怎麼解決呢?能夠將下單成功的消息丟到隊列裏面,快速返回訂單成功,而後告知用戶,消息觸達系統再從隊列裏面拿到訂單數據,依次給用戶發送訂單消息和優惠券就好了,這個就是異步。

消息隊列的尷尬

消息隊列的尷尬

四大消息隊列都默默地去看這篇文章去了,據說這篇文章被大佬們轉載了 19 次。傳送門:這三年被分佈式坑慘了,曝光十大坑

彩蛋

下面的彩蛋小夥伴發現沒?

mysql不會飛 用到了周杰倫的歌曲:《超人不會飛》

Nigix陽光男孩 用到了周杰倫的歌曲:《陽光男孩》

拍一拍得到了棒棒糖,來自於讀者我是一顆糖波波的微信暱稱。

該架構聊天羣成員數已經 26 個啦,成員有消息隊列、各大數據庫、分佈式中間件,想進羣來看一看他們的聊天嗎?「在羣裏不說話都能進步哦~」 加我微信 PassJava 或掃碼加我,備註[加羣]

我的二維碼

寫在最後

你猜我用了幾個手機來作聊天截圖?

本文分享自微信公衆號 - 悟空聊架構(PassJava666)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索