簡介
? ? ? dledger是openmessaging的一個組件, raft算法實現,用于分布式日志,本系列分析dledger如何實現raft概念,以及dledger在rocketmq的應用
本系列使用dledger v0.40
本文分析dledger的架構,核心組件;rpc組件
關鍵詞
Raft
Openmessaging
參考資料
In Search of an Understandable Consensus Algorithm ?raft論文簡版
技術架構
- 應用/client? client是dledger提供給應用訪問節點的組件
- rpc服務
rpc服務內置rpc client/rpc server,對外接收外部rpc訪問,包括client和節點間通訊;對內,解釋rpc請求,轉發給Server;對外,發送rpc請求到其他節點
- Server
主程序,負責節點啟動,其他組件的啟動;寫入日志請求初步處理等
- Elector
選舉類,負責集群主節點選舉
- EntryPusher
日志寫入器,內置分發器和處理器,分發器主節點用于復制日志到跟隨者;處理器跟隨者使用,寫入日志
- 存儲
存儲日志條木,有兩個實現,基于內存和基于文件
- 快照/狀態機
新版本的dledger提供狀態機,dledger成為通用的raft組件,不再是轉為rocketmq使用
啟動
本節分析節點啟動,下圖是典型的dledger啟動代碼
- 構建和初始Server,Server代表節點
- 注冊狀態機,若需要的話
- 注冊自定義的處理器,擴展rpc服務,若有的話
- Metrics組件初始化
- 啟動server
? ? ?Server啟動,負責啟動核心組件
? ? ?6. 優雅關機
rpc
本節介紹dledger的rpc模塊,dledger選主,日志寫入和復制通過來來回回的rpc完成,本節介紹dledger業務層面的rpc設計
節點間通訊
上圖節點間通訊模型
RaftProtocol/RaftProtocolHanlder? raft服務接口/處理器接口,raft服務接口定義外部,包括client和節點間訪問接口;處理器定義raft處理服務接口
ClientProtocol/ ClientProtocolHanlder 日志服務接口/處理器接口,日志服務接口定義外部,包括client和節點間訪問接口;處理器定義日志處理服務接口
RpcService 內置rpc client/rpc server, 對內使用NettyRemotingServer接收rpc請求,解釋rpc請求,轉發給Server;對外,使用NettyRemotingClient發送rpc請求到其他節點
Server ?handler的真正實現者
技術架構圖很直觀的展示rpc調用關系
客戶端通訊
Client組件是應用用于集成dledger,應用可使用client組件訪問集群
MetadataUpdate 定時更新leaderId,讓Client訪問領導者節點
DLedgerClientProtocol 定義了訪問集群的接口
擴展機制
Dledger提供rpc擴展機制,通過增加rpc處理器,DLedgerRpcService提供方法注冊用戶定義處理器