深入理解Apache Dubbo與實戰
  • 推薦0
  • 收藏3
  • 瀏覽1.5K

深入理解Apache Dubbo與實戰

詣極 , 林琳 (作者) 

  • 書  號:978-7-121-36634-5
  • 出版日期:2019-07-08
  • 頁  數:300
  • 開  本:16(185*235)
  • 出版狀態:上市銷售
紙質版 ¥79.00
本書首先介紹Dubbo的簡史、后續的規劃和整體架構大圖;接著介紹Dubbo環境配置,并基于Dubbo開發第一款應用程序;然后介紹Dubbo內置的常用注冊中心的實現原理,Dubbo擴展點加載的原理和實現,Dubbo的啟動、服務暴露、服務消費和優雅停機的機制,Dubbo中RPC協議細節、編解碼和服務調用實現原理,Dubbo集群容錯、路由和負載均衡機制,Dubbo的擴展點相關知識,Dubbo高級特性的實現和原理,Dubbo常用的Filter的實現原理,Dubbo中新增etcd3注冊中心的實戰內容和Dubbo服務治理平臺的相關知識;最后介紹Dubbo未來生態和Dubbo Mesh的相關知識。
本書適合對Dubbo有一定了解、對Dubbo框架感興趣的讀者,也適合想深入理解Dubbo原理的資深開發者閱讀。
詳細解讀Dubbo框架工作原理和底層機制
展示動手擴展Dubbo特性的實戰場景
商宗海,花名詣極,Apache Dubbo PMC。曾就職于阿里巴巴、有贊,擔任Dubbo框架技術負責人,長期活躍在Dubbo社區?,F就職于螞蟻金服中間件團隊,負責sofa-rpc和云原生方向的產品研發。


林琳,花名景竹,曾就職于華軟集團、遞四方等公司,擔任技術經理、高級架構師等職位?,F就職于螞蟻金服支付寶事業群,負責工程平臺架構工作。
前言
本書的由來
在Apache Dubbo(以下簡稱Dubbo)重新開源之前,Dubbo已經被很多公司廣泛用于生產環境并獲得了良好的反饋,很多公司內部也會建立私有分支自己維護,其中Dubbox就是基于Dubbo分支進行擴展并二次維護的。重新開源后,社區維護的Dubbo版本進行了大量“bug fix”和特性支持,收到了大量Dubbo用戶的支持和參與。編寫本書的想法是在開源后提出來的,因此本書取名《深入理解Apache Dubbo與實戰》。
我最早接觸Dubbo是2015年在參與云基礎設施建設和微服務框架搭建時,那時的Dubbo基本是分布式系統的不二之選。我在使用過程中遇到了不少問題,不得不通過調試Dubbo源碼來解決。在源碼調試過程中,我逐漸理解Dubbo的設計理念,越發驚嘆其架構設計的巧妙,正所謂:優秀的設計萬里挑一。
后來我加入另外一家公司擔任架構師,在基礎架構組負責中間件與框架的研發,也是基于Dubbo等框架做二次開發。此時,我與本書另一位作者詣極成為同事,我們志趣相投,也為編寫本書埋下了伏筆。
2017年,Dubbo經歷了數年的停滯后,終于又重啟維護。我還依稀記得阿里巴巴公司宣布的那天詣極的興奮狀,詣極是首批投入Apache Dubbo開源工作中去的開發者,期間為Apache Dubbo貢獻了眾多特性,如HTTP 2、etcd注冊中心等,現在已經成為Apache Dubbo PMC。
Dubbo在重啟維護后,短時間內有了大量的更新。此時我正就職于螞蟻金服,每天苦于繁重的CRUD。我發現市面上沒有一本系統講解Dubbo的書籍,Dubbo相關的資料大都是一些博客文章,并且內容也相對陳舊。于是我“慫恿”詣極與我一起寫這本書,作為這些年來工作的一個總結,他也欣然答應。
然后就是歷時半年的寫作過程,一波三折。中途有一些朋友加入,又因為各種不可抗拒的原因退出。我和詣極平時的工作都非常飽和,又要關注開源工作,常常焦頭爛額。道雖邇,不行不至;事雖小,不為不成。時間是一點一點擠出來的,最終我們還是堅持完成了本書,并且沒有偏離原計劃太多。由于時間緊迫和能力有限,本書的內容難免有錯漏,讀者的勘誤可以發送到以下電子郵箱:
[email protected][email protected]。
面向的讀者
由于Dubbo重啟維護后,官方的使用文檔已經非常詳細,本書如果再講使用方法就沒有太多的意義,所以一開始就按源碼解析、設計原理說明的方向定位,因此需要讀者有一定的基礎。涉及源碼的講解,注定會有很多地方枯燥乏味,我們在編寫的時候也盡量用自己的語言去提煉總結,讓讀者可以少看代碼。
在開始動筆編寫本書時,Apache Dubbo 2.7正在開發中,考慮到代碼的穩定性,我們最終決定基于公開發布的2.6.5版本(release)來寫。當本書快完成的時候,Apache Dubbo 2.7正式發布了。因此,本書的內容并不是基于最新的代碼的,寫書的速度永遠比不上框架更新的速度,也希望讀者能夠諒解。
本書內容
第1章主要介紹Dubbo的簡史、后續的規劃和整體架構大圖。
第2章主要介紹Dubbo的環境配置和基于Dubbo開發第一款應用程序。
第3章主要介紹Dubbo內置的常用注冊中心的實現原理。
第4章主要介紹Dubbo擴展點加載的原理和實現。
第5章主要介紹Dubbo的配置解析、服務暴露、服務消費和優雅停機的機制。
第6章主要介紹Dubbo的RPC協議細節、編解碼和服務調用的實現原理。
第7章主要介紹Dubbo的集群容錯、路由和負載均衡機制。
第8章主要介紹Dubbo擴展點的相關知識。
第9章主要介紹Dubbo高級特性的實現和原理。
第10章主要介紹Dubbo過濾器的實現原理。
第11章主要介紹Dubbo中新增的etcd3注冊中心的實戰內容。
第12章主要介紹Dubbo服務治理平臺的相關知識。
第13章主要介紹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 誰在使用Dubbo ............................................................................................. 10
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 下載并安裝JDK ............................................................................................. 17
2.1.2 下載并安裝IDE .............................................................................................. 17
2.1.3 下載并配置Maven ......................................................................................... 18
2.1.4 下載并配置ZooKeeper .................................................................................. 18
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 SPI ........................................................................................................... 56
4.1.2 擴展點加載機制的改進 ................................................................................. 57
4.1.3 擴展點的配置規范 ......................................................................................... 59
4.1.4 擴展點的分類與緩存 ..................................................................................... 60
4.1.5 擴展點的特性 ................................................................................................. 61
4.2 擴展點注解 ................................................................................................................. 62
4.2.1 擴展點注解:@SPI ........................................................................................ 62
4.2.2 擴展點自適應注解:@Adaptive ................................................................... 63
4.2.3 擴展點自動激活注解:@Activate ................................................................ 65
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 ChannelHandler ......................................................................................................... 141
6.5.1 核心Handler和線程模型 ............................................................................. 141
6.5.2 Dubbo請求響應Handler .............................................................................. 145
6.5.3 Dubbo心跳Handler ...................................................................................... 148
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 Mock .......................................................................................................................... 185
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 服務提供者過濾器的實現原理 .............................................................................. 233
10.3.1 AccessLogFilter的實現原理 ...................................................................... 233
10.3.2 ExecuteLimitFilter的實現原理 .................................................................. 234
10.3.3 ClassLoaderFilter的實現原理 .................................................................... 235
10.3.4 ContextFilter的實現原理 ........................................................................... 237

本書勘誤

印次
  • 頁碼:5  •  行數:5  •  印次: 1

    在微服務架構中,一個應用會被拆分一個個獨立、可配置、可運行、可維護的子服務……

    應為:

    在微服務架構中,一個應用會被拆分 一個個獨立、可配置、可運行、可維護的子服務……

    王序猿 提交于 2019/8/8 13:18:58
    陳曉猛 確認于 2019/8/8 14:50:28
  • 頁碼:39  •  行數:11  •  印次: 2

    表3-2 中目錄名稱「/dubbo/service/consumers」的存儲值樣例應該為「consumer://192.168.0.1.5002/com.alibaba.demo.Service?key=value&…」

    gallenzhang 提交于 2019/9/17 0:32:04
    陳曉猛 確認于 2019/9/18 10:21:48
  • 頁碼:42  •  行數:8  •  印次: 1

    都會被認為是“事物”操作,應該是“事務”操作。后面的第10行同理。

    邱道長 提交于 2019/8/30 13:55:00
    陳曉猛 確認于 2019/8/30 14:23:56
  • 頁碼:65  •  行數:1  •  印次: 1

    錯誤:我們在代碼清單 4-4 中可以看到,
    應為:4-5

    yanshuojia 提交于 2019/7/31 22:56:03
    陳曉猛 確認于 2019/8/5 13:10:32
  • 頁碼:169  •  行數:3  •  印次: 2

    第三行「以代碼清單7-7的規則為例」,應該是清單7-8。后面第九行,「若以代碼清單7-7」也應該改為清單7-8。

    gallenzhang 提交于 2019/9/21 18:10:50
    陳曉猛 確認于 2019/9/23 9:58:33

讀者評論

  • 什么時候出電子版的?

    kevin0331發表于 2019/7/20 23:39:52
    • 這本書沒有電子版權

      陳曉猛發表于 2019/7/22 7:50:58

圖書類別

相關博文

  • 被Dubbo虐過嗎,反擊開始!

    被Dubbo虐過嗎,反擊開始!

    管理員賬號 2019-07-19

    5 月 21 日,經過一年多的孵化,Apache軟件基金會宣布 Dubbo 正式畢業,成為 Apache 的頂級項目。 從孵化器畢業是一種榮譽,也是另一種開始。Apache Dubbo(以下簡稱Dubbo)是阿里巴巴于于2011年開...

    管理員賬號 2019-07-19
    334 0 0 0

相關圖書

RabbitMQ實戰指南

朱忠華 (作者)

本書從消息中間件的概念和RabbitMQ的歷史切入,主要闡述RabbitMQ的安裝、使用、配置、管理、運維、原理、擴展等方面的細節。本書大致可以分為基礎篇、進階...

¥79.00

Spring Boot 2精髓:從構建小系統到架構分布式大系統

李家智 (作者)

Spring Boot是目前Spring技術體系中炙手可熱的框架之一,既可用于構建業務復雜的企業應用系統,也可以開發高性能和高吞吐量的互聯網應用。Spring ...

¥79.00

架構探險:從零開始寫分布式服務框架

李業兵 李業兵 (作者)

分布式服務框架目前已經是互聯網公司實現SOA服務化架構的必備基礎設施,對于一般的開發而言,自己要獨立實現一個分布式服務框架,還是有相當的難度的。本書圍繞如何從零...

 

Apache Kafka源碼剖析

徐郡明 (作者)

本書以 Kafka 0.10.0 版本源碼為基礎,針對 Kafka的架構設計到實現細節進行詳細闡述。本書共5 章,從 Kafka 的應用場景、源碼環境搭建開始逐...

¥89.00

人人都是架構師:分布式系統架構落地與瓶頸突破

高翔龍 (作者)

本書注重大型網站技術架構方案的落地,以及實戰實施。本書不僅會從宏觀的角度去闡述大型電商網站系統的架構設計,更重要的是,會結合筆者實際的工作經驗,深入剖析大型電商...

¥69.00

重構網絡:SDN架構與實現

李呈 (作者)

身處SDN發展浪潮,筆者真切地感受到了這場技術革命的到來。為了自我總結,也為了幫助他人,因此決定寫這本書。 <br>本書首先介紹了SDN的定義、SDN出現的原因...

¥45.00
澳洲幸运10现场开奖