系統學習消息隊列分享(一) 怎樣系統學習消息隊列?

從系統之間有通訊需求開始呢,就產生了消息隊列,它也是最古老的中間件之一。它的應用場景很是普遍,分佈式系統中的不少進程間通訊問題,均可以用消息隊列來解決。能夠說消息隊列是全部後端程序員的必備技能。可是,想要系統、深刻地學習消息隊列,卻並不容易。html

要了解消息隊列的完整知識體系,想深度進階爲消息隊列達人,從理論到實踐,從基礎到進階,從深度到廣度,全方位吃透消息隊列。程序員

哪些人適合學消息隊列?

後端開發者:消息隊列幾乎是每一個後端程序員都會用到的中間件,不管你是開發微服務,實時計算,仍是機器學習程序,都須要解決進程間通訊的問題。面試

渴望技術提高的開發者:消息隊列所涉及的高性能通訊、海量數據存儲、高併發這些底層的技術比較全面,而且功能簡潔、結構清晰,容易入門但又同時具備足夠的深度,很是適合用來深刻分析和學習底層技術,幫助你實現從用「輪子」到造「輪子」的技術提高。算法

學習消息隊列,有哪些門檻?

至少熟練掌握一門編程語言,掌握全部程序員都須要具有的一些基礎技術知識和能力,例如:apache

  • 熟練使用各類經常使用集合,好比:數組、鏈表、字典等;
  • 掌握 Linux 系統的基礎知識,會使用經常使用的命令;
  • 具有多線程、併發控制編程能力;
  • 編寫過讀寫文件、經過網絡收發數據的程序;
  • 能看懂最基本的 UML 圖,包括類圖、時序圖等;
  • 瞭解最經常使用的幾種設計模式和算法。

如下內容是一些「加分項」,固然這些「加分項」你不必定非要具有,但會讓你的學習過程更加愜意。編程

1. 英文的閱讀能力後端

由於整個技術圈大部分的技術類資料、開源軟件的文檔、代碼的註釋和論文都是用英文撰寫的,若是你不知足於平時只看過期的二手資料,必定要努力提高本身,達到能獨立、快速看懂英文技術文檔的水平。設計模式

這對於技術人,其實並非很是難的事兒。大多數英文技術文檔涉及的專業詞彙不超過一百個,使用的語法和句式都比較簡單,理解起來絕對不會比中學英語考試題中的閱讀理解更難。因此,最重要的是不要對英語過於恐懼,而且不要怕麻煩,多讀多練習,平時多進行英文搜索,你會發現本身快速閱讀能力的提高。數組

2. 掌握 Java 語言和其生態系統網絡

大部分服務端的開源軟件,包括咱們這個課程涉及的 RocketMQ、Kafka、Pulsar 等,都是使用 Java 語言開發的。雖然 Java 自己有不少讓人詬病的地方,好比僵化的泛型系統,不肯定的 GC 機制等,也不斷有 Go、Scala 等這些新興語言來挑戰 Java 的江湖地位,可是 Java 強大的生態系統在短期內仍是難以替代的。因此,不管你如今使用的是什麼編程語言,學一點 Java 老是一個不錯的選擇。

3. 積極的學習態度

最後,也是最重要的一點是,對待寫代碼這件事兒的,你的真實態度是什麼?

你是否是會認真地思考每個細節是否已經作到最優?有沒有爲使用到的每一個集合,仔細考慮究竟是用數組,仍是鏈表,仍是其餘哪一種數據結構更合適?你有多少次迫於項目進度的壓力而交出「算了,雖然我知道這麼作很差,但也能湊合用」的代碼?你有沒有過爲本身的某個(哪怕是自認爲)絕妙設計,而成就感滿滿,幸福好幾天的時刻?你會不會由於溝通時別人提到了一個你不知道的技術名詞感到焦慮和羞愧,而後趕忙偷偷學習補齊這個技術短板?

針對這些問題,你能夠作一個自我評估,瞭解本身到底對技術有多熱愛?由於只有發自心裏的對技術的熱愛,纔是保證持續學習而且不斷提高本身的惟一動力。

由淺入深學習消息隊列

要想學好消息隊列,不該該僅僅停留在使用層面上,還須要深刻了解它的設計思路、實現原理和使用的底層技術。可是要注意按部就班,由淺入深地去學習。

第一步就是去了解消息的基本概念,好比主題、訂閱、分區等。這些基礎的概念,就像咱們學習一門編程語言中的基礎語法同樣,你只有搞清楚它們,才能進行後續的學習。而後,你須要去掌握使用消息隊列的技能,可以處理一些常見的問題。

有了這些基礎知識的儲備之後,你就能夠深刻到源碼中去,進而加深你對消息隊列的理解,提高你的技術深度了。這時候你要了解其中必備的底層技術,好比高性能的網絡傳輸、內存管理和鎖的使用;同時也要深刻學習消息隊列一些高級特性的實現原理,好比如何實現事務消息、消息隊列如何支撐海量 IoT 設備同時在線。

固然,學習消息隊列的知識,最後必定要付諸實踐,也就是落到代碼層面上去操做執行。你能夠選擇用消息隊列去實現你的業務系統,也可使用實現消息隊列的底層技術,去實現其餘的中間件系統。

一份知識圖譜

我整理了一張 「消息隊列生態全景圖」,涵蓋了消息隊列產品、標準和協議、應用場景、編程語言以及實現技術,但願能夠幫助你對整個消息隊列生態系統有宏觀的瞭解和認知。

 

咱們一塊兒來大概瀏覽一下圖中涉及的內容,首先咱們來看看消息隊列的產品、標準和協議,以及應用場景的部分。

目前,市面上有的消息隊列產品不少,像 Kafka、ActiveMQ、RocketMQ、Pulsar、RabbitMQ 等等,其中比較主流的開源消息隊列爲 Kafka、RocketMQ 和 RabbitMQ。固然你並不須要把每一個消息隊列都去學習一遍,由於這些消息隊列中不少的原理和知識都共通的。

在接下來的課程中,我會以這些開源消息隊列產品爲例子對具體的知識點進行講解,也會順便講解每一個產品它的特色。掌握了這些通用的原理,即便你之後碰到一款全新的、咱們沒有講過的消息隊列,你也能夠作到很快上手。

與消息隊列相關的協議和標準有 JMS、AMQP、MQTT 和 OpenMessaging。不過,目前爲止尚未哪一個標準或者協議能「一統江湖」,你作一個大概的瞭解便可,若是須要用到的時候再深刻學習也來得及。

消息隊列的應用範圍普遍,在一些典型且經常使用的消息隊列應用場景中,好比像處理日誌數據、監控、流計算等,你須要瞭解,對應不一樣場景,應該選用哪一個消息隊列產品?什麼樣的姿式纔是最佳的使用方式?在課程中,我會穿插着介紹一些最佳實踐,幫助你在遇到相似場景時少踩一些坑。

而後,咱們來看看這些開源消息隊列產品實現中,涉及的編程語言和技術要點。

消息隊列涉及到的語言有 Java、Scala 和 Erlang。實際上對於編程語言自己,你並不須要特別的關注,不管你最熟悉的語言是否是 Java 或者 Scala 都不要緊,鑑於語言的相通性,只要你有編程語言的基礎,即便是一門從未接觸過的語言,經過短期的學習達到能夠讀懂代碼的水平,通常來講都是不成問題的。

咱們學習的大部分知識點也不是和某種語言強相關的,你更多須要關注的是其中的設計思想、實現原理和實踐方法這些技術自己的東西。

對於實現消息隊列中涉及的重要的實現技術,像網絡通訊、序列化反序列化、分佈式事務、內存管理等,這部份內容是這門課程中的精粹,須要你重點學習。每個技術要點我都會在進階篇中對應一節課程來專題講解。這些基礎的技術要點不只僅能夠用於實現消息隊列,在其餘各類中間件的實現過程當中都會涉及,也是各類高級研發職位面試題中常常會被問到的內容。

學習資源推薦

消息隊列的最佳學習資料就是它們的官方文檔,由於官方文檔更加詳細準確,而且隨着版本迭代,不少第三方教程文檔會過期,而官方文檔總能保持與當前版本同步更新。如下是幾個開源消息隊列的官方文檔:

RocketMQ 官方文檔: https://rocketmq.apache.org/docs/quick-start/

RocketMQ 中國開發者中心:http://rocketmq.cloud/zh-cn/ (感謝專欄用戶 @0xFFFFFFFF 同窗推薦)

Kafka 官方文檔: http://kafka.apache.org/documentation/

RabbitMQ 官方文檔: https://www.rabbitmq.com/documentation.html

在使用消息隊列的過程當中,若是遇到問題,要善用搜索引擎,我推薦你首選 Google,次之是 Stack Overflow,相對而言,這些搜索引擎搜索到有價值信息的機率會更高一些。

Stack Overflow:https://stackoverflow.com/

相關文章
相關標籤/搜索