源碼閱讀技巧篇:RocketMQ DLedger 多副本即主從切換專欄回顧

RocketMQ DLedger 多副本即主從切換專欄總共包含9篇文章,時間跨度大概爲2個月的時間,筆者以爲授人以魚不如授人以漁,藉以這個系列來展現該系列的創做始末,展現筆者閱讀源碼的技巧。服務器

首先在下決心研讀 RocketMQ DLedger 多副本(主從切換)的源碼以前,首先仍是要經過官方的分享、百度等途徑對該功能進行一些基本的瞭解。源碼分析

咱們瞭解到 RocketMQ 在 4.5.0 以前提供了主從同步功能,即當主節點宕機後,消費端能夠繼續從從節點上消費消息,但沒法繼續向該複製組發送消息。RocketMQ 4.5.0版本引入了多副本機制,即 DLedger,支持主從切換,即當一個複製組內的主節點宕機後,會在該複製組內觸發從新選主,選主完成後便可繼續提供消息寫功能。同時還了解到 rocketmq 主從切換是基於 raft 協議的。post

raft 協議是何許人也,我猜測大部分讀者對這個名詞並不陌生,但像筆者同樣只是聽過其大致做用但並未詳細學習的應該也不在少數,故我以爲看 RocketMQ DLedger 多副本即主從切換以前應該重點了解 raft 協議。單元測試

一、RocketMQ 多副本前置篇:初探raft協議學習

本文主要根據 raft 官方提供的動畫來學習瞭解 raft 協議,從本文基本得知了 raft 協議主要包含兩個重要部分:選主 以及 日誌複製。在瞭解了 raft 協議的選主、日誌複製的基本實現後,而後就能夠步入到 RocketMQ DLedger 多副本即主從切換的源碼研究了,以探究大神是如何實現 raft 協議的。同時在瞭解到了 raft 協議的選主部份內容後,本身也能夠簡單的思考,若是本身去實現 raft 協議,應該要實現哪些關鍵點,當時個人思考以下: 測試

在這裏插入圖片描述
這樣在看源碼時更加有針對性,不至於在閱讀源碼過程當中「迷失」。

二、源碼分析 RocketMQ DLedger 多副本之 Leader 選主動畫

本文按照上一篇的思路,重點對 DLedgerLeaderElector 的實現進行了詳細分析,特別是其內部的狀態機流轉,最後也給出一張流程圖對選主過程進行一個簡單的梳理與總結。.net

舒適提示:若是在閱讀源碼的過程當中一時沒法理解,能夠容許其提供的單元測試,DEBUG一下,能夠起到撥雲見霧之效。debug

三、源碼分析 RocketMQ DLedger 多副本存儲實現設計

在學習完 DLedger 選主實現後,接下來將重點突破 raft 協議的另一個部分:日誌複製。由於日誌複製將涉及到存儲,故在學習日誌複製以前,先來看一下 DLedger 與存儲相關的設計,例如 DLedger 日誌條目的存儲協議、日誌在服務器的組織等關係,這部分類比 RocketMQ commitlog 等的存儲。

四、源碼分析 RocketMQ DLedger(多副本) 之日誌追加流程

在學習完DLedger 多副本即主從切換 日誌存儲後,咱們將正式進入到日誌複製部分,從上圖咱們能夠簡單瞭解,日誌複製其實包含兩個比較大的階段,第一階段是指主節點(Leader)接受客戶端請求後,將數據先存儲到主服務器中,而後再將數據轉發到它的全部從節點。故本篇文章中的關注第一階段:日誌追加。

五、源碼分析 RocketMQ DLedger(多副本) 之日誌複製(傳播) 本文繼續關注日誌複製的第二個階段,包含主節點日誌轉發、從節點接收日誌、主節點對日誌轉發進行仲裁,即須要實現只有超過集羣半數節點都存儲成功才認爲該消息已成功提交,纔會對客戶端承偌消息發送成功。

六、基於 raft 協議的 RocketMQ DLedger 多副本日誌複製設計原理

源碼解讀 raft 協議的日誌複製部分畢竟比較枯燥,故本文梳理了3張流程圖,並對日誌的實現要點作一個總結,以此來介紹 rocketmq Dledger 多副本即主從切換部分的 raft 協議的解讀。

七、RocketMQ 整合 DLedger(多副本)即主從切換實現平滑升級的設計技巧

前面6篇文章都聚焦在 raft 協議的選主與日誌複製。從本節開始將介紹 rocketmq 主從切換的實現細節,基於 raft 協議已經能夠實現主節點的選主與日誌複製,主從切換的另一個核心就是主從切換後元數據的同步,例如topic、消費組訂閱信息、消息消費進度等。另外主從切換是rocketmq 4.5.0 版本才引入的,若是從老版本升級到 4.5.0,直接兼容原先的消息是重中之中,故本文將詳細剖析其設計要點。

八、源碼分析 RocketMQ DLedger 多副本即主從切換實現原理

從設計上理解了平滑升級的技巧,本篇就從源碼角度剖析主從切換的實現要點,即重點關注元數據的同步(特別是消息消費進度的同步)。

九、RocketMQ DLedger 多副本即主從切換實戰

通過前面8篇文章的鋪墊,我相信你們對 DLedger 的實現原理有了一個全新的認識,本篇做爲該系列的收官之做,介紹如何從主從同步集羣平滑升級到DLedger,即主從切換版本,並對功能進行驗證。

總體總結一下就是首先從總體上認識其核心要點,而後逐步展開,逐步分解造成一篇一篇的文章,在遇到看不懂的時候,能夠 debug 官方提供的單元測試用例。

若是本文對你們有所幫助的話,麻煩幫忙點個贊,謝謝。

舒適提示:本專欄是《RocketMQ技術內幕》做者傾力打造的又一個精彩系列,也是《RocketMQ技術內幕》第二版的原始素材。


做者簡介:《RocketMQ技術內幕》做者,RocketMQ 社區佈道師,維護公衆號:中間件興趣圈,可掃描以下二維碼與做者進行互動。

在這裏插入圖片描述
相關文章
相關標籤/搜索