深度剖析Apache Dubbo核心技術內幕 | 運動資訊第一站 - 2024年11月
深度剖析Apache Dubbo核心技術內幕
Dubbo是阿里巴巴開發的一個開源的高性能、高可用、可擴展的分散式RPC調用框架,致力於提供高性能和透明化的RPC遠端調用服務解決方案。作為阿里巴巴SOA服務化治理方案的核心框架,目前已進入Apache孵化器專案。在單體應用時,不同業務模組部署在同一個JVM進程內,這時通過本地調用就可以解決不同業務模組之間的相互引用;但在多體應用時,不同業務模組大多部署到不同的機器上,這時一個高效、穩定的RPC框架就顯得特別重要了。ApacheDubbo作為阿里巴巴開源的分散式RPC框架,在進入Apache孵化器項目後現已畢業,相信在開源社區的不斷貢獻下,它會成為RPC框架中的佼佼者。
本書是對ApacheDubbo的使用以及內核原理的深度剖析,分為三部分:第一部分為基礎篇,首先從整體上講解使用Dubbo搭建的系統由哪些模組組成,各模組相互之間的調用關係是怎麼樣的,然後基於本書的Demo講解如何使用Dubbo;第二部分為高級篇,主要講解Dubbo框架內部實現原理,包含支撐Dubbo框架的適配器類原理、動態編譯原理、增強SPI原理、消費端的泛化調用實現原理、消費端非同步調用與服務提供端的非同步執行、Dubbo框架的執行緒模型、消費端負載均衡策略、消費端集群容錯策略、併發控制原理、Dubbo網路通訊協定等;第三部分為實踐篇,主要探討如何使用Arthas和一些Demo為研究Dubbo框架原理提供方便,並且講解如何基於CompletableFuture和Netty類比RPC同步與純非同步調用。
本書將原理與實踐相結合,由淺入深、通俗易懂地講解了Dubbo框架的使用及內核原理實現,適合Java中高級研發工程師,以及對RPC框架技術感興趣,希望探究RPC框架內部實現原理的人員閱讀。
翟陸續,目前就職於淘寶技術,花名加多。熱衷併發、非同步、反應式程式設計,熟悉常用開源框架實現原理,微信公眾號:技術原始積累。
基 礎 篇
第1 章 Dubbo 基礎 / 2
1.1 初識Dubbo / 2
1.2 本書Demo 詳解 / 3
1.2.1 Demo 結構說明 / 3
1.2.2 SDK 模組 / 4
1.2.3 同步發佈與調用服務 / 6
1.2.4 服務消費端非同步調用服務/ 10
1.2.5 服務提供端非同步執行 / 13
1.2.6 服務消費端泛化調用 / 17
1.2.7 服務消費端本機服務mock 與服務降級 / 21
1.2.8 隱式參數傳遞 / 24
1.2.9 本機服務暴露與引用 / 26
1.3 小結 / 28
高 級 篇
第2章 Dubbo 框架內核原理剖析 / 30
2.1 Dubbo 分層架構概述 / 30
2.2 Dubbo 遠程調用細節 / 33
2.2.1 服務提供者暴露一個服務的概要過程 / 33
2.2.2 服務消費者消費一個服務的概要過程 / 34
2.3 Dubbo 的適配器原理 / 35
2.4 Dubbo 的動態編譯原理 / 36
2.5 Dubbo 增強SPI / 39
2.5.1 JDK 標準SPI 原理 / 39
2.5.2 增強SPI 原理 / 43
2.5.3 擴展點的自動包裝 / 54
2.6 Dubbo 使用JavaAssist 減少反射調用開銷 / 57
2.7 小結 / 60
第3章 遠端服務發佈與引用流程剖析 / 61
3.1 Dubbo 服務發佈端啟動流程剖析 / 61
3.2 Dubbo 服務提供方如何處理請求 / 74
3.3 Dubbo 服務消費方啟動流程剖析 / 81
3.4 Dubbo 服務消費端一次遠端調用過程 / 97
3.5 小結 / 100
第4章 Directory 目錄與Router 路由服務 / 101
4.1 Directory 目錄 . / 101
4.2 RegistryDirectory 的創建 / 101
4.3 RegistryDirectory 中invoker 列表的更新 102
4.4 小結 / 107
第5章 Dubbo 消費端服務mock 與服務降級策略原理 / 108
5.1 服務降級原理 / 108
5.1.1 降級策略註冊 / 108
5.1.2 服務消費端使用降級策略 / 109
5.2 本機服務mock 原理 / 111
5.2.1 mock 合法性檢查 / 111
5.2.2 服務消費端使用mock 服務 / 113
5.3 小結 / 116
第6章 Dubbo 集群容錯與負載均衡策略 / 117
6.1 Dubbo 集群容錯策略概述 / 117
6.2 Failfast Cluster 策略源碼分析 / 119
X ┃ 深度剖析Apache Dubbo核心技術內幕
6.3 Failsafe Cluster 策略源碼分析 / 120
6.4 Failover Cluster 策略源碼分析 / 120
6.5 Failback Cluster 策略源碼分析 / 122
6.6 Forking Cluster 策略源碼分析 / 124
6.7 Broadcast Cluster 策略源碼分析 / 127
6.8 如何基於擴展介面自訂集群容錯策略 / 128
6.9 Dubbo 負載均衡策略概述 / 129
6.10 Random LoadBalance 策略源碼分析 / 131
6.11 RoundRobin LoadBalance 策略源碼分析 / 134
6.12 LeastActive LoadBalance 策略源碼分析 / 139
6.13 ConsistentHash LoadBalance 策略源碼分析 / 141
6.13.1 一致性 Hash 負載均衡策略原理 / 141
6.13.2 源碼分析 / 147
6.14 如何基於擴展介面自訂負載均衡策略/ 148
6.15 小結 / 149
第7章 Dubbo 執行緒模型與執行緒池策略 / 150
7.1 Dubbo 的執行緒模型概述 / 150
7.2 AllDispatcher 源碼剖析 / 152
7.3 DirectDispatcher 源碼剖析 / 154
7.4 MessageOnlyDispatcher 源碼剖析 / 154
7.5 ExecutionDispatcher 源碼剖析 / 155
7.6 ConnectionOrderedDispatcher 源碼剖析/ 156
7.7 執行緒模型的確定時機 / 159
7.8 如何基於擴展介面自訂執行緒模型 / 160
7.9 Dubbo 的執行緒池策略 / 161
7.10 FixedThreadPool 源碼剖析 / 161
7.11 LimitedThreadPool 源碼剖析 / 163
7.12 EagerThreadPool 源碼剖析 / 164
7.13 CachedThreadPool 源碼剖析 / 166
7.14 執行緒池的確定時機 / 168
7.15 如何基於擴展介面自訂執行緒池策略 / 168
7.16 小結 / 169
第8章 Dubbo 如何實現泛化引用 / 170
8.1 服務消費端GenericImplFilter 源碼分析 / 170
8.2 服務提供端GenericFilter 源碼分析 / 172
8.3 小結 / 176
第9章 Dubbo 併發控制 / 177
9.1 服務消費端併發控制 / 177
9.2 服務提供端併發控制 / 182
9.3 小結 / 185
第10章 Dubbo 隱式參數傳遞 / 186
10.1 服務消費端AbstractClusterInvoker 原理剖析 / 186
10.2 服務提供方ContextFilter 原理剖析 / 188
10.3 小結 / 189
第11章 Dubbo 全鏈路非同步 / 190
11.1 服務消費端非同步調用 / 190
11.1.1 2.7.0 版本前的非同步調用實現 / 191
11.1.2 2.7.0 版本提供的非同步調用實現 / 201
11.2 服務提供端非同步執行/ 204
11.2.1 基於定義CompletableFuture 簽名的介面實現非同步執行 / 205
11.2.2 使用AsyncContext 實現非同步執行 / 208
11.3 非同步調用與執行引入的新問題 / 211
11.3.1 Filter 鏈 / 211
11.3.2 上下文物件傳遞 / 216
11.4 小結 / 218
第12章 本機服務暴露與引用原理 / 219
12.1 本機服務暴露流程 / 219
12.2 本機服務引用啟動流程 / 222
XII ┃ 深度剖析Apache Dubbo核心技術內幕
12.3 本機服務一次引用流程 / 224
12.4 小結 / 225
第13章 Dubbo 協定與網路傳輸 / 226
13.1 Dubbo 協議 / 226
13.2 服務消費方編碼原理 / 229
13.3 服務發佈方解碼原理 / 233
13.4 小結 / 241
實 踐 篇
第14章 Dubbo 實踐 / 244
14.1 Arthas 的簡介與安裝 / 244
14.2 查看擴展介面適配器類的源碼 / 245
14.3 查看服務提供端Wrapper 類的源碼 / 247
14.4 查詢Dubbo 啟動後都有哪些Filter / 250
14.5 Demo 驗證RoundRobin LoadBalance 負載均衡原理 / 253
14.6 如何動態獲取Dubbo 服務提供方地址清單/ 256
14.6.1 場景概述/ 256
14.6.2 原理與實現 / 257
14.7 根據IP 動態路由調用Dubbo 服務/ 260
14.8 基於CompletableFuture 和Netty 類比RPC 同步與純非同步調用 / 264
14.8.1 協議幀定義 /..265
14.8.2 RpcServer 的實現 / 265
14.8.3 RpcClient 的實現 / 268
14.8.4 實例 / 273
14.9 小結 / 275