這是個人第 64 篇原創文章
mysql
做者 | 悟空聊架構web
來源 | 悟空聊架構(ID:PassJava666)sql
本篇的靈感來自我超級喜歡的一篇文章:《若是把中國 442 位皇帝都放在一個羣裏面,他們會聊些什麼》。
數據庫
其實個人第一篇文章就是用這種方式寫的《悟空聊無事務》,這也是個人公衆號名字的來源,叫作:「悟空聊架構」 。編程
本篇也會以 「羣聊、單聊、朋友圈」 的方式來說解計算機世界中消息隊列
的一些奇聞趣事。windows
從事軟件開發的同窗,必定都聽過或用過消息隊列,好比 RabbitMQ,Kafka。消息隊列簡單來講就是生產者將不少消息放到一個隊列結構中,由其餘消費者來消費。想了解更多隊列
的知識,看下我以前寫的 18 個 Queue 的文章,保證整的明明白白。傳送門:45張圖庖丁解牛18種Queue。
微信
那若是把常見的四大消息隊列拉到一個羣裏,會碰出哪些火花呢?架構
被嫌棄
四大隊列被中間件大隊長
拉到了一個羣裏面。併發
羣名:悟空聊架構羣。異步
成員數:25 個。
管理員:中間件大隊長。
羣主:神祕悟空哥。
你們來感覺下他們的聊天界面吧~
👇👇👇
![](http://static.javashuo.com/static/loading.gif)
RabbitMQ 單獨找中間件大隊長聊天的畫面。
![](http://static.javashuo.com/static/loading.gif)
涉及的故事:
-
Erlang 是啥? -
並不是一門新語言,出現於 1987 年。並非面嚮對象語言。 -
函數式編程,基於進程併發,高併發、分佈式是它的優點。 -
由愛立信製造商專門爲通訊應用設計,在國內主要是遊戲領域用到。 -
Erlang 爲啥會被其餘隊列嫌棄? -
由於 RocketMQ、ActiveMQ 都是用 Java 實現的,Kafka 是用 Scale 和 Java 實現的,這三種消息隊列從語言實現上都有些相似。 -
在國內現現在超流行的 Java 的技術生態中,懂 Java 又懂 Erlang 的就比較少了,願意花時間和精力在 Erlang 上面的就更少了。
快和慢
![](http://static.javashuo.com/static/loading.gif)
涉及的故事:
-
他們討論的低延遲是啥? -
就是說這個消息隊列的響應速度是很是快的,好比插入一條消息,能夠很快的返回插入結果。能夠理解爲反射弧比較短。而RabbitMQ 的低延遲達到微秒級,而另外三個隊列都是毫秒級。 -
他們討論的吞吐量是啥? -
吞吐量:系統在單位時間內處理請求的數量。 -
RocketMQ 自稱火箭,確定是有他的道理的,由於他的處理請求的速度快呀!吞吐量能夠達到 10 萬級,而另外三個隊列都是萬級。
無界面 vs 社區別涼
![](http://static.javashuo.com/static/loading.gif)
他們聊的操做界面又是啥?
-
RabbitMQ、ActiveMQ、Kafka 都是有界面來操做隊列或消息的,而 RocketMQ 就比較坑了, 只提供了命令行工具,這對於長期使用 windows 的用戶確實很難受呀。
他們說的阿里出品又是啥?
-
RocketMQ 由大廠阿里出品,已捐給 Apache 開源社區,活躍度不算高,會不會沒人修 bug 了? -
RabbitMQ 有活躍的開源社區,總能找到修 bug 的,你願意用哪一個?大廠推薦用 RocketMQ,能夠本身折騰,小一點的仍是用 RabbitMQ 吧,節省解決問題的成本。
mysql 的朋友圈
![](http://static.javashuo.com/static/loading.gif)
點開圖片後查看大圖,mysql 不會飛
的朋友圈以下:
![](http://static.javashuo.com/static/loading.gif)
中間件大隊長
邀請 mysql 不會飛
進入了羣聊。
![](http://static.javashuo.com/static/loading.gif)
涉及的故事:
消息隊列經常使用在解耦、削峯、異步場景中。先對這幾個點來個大白話掃盲:
-
悟空大白話削峯:關鍵詞:「別都丟給我!」 好比雙十一期間超多用戶下單,假如 10萬個請求都到數據庫了,數據庫一會兒是扛不住這麼多請求的,那麼消息隊列來解圍,把請求丟到消息隊列,訂單服務從消息隊列拿消息處理訂單請求,起到了一個緩衝的做用,這樣對數據庫的壓力就小多了。
-
悟空大白話解耦:關鍵詞:「誰用誰拿」 。A 系統須要將數據傳給 B、C、D、E 系統,A 系統時刻須要考慮 B、C、D、E 四個系統若是宕機了怎麼辦?要不要重發,要不要消息持久化存起來?A 系統要考慮的問題太多了,可把 A 系統累壞了。這就是一種高耦合的現象,BCDE 四個系統強依賴 A 系統。那怎麼解耦?A 系統將數據丟到消息隊列,BCDE 系統本身想要數據的時候就去消息隊列裏面拿。
-
悟空大白話異步:關鍵詞:「先去忙你的吧~」 。好比下一筆訂單,從訂單支付到訂單成功,這個閉環可能很長,好比要發送訂單成功消息、贈送優惠券等等操做,用戶等待的時間可能好久,用戶體驗就很差了,那怎麼解決呢?能夠將下單成功的消息丟到隊列裏面,快速返回訂單成功,而後告知用戶,消息觸達系統再從隊列裏面拿到訂單數據,依次給用戶發送訂單消息和優惠券就好了,這個就是異步。
消息隊列的尷尬
![](http://static.javashuo.com/static/loading.gif)
四大消息隊列都默默地去看這篇文章去了,據說這篇文章被大佬們轉載了 19 次。傳送門:這三年被分佈式坑慘了,曝光十大坑
彩蛋
下面的彩蛋小夥伴發現沒?
mysql不會飛
用到了周杰倫的歌曲:《超人不會飛》
Nigix陽光男孩
用到了周杰倫的歌曲:《陽光男孩》
拍一拍得到了棒棒糖
,來自於讀者我是一顆糖波波
的微信暱稱。
該架構聊天羣成員數已經 26 個啦,成員有消息隊列、各大數據庫、分佈式中間件,想進羣來看一看他們的聊天嗎?「在羣裏不說話都能進步哦~」 加我微信 PassJava
或掃碼加我,備註[加羣]
我的二維碼
寫在最後
你猜我用了幾個手機來作聊天截圖?
本文分享自微信公衆號 - 悟空聊架構(PassJava666)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。