總金額: 會員:NT$ 0 非會員:NT$ 0 
(此金額尚未加上運費)
電子電信技術 電腦技術 計算技術、計算機技術
 
 
 
 
深度剖析Apache Dubbo核心技術內幕(配件另行下載)
 作  者: 翟陸續
 出版單位: 電子工業
 出版日期: 2019.12
 進貨日期: 2020/1/30
 ISBN: 9787121376931
 開  本: 16 開    
 定  價: 668
 售  價: 534
  會 員 價: 490
推到Facebook 推到Plurk 推到Twitter
前往新書區 書籍介紹 購物流程  
 
編輯推薦:

本書是目前市面上v一一本基於Dubbo2.7版本的zuixin著作。作者認為掌握Apache Dubbo的實現原理,有助於讀者深入理解分布式系統中的很多技術點,提高自己在技術方面的核心競爭力。

從這樣的初衷出發,針對讀者的需求,作者將全書分為三大部分:第一部分用實例講解Dubbo的使用,即從整體上講解用Dubbo搭建系統包括哪些模塊,相互之間的關係;第二部分分析Dubbo的內部實現原理,包括支撐Dubbo框架的適配器類原理、動態編譯原理、增強SPI 原理、消費端的泛化調用實現原理、消費端異步調用與服務提供端的異步執行、Dubbo 框架的線程模型、消費端負載均衡策略、消費端集群容錯策略、併發控制原理、Dubbo 網絡協議等;第三部分為實踐篇,主要探討如何使用Arthas 和一些Demo 來為研究Dubbo 框架原理提供方便,並且講解如何基於CompletableFuture 和Netty 模擬RPC 同步與純異步調用。


內容簡介:

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


章節試讀:

推薦序
源項目怎樣才算成功呢?在我看來,生產環境中實踐的越多,參與貢獻的人越多,願意學習掌握的人越多,就越成功。而幫助更多的人了解Dubbo,掌握Dubbo,學習資料的豐富程度就成為了關鍵。這不是靠Dubbo開源團隊的幾篇博文、實例代碼和官方文檔能夠撐得起來的。我非常期望看到有更多的Dubbo 出版物出現。
幸運的是,在這兩年中,我的確看到了越來越多的科技博主在介紹Dubbo,有人開始在知識付費頻道講授Dubbo 的課程,我本人也有幸被幾本書的作者邀請寫推薦或者序。今天,又有幸被我在阿里巴巴的同事翟陸續邀請,為本書作序。翟陸續,花名加多,擔任併發編程網編輯,同時是另一本書《Java 併發編程之美》的作者。他帶來的這本書是基於Dubbo 目前的主幹版本2.7。作者深入淺出地從基本用法講起,然後逐一剖析了Dubbo 的架構、擴展、服務的註冊與發現、路由、集群、線程、協議與網絡等方方面面,基本上涵蓋了Dubbo 這個服務框架最主要的部分。對於想深入到Dubbo 源碼的讀者有著相當大的幫助。最後,作者介紹了如何使用Arthas 來幫助理解Dubbo 的工作,如何利用Dubbo 的SPI 擴展機制來實現自定義的負載均衡策略。作者在一本書中介紹了兩個來自我的團隊的開源作品,也讓我有點受寵若驚。
最後,也通過寫序的機會,感謝本書的作者加多。本書是目前市面上能夠看到的唯一一本基於2.7 版本介紹Dubbo 原理的書籍。作者將關鍵源碼與圖文有機結合,深入淺出地介紹了Dubbo 的關鍵實現。也期待更多的開源愛好者通過學習本書,加入Dubbo 開源的大家庭,把國人主導的這個Apache 頂級項目做得越來越好!
——阿里巴巴高級技術專家Apache Dubbo PMC Chair, 羅毅(北緯)

前言
在單體應用時,不同業務模塊部署在同一個JVM 進程內,這時通過本地調用就可以解決不同業務模塊之間的相互引用;但在多體應用時,不同業務模塊大多部署到不同的機器上,這時一個高效、穩定的RPC 框架就顯得特別重要了。Apache Dubbo 作為阿里巴巴開源的分布式RPC 框架,是眾多RPC 框架中比較優秀的一個,在進入Apache 孵化器項目後現已畢業,相信在開源社區的不斷貢獻下,它會成為RPC 框架中的佼佼者。

為何要研究Apache Dubbo 的實現原理
引用筆者在《Java 併發編程之美》一書前言中的論述:研究開源框架,特別是優秀的開源框架的實現原理,可以開拓我們的技術視野,提高我們的架構能力,減少由於使用不當導致的線上故障的發生。而在微服務大行其道的今天,RPC 框架作為微服務之間通信的一種手段,其在微服務架構中占有一席之地,Apache Dubbo(後面簡稱Dubbo)則是RPC框架中比較優秀的代表,為了更好地使用它,其實現原理自然值得我們去探究。
下面我們具體談談通過研究Dubbo 框架的實現原理,到底能學到什麼。
我們首先可以學習和深刻體會到分層架構帶來的好處。Dubbo 框架從整體上分為了業務(Business)層、RPC 層和遠程調用(Remoting)層,其中業務層提供API,讓使用者方便地發布與引用服務;RPC 層則是對服務註冊與發現、服務代理、路由、負載均衡等功能的封裝,該層又可以被劃分為很多層;遠程調用層則是對網絡傳輸與請求數據序列/反序列化等的抽象。使用分層架構可以保證下層的改變對上層不可見,並且可以實現關注點分離,比如使用者使用Dubbo 時只關心如何使用業務層的API 來發布與引用服務,而不需要關心RPC 層的實現,當新版本Dubbo 升級了RPC 層的邏輯時,使用者只需要升級Dubbo 的版本就可以了,這是因為RPC 層的修改對業務層使用者來說是透明的。
我們也可以學習到好的框架應該具有可擴展性。Dubbo 就是一個擴展性極強的框架,其RPC 層中的所有組件都是基於SPI 擴展接口實現的,每個組件都可以被替換;Dubbo增強了 JDK 中提供的標準 SPI 功能,並且增加了對擴展接口的IoC (一個擴展接口可以直接使用setter() 方法注入其他擴展接口)和 AOP 的支持(可以使用Wrapper 類對擴展接口進行功能增強);增強SPI 不會一次性實例化擴展點的所有實現類,從而避免了當擴展點實現類初始化很耗時但當前還沒用上它的功能時,仍進行加載實例化這種浪費資源的情況;增強的 SPI 是在具體用到某個實現類時才對具體實現類進行實例化。
作為高可用分布式RPC 框架,其自身必須具有容錯能力,以便提高系統的可用性。Dubbo 框架則提供了分布式系統中常見的集群容錯策略,並且提供了擴展接口,讓使用方方便地定制自己的集群容錯策略,通過研究Dubbo 框架提供的集群容錯策略,可以讓我們對分布式系統中的容錯技術有深入的理解。在分布式系統中,每個微服務都是以集群的方式部署的,那麼當我們訪問一個具體服務時到底訪問哪一台機器提供的服務呢?這就是分布式系統中負載均衡器與路由規則要做的事情,作為分布式RPC 框架,其自身也必須具有負載均衡的能力。Dubbo 框架提供了分
布式系統中常見的負載均衡策略,並且提供了擴展接口,讓使用者方便地定制自己的負載均衡策略;另外,路由規則提供了服務治理的一種策略,在Dubbo 中我們可以通過管理控制台來配置路由規則,讓消費者只可訪問那些服務提供者。通過研究Dubbo 框架提供的負載均衡與路由策略,可以讓我們對分布式系統中的負載均衡技術與路由規則有深入的理解。
在分布式系統中,當我們要消費某個服務時,如何找到其地址是一個要解決的問題。在分布式RPC 中,一個通用解決方案是引入服務註冊中心,當服務提供者啟動時,會自動把自己的服務註冊到服務註冊中心;當消費者啟動時,會去服務註冊中心訂閱自己感興趣的服務的地址列表。在Dubbo 框架中,提供了擴展接口來方便地讓我們使用ZooKeeper、Redis 等作為服務註冊中心,通過研究Dubbo 原理,我們可以深刻理解服務提供方到底是如何把服務註冊到服務註冊中心的,以及服務消費端是如何動態地感知服務提供方地址列表變化的。所有RPC 框架要解決的一個問題是,如何讓使用者無感知地發起遠程過程調用,也就是讓使用者在發起遠程調用時有和本地調用一樣的體驗。Dubbo 框架和其他RPC 框架一樣,採用代理來實現該功能。在Dubbo 框架中擴展接口Proxy 就是專門來做代理使用
的,並且其提供了擴展接口的JDK 動態代理與Cglib 的實現。研究Dubbo 的原理,我們可以學習到消費端如何對服務接口進行代理以實現透明調用,服務提供端如何使用代理與JavaAssist 技術來減少反射調用開銷。
在Dubbo 的分層架構中,Transport 網絡傳輸層把Mina 和 Netty 抽象為統一接口 ,並且在默認情況下使用Netty 作為底層網絡通信。通過研究Dubbo,我們可以學習到Dubbo的網絡協議幀是如何設計的;服務消費端是如何啟動Netty 客戶端的,是如何把RPC 請求封裝為協議幀並序列化然後通過Netty 客戶端發起網絡請求的;服務提供端又是如何啟動Netty 服務器進行服務監聽的,是如何處理經典的半包、粘包問題的,是如何把接收到的二進制包轉換為Dubbo 協議幀並反序列化為POJO 對象的。另外,使用Netty 時都說不要在ChannelHandler 中做阻塞的事情,以免阻塞了I/O 線程,使其他請求得不到及時處理,那麼這到底是什麼意思呢?研究完Dubbo 的線程模型後,你就會明白了。
對於網絡請求來說,同步調用是比較直截了當的,但是同步調用意味著當前發起請求的調用線程在遠端機器返回結果前必須阻塞等待,這顯然很浪費資源。好的做法是發起請求的調用線程發起請求後,註冊一個回調函數,然後馬上返回去做其他事情,當遠端把結果返回後再使用I/O 線程執行回調函數,也就是發起方實現了異步調用,調用線程不會被阻塞。Dubbo 則基於Netty 的異步非阻塞能力和JDK 8 中的CompletableFuture 輕鬆地實現RPC 請求的異步調用,提高了資源利用率。通過研究Dubbo 的實現原理,我們可以對異步編程帶來的好處以及實現原理有深刻的體會。
……
總之,研究透徹Dubbo 框架原理實現後,你會對分布式系統中的很多技術點有深入的理解。而筆者堅信分布式系統是應用的發展方向,因為隨著業務規模的增大,為了保障系統的可伸縮性、高可用性,系統必然朝著分布式方向發展。所以,掌握一些分布式系統中的優秀RPC框架的原理及實現細節,無論現在還是將來都將成為區別於他人的核心競爭力。
如何閱讀本書

本書分為三部分:第一部分為基礎篇,首先從整體上講解使用Dubbo 搭建的系統由哪些模塊組成,各模塊相互之間的調用關係是怎麼樣的,然後基於本書的Demo 講解如何使用Dubbo ;第二部分為高級篇,主要講解Dubbo 框架內部的實現原理,包含支撐Dubbo框架的適配器類原理、動態編譯原理、增強SPI 原理、消費端的泛化調用實現原理、消費端異步調用與服務提供端的異步執行、Dubbo 框架的線程模型、消費端負載均衡策略、消費端集群容錯策略、併發控制原理、Dubbo 網絡協議等;第三部分為實踐篇,主要探討如何使用Arthas 和一些Demo 來為研究Dubbo 框架原理提供方便,並且講解如何基於CompletableFuture 和Netty 模擬RPC 同步與純異步調用。
讀者可以在博文視點官方網站(http://www.broadview.com.cn)下載本書的Demo 源碼。


圖片預覽:

 
  步驟一.
依據網路上的圖書,挑選你所需要的書籍,根據以下步驟進行訂購
選擇產品及數量 結 帳 輸入基本資料 取貨與付款方式
┌───────────────────────────────────────────────────┘
資料確定 確認結帳 訂單編號    

步驟二.
完成付款的程序後,若採用貨到付款等宅配方式,3~7天內 ( 例假日將延期一至兩天 ) 您即可收到圖書。若至分店門市取貨,一週內聯絡取書。

步驟三.
完成購書程序者,可利用 訂單查詢 得知訂單進度。

注意事項.
● 付款方式若為網路刷卡必須等" 2 ~ 3 個工作天"確認款項已收到,才會出貨.如有更改書籍數量請記得按更新購物車,謝謝。

● 大陸出版品封面老舊、磨痕、凹痕等均屬常態,除封面破損、內頁脫落...等較嚴重的狀態外,其餘所有商品將正常出貨。

● 至2018年起,因中國大陸環保政策,部分書籍配件以QR CODE取代光盤音頻mp3或dvd,已無提供實體光盤。如需使用學習配件,請掃描QR CODE 連結至當地網站註冊並通過驗證程序,方可下載使用。造成不便,敬請見諒。

● 我們將保留所有商品出貨權利,如遇缺書情形,訂單未達免運門檻運費需自行負擔。

預訂海外庫存.
商品到貨時間須4週,訂單書籍備齊後方能出貨,如果您有急用書籍,建議與【預訂海外庫存】商品分開訂購。