內容簡介
本書首先介紹Dubbo的簡史、後續的規劃和整體架構大圖;接著介紹Dubbo環境配置,並基於Dubbo開發第一款應用程式;然後介紹Dubbo內置的常用註冊中心的實現原理,Dubbo擴展點載入的原理和實現,Dubbo的啟動、服務暴露、服務消費和優雅停機的機制,Dubbo中RPC協定細節、編解碼和服務調用實現原理,Dubbo集群容錯、路由和負載均衡機制,Dubbo的擴展點相關知識,Dubbo高級特性的實現和原理,Dubbo常用的Filter的實現原理,Dubbo中新增etcd3註冊中心的實戰內容和Dubbo服務治理平台的相關知識;最後介紹Dubbo未來生態和Dubbo Mesh的相關知識。
圖書目錄
目錄
第1章 Dubbo——高性能RPC通信框架1
1.1 套用架構演進過程1
1.1.1 單體套用1
1.1.2 分散式套用3
1.2 Dubbo簡介6
1.2.1 Dubbo的發展歷史7
1.2.2 Dubbo是什麼7
1.2.3 Dubbo解決什麼問題9
1.2.4 誰在使用Dubbo10
1.2.5 Dubbo後續的規劃11
1.3 Dubbo總體大圖11
1.3.1 Dubbo總體分層11
1.3.2 Dubbo核心組件12
1.3.3 Dubbo總體調用過程13
1.4 小結15
第2章 開發第一款Dubbo應用程式16
2.1 配置開發環境16
2.1.1 下載並安裝JDK17
2.1.2 下載並安裝IDE17
2.1.3 下載並配置Maven18
2.1.4 下載並配置ZooKeeper18
2.1.5 使用IDEA調試Dubbo源碼18
2.2 基於XML配置實現21
2.2.1 編寫Echo伺服器21
2.2.2 編寫Echo客戶端24
2.3 基於註解實現26
2.3.1 基於註解編寫Echo伺服器26
2.3.2 基於註解編寫Echo客戶端28
2.4 基於API實現30
2.4.1 基於API編寫Echo伺服器30
2.4.2 基於API編寫Echo客戶端31
2.5 構建並運行32
2.6 小結34
第3章 Dubbo註冊中心35
3.1 註冊中心概述35
3.1.1 工作流程36
3.1.2 數據結構37
3.1.3 ZooKeeper原理概述37
3.1.4 Redis原理概述39
3.2 訂閱/發布40
3.2.1 ZooKeeper的實現40
3.2.2 Redis的實現44
3.3 快取機制48
3.3.1 快取的載入49
3.3.2 快取的保存與更新50
3.4 重試機制50
3.5 設計模式51
3.5.1 模板模式51
3.5.2 工廠模式52
3.6 小結54
第4章 Dubbo擴展點載入機制55
4.1 載入機制概述55
4.1.1 Java SPI56
4.1.2 擴展點載入機制的改進57
4.1.3 擴展點的配置規範59
4.1.4 擴展點的分類與快取60
4.1.5 擴展點的特性61
4.2 擴展點註解62
4.2.1 擴展點註解:@SPI62
4.2.2 擴展點自適應註解:@Adaptive63
4.2.3 擴展點自動激活註解:@Activate65
4.3 ExtensionLoader的工作原理66
4.3.1 工作流程66
4.3.2 getExtension的實現原理67
4.3.3 getAdaptiveExtension的實現原理70
4.3.4 getActivateExtension的實現原理73
4.3.5 ExtensionFactory的實現原理73
4.4 擴展點動態編譯的實現76
4.4.1 總體結構77
4.4.2 Javassist動態代碼編譯78
4.4.3 JDK動態代碼編譯79
4.5 小結80
第5章 Dubbo啟停原理解析81
5.1 配置解析81
5.1.1 基於schema設計解析82
5.1.2 基於XML配置原理解析85
5.1.3 基於註解配置原理解析91
5.2 服務暴露的實現原理97
5.2.1 配置承載初始化97
5.2.2 遠程服務的暴露機制97
5.2.3 本地服務的暴露機制105
5.3 服務消費的實現原理106
5.3.1 單註冊中心消費原理106
5.3.2 多註冊中心消費原理113
5.3.3 直連服務消費原理114
5.4 優雅停機原理解析115
5.5 小結116
第6章 Dubbo遠程調用117
6.1 Dubbo調用介紹117
6.2 Dubbo協定詳解119
6.3 編解碼器原理122
6.3.1 Dubbo協定編碼器123
6.3.2 Dubbo協定解碼器128
6.4 Telnet調用原理136
6.4.1 Telnet指令解析原理136
6.4.2 Telnet實現健康監測140
6.5 ChannelHandler141
6.5.1 核心Handler和執行緒模型141
6.5.2 Dubbo請求回響Handler145
6.5.3 Dubbo心跳Handler148
6.6 小結150
第7章 Dubbo集群容錯151
7.1 Cluster層概述151
7.2 容錯機制的實現153
7.2.1 容錯機制概述153
7.2.2 Cluster接口關係155
7.2.3 Failover策略157
7.2.4 Failfast策略158
7.2.5 Failsafe策略158
7.2.6 Failback策略159
7.2.7 Available策略160
7.2.8 Broadcast策略160
7.2.9 Forking策略161
7.3 Directory的實現162
7.3.1 總體實現162
7.3.2 RegistryDirectory的實現163
7.4 路由的實現166
7.4.1 路由的總體結構166
7.4.2 條件路由的參數規則167
7.4.3 條件路由的實現168
7.4.4 檔案路由的實現169
7.4.5 腳本路由的實現170
7.5 負載均衡的實現171
7.5.1 包裝後的負載均衡171
7.5.2 負載均衡的總體結構173
7.5.3 Random負載均衡175
7.5.4 RoundRobin負載均衡176
7.5.5 LeastActive負載均衡178
7.5.6 一致性Hash負載均衡179
7.6 Merger的實現181
7.6.1 總體結構181
7.6.2 MergeableClusterInvoker機制183
7.7 Mock185
7.7.1 Mock常見的使用方式185
7.7.2 Mock的總體結構186
7.7.3 Mock的實現原理187
7.8 小結189
第8章 Dubbo擴展點190
8.1 Dubbo核心擴展點概述190
8.1.1 擴展點的背景191
8.1.2 擴展點整體架構191
8.2 RPC層擴展點192
8.2.1 Proxy層擴展點192
8.2.2 Registry層擴展點194
8.2.3 Cluster層擴展點195
8.3 Remote層擴展點198
8.3.1 Protocol層擴展點199
8.3.2 Exchange層擴展點202
8.3.3 Transport層擴展點203
8.3.4 Serialize層擴展點206
8.4 其他擴展點207
第9章 Dubbo高級特性210
9.1 Dubbo高級特性概述210
9.2 服務分組和版本211
9.3 參數回調214
9.4 隱式參數217
9.5 異步調用218
9.6 泛化調用219
9.7 上下文信息220
9.8 Telnet操作221
9.9 Mock調用224
9.10 結果快取226
9.11 小結226
第10章 Dubbo過濾器227
10.1 Dubbo過濾器概述227
10.1.1 過濾器的使用228
10.1.2 過濾器的總體結構228
10.2 過濾器鏈初始化的實現原理231
10.3.1 AccessLogFilter的實現原理233
10.3.2 ExecuteLimitFilter的實現原理234
10.3.3 ClassLoaderFilter的實現原理235
10.3.4 ContextFilter的實現原理237
10.3.5 ExceptionFilter的實現原理237
10.3.6 TimeoutFilter的實現原理238
10.3.7 TokenFilter的實現原理238
10.3.8 TpsLimitFilter的實現原理239
10.4 消費者過濾器的實現原理240
10.4.1 ActiveLimitFilter的實現原理240
10.4.2 ConsumerContextFilter的實現原理242
10.4.3 DeprecatedFilter的實現原理242
10.4.4 FutureFilter的實現原理243
10.5 小結243
第11章 Dubbo註冊中心擴展實踐245
11.1 etcd背景介紹245
11.2 etcd數據結構設計246
11.3 構建可運行的註冊中心248
11.3.1 擴展Transporter實現248
11.3.2 擴展RegistryFactory實現249
11.3.3 新增JEtcdClient實現250
11.3.4 擴展FailbackRegistry實現260
11.3.5 編寫單元測試263
11.4 搭建etcd集群並在Dubbo中運行263
11.4.1 單機啟動etcd264
11.4.2 集群啟動etcd265
11.5 小結266
第12章 Dubbo服務治理平台267
12.1 服務治理平台總體結構267
12.2 服務治理平台的實現原理269
12.3 小結273
第13章 Dubbo未來展望274
13.1 Dubbo未來生態274
13.1.1 開源現狀274
13.1.2 後續發展275
13.2 雲原生281
13.2.1 面臨的挑戰281
13.2.2 Service Mesh簡介283
13.2.3 Dubbo Mesh284
13.3 小結285