【為什么要寫這本書】
在當(dāng)下的互聯(lián)網(wǎng)系統(tǒng)開發(fā)過程中,各種開發(fā)工具和框架層出不窮,架構(gòu)體系也在不斷發(fā)展。無論微服務(wù)架構(gòu)還是中臺架構(gòu),背后都是一種分布式架構(gòu)。可以說,基于分布式架構(gòu)構(gòu)建的應(yīng)用程序無處不在。如何利用主流的分布式開發(fā)工具和機(jī)制來滿足不斷變化的業(yè)務(wù)需求,已經(jīng)成為很多架構(gòu)師和開發(fā)人員需要規(guī)劃和落實的一大課題。
想要設(shè)計并實現(xiàn)一個分布式系統(tǒng)并非易事,我們需要考慮一系列技術(shù)層面的問題,比如:
如何深入理解分布式系統(tǒng)中各個技術(shù)組件的核心概念和設(shè)計思想?
如何選擇并高效使用目前市面上主流的分布式系統(tǒng)開發(fā)框架?
如何快速分析和解決框架使用過程中的問題?
如何基于這些框架做定制化的開發(fā)以滿足差異化需求?
面對這些問題,開發(fā)人員一方面需要把握分布式系統(tǒng)涉及的核心技術(shù)組件,另一方面也需要對主流開源框架的實現(xiàn)原理有深入的理解。本書的寫作目的之一就是幫助廣大開發(fā)人員解決這些問題。
本書對分布式系統(tǒng)構(gòu)建過程中所涉及的一系列核心技術(shù)組件進(jìn)行了全面的闡述,這些技術(shù)組件包括網(wǎng)絡(luò)通信、遠(yuǎn)程調(diào)用、負(fù)載均衡、服務(wù)容錯、服務(wù)降級、注冊中心、服務(wù)網(wǎng)關(guān)、配置中心、消息通信、動態(tài)代理、應(yīng)用緩存、資源管理、框架集成和架構(gòu)模式等。在介紹這些技術(shù)組件時,本書不僅給出了它們的設(shè)計思想和應(yīng)用方式,更為重要的是,還結(jié)合Dubbo、Spring Cloud和MyBatis等主流開源框架的源代碼深入分析了它們的底層實現(xiàn)原理。
當(dāng)我們跟隨框架來學(xué)習(xí)分布式系統(tǒng)的技術(shù)組件時,學(xué)習(xí)目標(biāo)并不只是掌握這些技術(shù)組件在具體某一個框架中的實現(xiàn)過程。因為技術(shù)組件并不是只能應(yīng)用于某一個框架,而是也可以應(yīng)用于其他框架的類似場景中,也就是說技術(shù)組件是通用的,這點對分布式技術(shù)組件而言尤為明顯。通過系統(tǒng)學(xué)習(xí)本書所闡述的各個技術(shù)組件及其在具體框架中的實現(xiàn),開發(fā)人員在面對各種框架時能做到觸類旁通。這是本書的另一個目的。
同時,本書還從技術(shù)面試角度出發(fā),系統(tǒng)講解了開發(fā)人員應(yīng)該具備的面試技巧,并具體分析了圍繞上述各個技術(shù)組件所展開的面試題,希望能夠幫助廣大開發(fā)人員成功應(yīng)對與分布式系統(tǒng)相關(guān)的技術(shù)原理類面試。
【讀者對象】
需要掌握各個分布式技術(shù)組件,想要將這些組件引入日常研發(fā)過程中的開發(fā)人員。
對Dubbo、Spring Cloud、MyBatis 等框架有一定使用經(jīng)驗,想要將主流分布式框架更好地應(yīng)用到日常研發(fā)過程中的開發(fā)人員。
想要進(jìn)一步理解主流分布式框架內(nèi)部實現(xiàn)原理的開發(fā)人員。
需要應(yīng)對技術(shù)原理類面試的開發(fā)人員。
【本書特色】
本書從分布式系統(tǒng)技術(shù)組件的角度切入,深入剖析這些組件在Dubbo、Spring Cloud、MyBatis等主流分布式開源框架中的實現(xiàn),并給出相應(yīng)的面試題。本書特色主要體現(xiàn)在如下5個方面。
1)本書體系化較強(qiáng),將分布式系統(tǒng)構(gòu)建過程中的核心技術(shù)點以及技術(shù)組件進(jìn)行了抽象和提煉,包括網(wǎng)絡(luò)通信、遠(yuǎn)程調(diào)用、負(fù)載均衡、服務(wù)容錯、服務(wù)降級、注冊中心、服務(wù)網(wǎng)關(guān)、配置中心、消息通信、動態(tài)代理、應(yīng)用緩存、資源管理、框架集成和架構(gòu)模式14個核心組件,這些技術(shù)組件都是在日常開發(fā)過程中非常重要且實用的,也是在面試過程中會經(jīng)常遇到的。
2)本書具有創(chuàng)新性,針對市面上主流的開源框架,提供了剖析框架代碼結(jié)構(gòu)的系統(tǒng)方法,分別基于組件設(shè)計原則、架構(gòu)演進(jìn)過程、主流程、基礎(chǔ)架構(gòu)組成和可擴(kuò)展性設(shè)計這5個主題展開講解。這些內(nèi)容可以為讀者提供方法論指導(dǎo),讓讀者高效學(xué)習(xí)其他各種開源框架。
3)本書深入源碼和底層原理,通過追蹤Dubbo、Spring Cloud、MyBatis等主流分布式系統(tǒng)開發(fā)框架的源碼,結(jié)合14個核心組件的設(shè)計理念和功能,剖析了框架的底層實現(xiàn)機(jī)制,讓讀者能從中掌握分布式系統(tǒng)開發(fā)的精髓。
4)本書針對每個技術(shù)組件,結(jié)合筆者多年來作為面試官、面試者以及培訓(xùn)講師的經(jīng)驗,梳理了一組面試題。這些面試題大多來自阿里巴巴、京東、網(wǎng)易等公司,筆者結(jié)合自己的理解對其做出考點解析,并將框架源碼與面試題進(jìn)行融會貫通。
5)本書對技術(shù)人員如何實現(xiàn)自我成長和如何高效應(yīng)對技術(shù)原理類面試,給出了系統(tǒng)性的方法論,讓讀者不僅能夠應(yīng)對面試,還能夠把這本書作為學(xué)習(xí)的起點,在未來更好地提升自己的技術(shù)水平。
【如何閱讀本書】
本書分為16章,其中第3章到第16章是主體內(nèi)容。在介紹分布式系統(tǒng)技術(shù)組件時,每章采用技術(shù)概念和特性框架實現(xiàn)原理和源碼剖析面試題分析和解讀的三段式講解方式,即首先介紹技術(shù)組件自身的基本概念和特性,然后根據(jù)不同框架分析該技術(shù)組件的實現(xiàn)過程,最后通過面試題進(jìn)行總結(jié)。本書的詳細(xì)安排如下。
第1章是關(guān)于分布式系統(tǒng)的概述,涉及核心技術(shù)設(shè)計要求、技術(shù)組件、主流開發(fā)套件和技術(shù)面試要求等。
第2章介紹剖析框架代碼結(jié)構(gòu)的系統(tǒng)方法,分別基于組件設(shè)計原則、架構(gòu)演進(jìn)過程、主流程、基礎(chǔ)架構(gòu)組成和可擴(kuò)展性設(shè)計來展開講解。
第3章介紹網(wǎng)絡(luò)通信,包括基本概念、Dubbo服務(wù)器端通信原理和客戶端通信原理,以及面試題解析。
第4章介紹遠(yuǎn)程調(diào)用,包括服務(wù)發(fā)布和引用的過程、Dubbo中遠(yuǎn)程調(diào)用的實現(xiàn)原理,以及面試題解析。
第5章介紹負(fù)載均衡,包括基本原理講解、Dubbo和Spring Cloud中負(fù)載均衡的實現(xiàn)原理分析,以及面試題解析。
第6章介紹服務(wù)容錯,包括服務(wù)容錯的設(shè)計思想、Dubbo中集群容錯和Spring Cloud中服務(wù)熔斷的實現(xiàn)原理,以及面試題解析。
第7章介紹服務(wù)降級,包括服務(wù)降級策略講解、Dubbo和Spring Cloud中服務(wù)降級的實現(xiàn)原理分析,以及面試題解析。
第8章介紹注冊中心,包括服務(wù)注冊和發(fā)現(xiàn)、Dubbo和Spring Cloud中注冊中心的實現(xiàn)原理分析,以及面試題解析。
第9章介紹服務(wù)網(wǎng)關(guān),包括核心概念、響應(yīng)式網(wǎng)關(guān)Spring Cloud Gateway的工作原理分析,以及面試題解析。
第10章介紹配置中心,包括基本模型、Spring Cloud Config工作機(jī)制、Spring Cloud Config配置信息更新的實現(xiàn)原理,以及面試題解析。
第11章介紹消息通信,包括基礎(chǔ)知識、從Spring Messaging到Spring Cloud Stream的流程、Spring Cloud Stream整合消息中間件的實現(xiàn)機(jī)制,以及面試題解析。
第12章介紹動態(tài)代理,包括代理模式和類型、Dubbo遠(yuǎn)程訪問和MyBatis數(shù)據(jù)訪問中代理機(jī)制的實現(xiàn)原理,以及面試題解析。
第13章介紹應(yīng)用緩存,包括緩存的設(shè)計策略講解、MyBatis一級緩存和二級緩存的實現(xiàn)原理分析,以及面試題解析。
第14章介紹資源管理,包括資源管理和資源池、MyBatis中數(shù)據(jù)庫連接池的實現(xiàn)原理,以及面試題解析。
第15章介紹框架集成,包括Spring中的啟動擴(kuò)展點、Spring Boot自動配置機(jī)制、Dubbo和MyBatis框架集成的實現(xiàn)原理,以及面試題解析。
第16章介紹架構(gòu)模式,包括概念與應(yīng)用概述、微內(nèi)核模式和管道-過濾器模式及其應(yīng)用分析,以及面試題解析。
前言
第1章 認(rèn)識分布式系統(tǒng)1
1.1 分布式系統(tǒng)概述1
1.1.1 從單塊系統(tǒng)到分布式系統(tǒng)1
1.1.2 分布式系統(tǒng)的基本特性3
1.1.3 分布式系統(tǒng)和微服務(wù)架構(gòu)4
1.2 分布式系統(tǒng)的核心設(shè)計要求6
1.2.1 性能6
1.2.2 可用性6
1.2.3 可擴(kuò)展性6
1.2.4 服務(wù)治理7
1.3 分布式系統(tǒng)開發(fā)技術(shù)組件7
1.3.1 遠(yuǎn)程過程調(diào)用組件8
1.3.2 微服務(wù)構(gòu)建組件10
1.3.3 通用技術(shù)組件13
1.4 分布式系統(tǒng)的主流開發(fā)套件15
1.4.1 Spring Boot15
1.4.2 Spring Cloud18
1.4.3 Dubbo18
1.4.4 MyBatis19
1.5 分布式系統(tǒng)面試題解析19
1.6 本章小結(jié)20
第2章 剖析框架代碼結(jié)構(gòu)的系統(tǒng)方法22
2.1 基于組件設(shè)計原則剖析代碼結(jié)構(gòu)23
2.1.1 為什么代碼結(jié)構(gòu)要這么設(shè)計23
2.1.2 組件設(shè)計原則與量化標(biāo)準(zhǔn)24
2.1.3 組件設(shè)計原則與代碼結(jié)構(gòu):
Dubbo與MyBatis28
2.1.4 循環(huán)依賴及其消除方法31
2.2 基于架構(gòu)演進(jìn)過程剖析代碼結(jié)構(gòu)39
2.2.1 如何從易到難對框架進(jìn)行
逐步拆解39
2.2.2 Dubbo的架構(gòu)演進(jìn)過程40
2.3 基于主流程剖析代碼結(jié)構(gòu)46
2.3.1 如何抓住主流程并對框架
進(jìn)行分層剖析46
2.3.2 MyBatis中的主流程46
2.4 基于基礎(chǔ)架構(gòu)組成剖析代碼結(jié)構(gòu)54
2.4.1 如何從基礎(chǔ)架構(gòu)擴(kuò)展到
具體實現(xiàn)框架54
2.4.2 RPC基礎(chǔ)架構(gòu)54
2.4.3 從RPC基礎(chǔ)架構(gòu)擴(kuò)展到
Dubbo框架61
2.5 基于可擴(kuò)展性設(shè)計剖析代碼結(jié)構(gòu)65
2.5.1 如何在框架中預(yù)留可擴(kuò)展點65
2.5.2 常見的可擴(kuò)展性設(shè)計方法66
2.5.3 MyBatis TypeHandler機(jī)制68
2.6 剖析框架代碼結(jié)構(gòu)面試題解析72
2.7 本章小結(jié)73
第3章 網(wǎng)絡(luò)通信74
3.1 網(wǎng)絡(luò)通信與Dubbo框架74
3.1.1 網(wǎng)絡(luò)通信基本概念74
3.1.2 Dubbo中的網(wǎng)絡(luò)通信組件77
3.2 Dubbo服務(wù)器端通信原理77
3.2.1 服務(wù)器端Exchange77
3.2.2 服務(wù)器端Transport82
3.2.3 服務(wù)器端Serialize84
3.3 Dubbo客戶端通信原理87
3.4 網(wǎng)絡(luò)通信面試題解析89
3.5 本章小結(jié)90
第4章 遠(yuǎn)程調(diào)用91
4.1 服務(wù)發(fā)布和引用92
4.1.1 如何發(fā)布遠(yuǎn)程服務(wù)92
4.1.2 如何引用遠(yuǎn)程服務(wù)93
4.2 Dubbo中的遠(yuǎn)程調(diào)用94
4.2.1 Dubbo服務(wù)發(fā)布流程94
4.2.2 Dubbo服務(wù)引用流程101
4.3 遠(yuǎn)程調(diào)用面試題解析109
4.4 本章小結(jié)110
第5章 負(fù)載均衡112
5.1 負(fù)載均衡基本原理112
5.1.1 負(fù)載均衡的類型113
5.1.2 負(fù)載均衡算法和策略114
5.2 Dubbo中的負(fù)載均衡116
5.2.1 Dubbo負(fù)載均衡整體結(jié)構(gòu)116
5.2.2 Dubbo負(fù)載均衡策略118
5.3 Spring Cloud中的負(fù)載均衡120
5.3.1 Netflix Ribbon核心機(jī)制120
5.3.2 Netflix Ribbon負(fù)載均衡策略122
5.3.3 Spring Cloud Netflix Ribbon
實現(xiàn)原理124
5.4 負(fù)載均衡面試題解析127
5.5 本章小結(jié)128
第6章 服務(wù)容錯129
6.1 服務(wù)容錯設(shè)計思想129
6.1.1 服務(wù)消費者容錯129
6.1.2 服務(wù)容錯策略130
6.2 Dubbo中的集群容錯132
6.2.1 Dubbo中的集群133
6.2.2 Dubbo中的容錯機(jī)制134
6.3 Spring Cloud中的服務(wù)熔斷136
6.3.1 Spring Cloud Circuit Breaker137
6.3.2 Hystrix熔斷機(jī)制139
6.4 服務(wù)容錯面試題解析147
6.5 本章小結(jié)148
第7章 服務(wù)降級149
7.1 服務(wù)降級策略149
7.1.1 服務(wù)分級149
7.1.2 服務(wù)回退150
7.2 Dubbo中的服務(wù)降級151
7.2.1 Dubbo中的Mock機(jī)制151
7.2.2 MockInvoker和Mock-
ClusterInvoker152
7.3 Spring Cloud中的服務(wù)降級154
7.3.1 Spring Cloud中的回退機(jī)制154
7.3.2 基于攔截器實現(xiàn)回退156
7.4 服務(wù)降級面試題解析158
7.5 本章小結(jié)159
第8章 注冊中心160
8.1 服務(wù)注冊和發(fā)現(xiàn)160
8.1.1 注冊中心模型160
8.1.2 注冊中心實現(xiàn)工具163
8.2 Dubbo中的注冊中心163
8.2.1 Dubbo注冊中心模型163
8.2.2 ZooKeeper基本原理與
操作方式164
8.2.3 ZooKeeper注冊中心實現(xiàn)過程166
8.3 Spring Cloud中的注冊中心172
8.3.1 Eureka注冊中心模型172
8.3.2 Eureka服務(wù)器端基本原理173
8.3.3 Eureka客戶端基本原理178
8.4 注冊中心面試題解析184
8.5 本章小結(jié)185
第9章 服務(wù)網(wǎng)關(guān)186
9.1 服務(wù)網(wǎng)關(guān)的核心概念187
9.1.1 服務(wù)網(wǎng)關(guān)的作用187
9.1.2 服務(wù)網(wǎng)關(guān)的結(jié)構(gòu)和功能188
9.2 Spring Cloud Gateway工作原理188
9.2.1 響應(yīng)式編程概述189
9.2.2 Spring Cloud Gateway架構(gòu)192
9.2.3 路由和過濾器194
9.3 服務(wù)網(wǎng)關(guān)面試題解析204
9.4 本章小結(jié)205
第10章 配置中心206
10.1 配置中心基本模型207
10.1.1 配置中心與微服務(wù)架構(gòu)207
10.1.2 配置中心實現(xiàn)工具208
10.2 Spring Cloud Config工作機(jī)制209
10.2.1 Spring Cloud Config Server
工作機(jī)制209
10.2.2 Spring Cloud Config Client
工作機(jī)制213
10.3 Spring Cloud Config配置信息更新218
10.3.1 Spring Cloud Config客戶端
更新策略218
10.3.2 配置信息熱更新機(jī)制219
10.4 配置中心面試題解析223
10.5 本章小結(jié)225
第11章 消息通信226
11.1 事件驅(qū)動和消息通信226
11.1.1 事件驅(qū)動架構(gòu)的需求226
11.1.2 消息通信機(jī)制和消息中間件228
11.1.3 基于消息通信機(jī)制的系統(tǒng)
集成方法229
11.2 從Spring Messaging到
Spring Cloud Stream230
11.2.1 Spring Messaging和
Spring Integration 231
11.2.2 Spring Cloud Stream中的
Spring Integration233
11.2.3 Spring Cloud Stream基本架構(gòu)234
11.3 Spring Cloud Stream整合
消息中間件235
11.3.1 Spring Cloud Stream
發(fā)送和接收消息235
11.3.2 RabbitMQ發(fā)送和接收消息242
11.4 消息通信面試題解析245
11.5 本章小結(jié)246
第12章 動態(tài)代理247
12.1 代理模式和類型247
12.1.1 靜態(tài)代理機(jī)制248
12.1.2 動態(tài)代理機(jī)制249
12.2 Dubbo遠(yuǎn)程訪問中的代理機(jī)制252
12.2.1 ProxyFactory252
12.2.2 JdkProxyFactory253
12.3 MyBatis數(shù)據(jù)訪問中的代理機(jī)制254
12.3.1 Mapper和動態(tài)代理254
12.3.2 延遲加載和動態(tài)代理258
12.4 動態(tài)代理面試題解析260
12.5 本章小結(jié)261
第13章 應(yīng)用緩存263
13.1 應(yīng)用緩存的設(shè)計策略263
13.1.1 經(jīng)典緩存分層架構(gòu)263
13.1.2 應(yīng)用緩存的分級模式264
13.2 MyBatis一級緩存264
13.2.1 Cache264
13.2.2 PerpetualCache265
13.2.3 一級緩存與BaseExecutor268
13.3 MyBatis二級緩存271
13.3.1 CacheBuilder271
13.3.2 二級緩存與CachingExecutor274
13.4 應(yīng)用緩存面試題解析277
13.5 本章小結(jié)278
第14章 資源管理279
14.1 資源管理和資源池279
14.1.1 資源池模型279
14.1.2 資源池實現(xiàn)示例280
14.2 MyBatis中的數(shù)據(jù)庫連接池282
14.2.1 連接池的工作流程和
核心要素283
14.2.2 Connection對象獲取過程284
14.2.3 PooledDataSource285
14.2.4 UnpooledDataSource289
14.3 資源管理面試題解析290
14.4 本章小結(jié)291
第15章 框架集成292
15.1 Spring中的啟動擴(kuò)展點292
15.1.1 InitializingBean和
DisposableBean292
15.1.2 BeanPostProcessor295
15.1.3 Aware296
15.1.4 ApplicationListener299
15.2 Spring自定義標(biāo)簽體系305
15.2.1 標(biāo)簽擴(kuò)展時機(jī)305
15.2.2 標(biāo)簽擴(kuò)展的開發(fā)流程305
15.3 Spring Boot自動配置310
15.4 Dubbo的框架集成312
15.4.1 Dubbo啟動機(jī)制313
15.4.2 Dubbo自定義配置標(biāo)簽319
15.5 MyBatis的框架集成320
15.5.1 MyBatis-Spring啟動過程320
15.5.2 MyBatis-Spring-Boot-Starter326
15.6 框架集成面試題解析329
15.7 本章小結(jié)331
第16章 架構(gòu)模式332
16.1 架構(gòu)模式與應(yīng)用332
16.1.1 模式的概念和分類332
16.1.2 基于架構(gòu)模式把握框架
設(shè)計思想333
16.2 微內(nèi)核模式及其應(yīng)用334
16.2.1 微內(nèi)核模式和插件化系統(tǒng)334
16.2.2 微內(nèi)核模式的基本實現(xiàn):
SPI機(jī)制336
16.2.3 微內(nèi)核模式在Dubbo
中的應(yīng)用339
16.2.4 Dubbo中的擴(kuò)展點344
16.3 管道-過濾器模式及其應(yīng)用346
16.3.1 管道-過濾器模式簡介346
16.3.2 管道-過濾器模式在
Dubbo中的應(yīng)用351
16.3.3 管道-過濾器模式在MyBatis
中的應(yīng)用354
16.4 架構(gòu)模式面試題解析360
16.5 本章小結(jié)362