apache dubbo 源碼分析系列彙總

Dubbo(讀音[ˈdʌbəʊ])是阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫集成。後面捐獻給了知名的開源社區 apache。

Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動註冊和發現。

1、dubbo 架構

以下是 dubbo 官網的架構圖:
在這裏插入圖片描述

1.1 節點角色說明

節點 角色說明
Provider 暴露服務的服務提供方
Consumer 調用遠程服務的服務消費方
Registry 服務註冊與發現的註冊中心
Monitor 統計服務的調用次數和調用時間的監控中心
Container 服務運行容器

調用關係說明:

  • 服務容器負責啓動,加載,運行服務提供者。
  • 服務提供者在啓動時,向註冊中心註冊自己提供的服務。
  • 服務消費者在啓動時,向註冊中心訂閱自己所需的服務。
  • 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者。
  • 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。
  • 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

1.2 連通性

  • 註冊中心負責服務地址的註冊與查找,相當於目錄服務,服務提供者和消費者只在啓動時與註冊中心交互,註冊中心不轉發請求,壓力較小
  • 監控中心負責統計各服務調用次數,調用時間等,統計先在內存彙總後每分鐘一次發送到監控中心服務器,並以報表展示
  • 服務提供者向註冊中心註冊其提供的服務,並彙報調用時間到監控中心,此時間不包含網絡開銷
  • 服務消費者向註冊中心獲取服務提供者地址列表,並根據負載算法直接調用提供者,同時彙報調用時間到監控中心,此時間包含網絡開銷
  • 註冊中心,服務提供者,服務消費者三者之間均爲長連接,監控中心除外
  • 註冊中心通過長連接感知服務提供者的存在,服務提供者宕機,註冊中心將立即推送事件通知消費者
  • 註冊中心和監控中心全部宕機,不影響已運行的提供者和消費者,消費者在本地緩存了提供者列表
  • 註冊中心和監控中心都是可選的,服務消費者可以直連服務提供者

1.3 健壯性

  • 監控中心宕掉不影響使用,只是丟失部分採樣數據
  • 數據庫宕掉後,註冊中心仍能通過緩存提供服務列表查詢,但不能註冊新服務
  • 註冊中心對等集羣,任意一臺宕掉後,將自動切換到另一臺
  • 註冊中心全部宕掉後,服務提供者和服務消費者仍能通過本地緩存通訊
  • 服務提供者無狀態,任意一臺宕掉後,不影響使用
  • 服務提供者全部宕掉後,服務消費者應用將無法使用,並無限次重連等待服務提供者恢復

1.4 伸縮性

註冊中心爲對等集羣,可動態增加機器部署實例,所有客戶端將自動發現新的註冊中心
服務提供者無狀態,可動態增加機器部署實例,註冊中心將推送新的服務提供者信息給消費者

2、爲什麼學習 dubbo 源碼

dubbo 做爲經過廣大的互聯網企業選擇的生產級 rpc 框架,它肯定有它的獨到之處。我們學習它的源碼有以下幾點好處:

2.1 提升SOA的微服務架構設計能力

通過讀dubbo源碼是一條非常不錯的通往SOA架構設計之路,畢竟SOA的服務治理就是 dubbo 首先提出來的,比起你去看市面上的SOA微服務架構的書籍,學到的架構原理要更豐富更有深度。

2.2 提升自己在部門團隊的技術影響力

你所在的部門團隊如果使用了dubbo框架,必然需要懂dubbo底層核心的人;如果你把dubbo源碼的架構原理掌握好,一般出現dubbo的疑難雜症,只要你參與探討和解決,你自然是這個團隊的核心程序員或是重要的程序員。

2.3 提交自己代碼的質量

apache dubbo 做爲一款優秀的開源框架,裏面有很多設計思路是值得我們借鑑的。比如在第一個章節裏面提到的。高可用性,當註冊中心掉掛還能正常的提供服務、高健壯性以及高伸縮。在服務調用方與服務提供方添加了註冊中心這個概念,可以做到服務的自動上下線。還有它的服務治理功能等待。

3、dubbo 源碼分析彙總

3.1 Dubbo 內核解剖

dubbo源碼分析1 之 架構原理探索
dubbo源碼分析2 之 內核SPI實現
dubbo源碼分析3 之 動態編譯
dubbo源碼分析4 之 與Spring 集成
dubbo源碼分析5 之 SPI分析

3.2 Dubbo 服務發佈原理解剖

dubbo源碼分析6 之 服務暴露概述
dubbo源碼分析7 之 服務本地暴露
dubbo源碼分析8 之 服務遠程暴露(上)
dubbo源碼分析9 之 服務遠程暴露(中)
dubbo源碼分析10 之 服務遠程暴露(下)

3.3 Dubbo 服務引用原理解剖

dubbo源碼分析11 之 服務引用
dubbo源碼分析12 之 Listener & Filter

3.4 Dubbo 集羣容錯的設計解剖

dubbo源碼分析13 之 集羣容錯 Invoke
dubbo源碼分析14 – 集羣容錯之Directory
dubbo源碼分析15 – 集羣容錯之Route
dubbo源碼分析16 – 集羣容錯之LoadBalance
dubbo源碼分析17 – 集羣容錯總結

3.5 Dubbo 服務治理設計解剖

dubbo源碼分析18 – 服務監控
dubbo源碼分析19 – 服務治理

3.6 Dubbo 網絡通信架構解剖

dubbo源碼分析20 – 遠程調用概述
dubbo源碼分析21 – 遠程通信 netty
dubbo源碼分析22 – consumer 發送與接收原理
dubbo源碼分析23 – provider 接收與發送原理
dubbo源碼分析24 – 調用核心 Invoke

3.7 Dubbo 網絡通信編解碼解剖

dubbo源碼分析25 – 序列化與反序列化
dubbo源碼分析26 – 網絡編解碼

參考文章:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章