-
>
全國計算機等級考試最新真考題庫模擬考場及詳解·二級MSOffice高級應用
-
>
決戰行測5000題(言語理解與表達)
-
>
軟件性能測試.分析與調優實踐之路
-
>
第一行代碼Android
-
>
JAVA持續交付
-
>
EXCEL最強教科書(完全版)(全彩印刷)
-
>
深度學習
深入理解RPC框架原理與實現 版權信息
- ISBN:9787121420948
- 條形碼:9787121420948 ; 978-7-121-42094-8
- 裝幀:一般膠版紙
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
深入理解RPC框架原理與實現 本書特色
適讀人群 :本書適合從事互聯網后端開發的人員閱讀。RPC概覽 主要介紹RPC的核心概念、歷史背景、演進過程及技術原理,并且介紹四個常見的RPC框架與使用示例。 RPC框架核心組件 詳細介紹RPC框架的核心組成部分、異構語言下RPC框架的挑戰,以及解決異構語言的方案,并且針對每個核心組成部分介紹業界常見的實現方案。基于這些核心組成部分,還介紹如何編寫一個RPC框架的示例。 服務治理 詳細介紹服務治理的核心內容,包括注冊中心、配置中心、元數據中心、服務路由策略、負載均衡策略、高可用策略及服務可觀測性。
深入理解RPC框架原理與實現 內容簡介
本書由淺入深、詳細地介紹了RPC技術和RPC框架的原理。除此之外,本書還詳細介紹了與RPC框架原理相關的技術,包括遠程通信技術、通信協議、序列化技術、動態代理技術、IDL等。本書首先介紹了RPC技術和RPC框架的發展背景、歷史及演進過程,以加深讀者對RPC技術的理解。然后介紹了常見的RPC框架,讓讀者能夠對這些RPC框架有整體上的了解。接下來將RPC框架的核心組成部分拆開,對這些組成部分逐個進行介紹,并且介紹相關的技術和概念,比如介紹遠程通信方式時,會介紹Socket技術、I/O模型等。本書接著介紹了實現簡易的RPC框架的流程,讓讀者能夠上手實際操作。本書還介紹了RPC框架是如何應對異構語言下的挑戰的,并且介紹了與RPC框架相關的服務治理內容,包括注冊中心、配置中心、元數據中心、服務路由策略、負載均衡策略、高可用策略及服務可觀測性,讓讀者能夠全面地了解RPC框架。
深入理解RPC框架原理與實現 目錄
目錄
第1部分 RPC概覽
第1章 初識RPC 2
1.1 計算機核心處理器簡介 3
1.1.1 單核處理器系統時代 3
1.1.2 多核處理器系統時代 4
1.1.3 多處理器系統時代 5
1.2 IPC簡介 6
1.3 RPC簡介 7
1.4 RPC的發展歷程 10
1.5 RPC核心組成部分 11
1.5.1 服務調用方 12
1.5.2 服務提供方 12
1.5.3 本地存根 12
1.5.4 RPC通信者 13
1.6 RPC調用過程 13
1.6.1 服務暴露的過程 14
1.6.2 服務發現的過程 15
1.6.3 服務引用的過程 16
1.6.4 方法調用的過程 16
第2章 初覽RPC框架 18
2.1 RPC框架簡介 19
2.2 RPC框架發展及市場現狀 21
2.3 Dubbo簡介 25
2.4 gRPC簡介 31
2.5 Thrift簡介 38
2.6 Spring Cloud簡介 44
2.6.1 Spring Cloud項目簡介 45
2.6.2 使用Spring Cloud的組件實現RPC調用的示例 51
2.7 選擇RPC框架的幾個角度 61
第2部分 RPC框架核心組件
第3章 遠程通信方式 68
3.1 遠程通信方式簡介 69
3.1.1 Socket簡介 69
3.1.2 Java對Socket接口的封裝 74
3.1.3 網絡應用程序框架 78
3.2 I/O模型 78
3.3 Java對I/O模型的封裝 81
3.3.1 BIO 81
3.3.2 NIO 82
3.3.3 AIO 93
3.4 遠程通信實現方案之Netty 99
3.4.1 Netty核心組件介紹 102
3.4.2 線程模型 105
3.5 遠程通信實現方案之Mina 111
3.6 遠程通信實現方案之Grizzly 119
第4章 通信協議 127
4.1 標準協議 128
4.2 傳輸層協議 131
4.3 應用層協議 136
4.4 自定義協議簡介 141
4.5 如何設計自定義協議 143
第5章 序列化 147
5.1 序列化和反序列化 148
5.2 文本格式的序列化方案 149
5.2.1 XML格式 150
5.2.2 JSON格式 152
5.3 二進制格式的序列化方案 158
5.4 序列化框架選型 167
第6章 動態代理 170
6.1 動態代理簡介 171
6.2 JDK自帶的動態代理方案 175
6.2.1 JDK實現動態代理的示例 175
6.2.2 通過JDK實現動態代理的原理 177
6.3 CGLib動態代理方案 183
6.3.1 使用CGLib實現動態代理的示例 184
6.3.2 使用CGLib實現動態代理的原理 185
6.4 Javassist動態代理方案 193
6.4.1 使用Javassist實現動態代理的示例 194
6.4.2 使用Javassist實現動態代理的原理 195
第7章 實現一個簡易的RPC框架 203
7.1 實現簡易的RPC框架 204
7.2 實現遠程調用 205
7.3 實現服務治理能力 216
7.4 使用簡易的RPC框架 222
第8章 異構語言應用調用 228
8.1 RPC在異構語言下的挑戰 229
8.2 IDL簡介 230
8.3 Dubbo在跨語言上的解決方案 232
8.3.1 Dubbo服務提供者 233
8.3.2 Dubbo服務消費者 237
8.4 CXF在跨語言上的解決方案 240
8.5 gRPC在跨語言上的解決方案 241
第3部分 服務治理
第9章 注冊中心 244
9.1 注冊中心簡介 245
9.2 CAP模型與ACID、BASE理論 250
9.3 分布式一致性 256
9.4 注冊中心實現方案之Eureka 262
9.5 注冊中心實現方案之ZooKeeper 265
9.6 注冊中心實現方案之Nacos 269
9.7 注冊中心在一致性和可用性之間的抉擇 273
第10章 配置中心 276
10.1 配置中心簡介 277
10.2 配置中心實現方案之Apollo 281
10.2.1 服務端的設計 283
10.2.2 客戶端的設計 285
10.3 配置中心實現方案之Nacos 286
第11章 元數據中心 292
11.1 元數據中心簡介 293
11.2 元數據中心的選型 295
第12章 服務的路由 297
12.1 路由策略 298
12.2 負載均衡策略 302
12.2.1 服務端負載均衡 303
12.2.2 客戶端負載均衡 304
12.3 負載均衡算法 305
12.3.1 隨機算法 306
12.3.2 輪詢算法 306
12.3.3 *少活躍數算法 307
12.3.4 一致性Hash負載均衡算法 308
第13章 分布式系統高可用策略 310
13.1 分布式系統高可用 311
13.2 Hystrix 317
13.3 Resilience4j 320
13.4 Sentinel 324
第14章 服務可觀測性 330
14.1 服務可觀測性簡介 331
14.2 日志記錄 333
14.3 聚合度量 335
14.4 鏈路追蹤 337
深入理解RPC框架原理與實現 節選
前面提到RPC會帶來地址空間被隔離的問題,在遠程調用的過程中,Consumer端的地址空間中任何一個內存地址在Provider端都是沒有意義的。除了內存地址無法匹配,在不同的機器上還可能出現位寬不同、處理器的大小端不同、編譯環境導致的結構體內存布局不同、字符串編碼不同等情況,這些情況都會導致在遠程調用的過程中Consumer端的函數調用無法像本地調用一樣正確匹配到真實的函數實現,從而導致函數調用失敗。所以在遠程調用過程中,Consumer端發起的函數調用讓Provider端精準地知道自己應該執行哪個函數就是必須要解決的問題,而Stub的存在就是為了讓遠程調用像本地調用一樣直接進行函數調用,無須關心地址空間隔離、函數不匹配等問題。Stub的職責就是進行類型和參數轉化。如果把Consumer端和Provider端比作兩個不同語種的人,那么Stub就類似于翻譯員,雖然Consumer端和Provider端的語言不同,但是經過Stub處理后,兩端還是能夠正常地傳達信息并進行溝通。 本地存根(Stub)分為服務調用方的本地存根和服務提供方的本地存根。服務調用方的本地存根與服務消費者都屬于Consumer端,它們存在于同一臺機器上,服務調用方的本地存根會接收Consumer的函數調用,本地存根會解析函數調用的函數名、參數等信息,整理并且組裝這些數據,然后將這些數據按照定義好的協議進行序列化,打包成可傳輸的消息,交給RPCRuntime。服務調用方的本地存根除了會處理服務消費者提供的方法、參數、方法參數類型等數據,還會處理服務提供方返回的結果,它會將RPCRuntime返回的數據包反序列化成服務調用方所需要的數據結果并傳遞給服務消費方。就像是兩國領導人談話時某國的領導人需要向翻譯員傳達自己想要講的話,而翻譯員需要將這些話翻譯成對方國家的語言進行表達,并且將對方國家的領導人的講話內容翻譯后傳達給本國的領導人。其中序列化和協議會分別在第5章和第6章做詳細的介紹。 從服務消費方的角度來看,Stub隱藏了遠程調用的實現細節,就像是遠程服務的一個代理對象,可以讓服務消費方感覺調用遠程服務方法就像調用本地方法一樣。服務提供方的本地存根與服務提供方都屬于Provider端,它們一起存在于同一臺機器上。當Provider端的RPCRuntime收到請求包后,交由服務提供方的本地存根進行參數等數據的轉化。服務提供方的本地存根會重新轉換客戶端傳遞的數據,以便在Provider端的機器上找到對應的函數,傳遞正確的參數數據,*終正確地執行真實函數的調用。等函數執行完成后,服務提供方會將執行結果返回給服務提供方的本地存根,由本地存根再將結果數據序列化、打包,*后交給RPCRuntime。服務提供方的本地存根與服務調用方的本地存根一樣都是充當了翻譯員的角色。還是用上面兩國領導人交談的例子,只是兩國領導人各自有自己的翻譯員而已。
深入理解RPC框架原理與實現 作者簡介
Apache Dubbo Committer,ServiceMesher中文社區成員,熱愛分享,熱衷開源,專注于服務化、分布式、云原生等技術領域,對這些技術領域有著深入的研究。
- >
我從未如此眷戀人間
- >
二體千字文
- >
名家帶你讀魯迅:故事新編
- >
推拿
- >
中國人在烏蘇里邊疆區:歷史與人類學概述
- >
巴金-再思錄
- >
莉莉和章魚
- >
回憶愛瑪儂