深度剖析 ApacheDubbo 核心技術內幕
內容描述
Dubbo是阿裡巴巴開發的一個開源的高性能、高可用、可擴展的分佈式RPC調用框架,致力於提供高性能和透明化的 RPC 遠程調用服務解決方案。作為阿裡巴巴 SOA 服務化治理方案的核心框架,目前已進入 Apache 孵化器項目。在單體應用時,不同業務模塊部署在同一個JVM 進程內,這時通過本地調用就可以解決不同業務模塊之間的相互引用;但在多體應用時,不同業務模塊大多部署到不同的機器上,這時一個高效、穩定的RPC框架就顯得特別重要了。Apache Dubbo 作為阿裡巴巴開源的分佈式RPC 框架,在進入Apache 孵化器項目後現已畢業,相信在開源社區的不斷貢獻下,它會成為RPC 框架中的佼佼者。本書是對Apache Dubbo 的使用以及內核原理的深度剖析,分為三部分:第一部分為基礎篇,首先從整體上講解使用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
作者介紹
翟陸續,目前就職於淘寶技術,花名加多。熱衷並發、異步、反應式編程,熟悉常用開源框架實現原理,微信公眾號:技術原始積累。