互聯網架構不斷演化,經歷了從集中式架構到分布式架構,再到云原生架構的過程。云原生因能解決傳統應用升級緩慢、架構臃腫、不能快速迭代等問題而成為未來云端應用的目標。本書首先介紹了架構演化過程及云原生的概念,讓讀者對基礎概念能有一個準確的了解。接著闡述分布式、服務化、Observability、容器調度、Service Mesh、云數據庫等體系及其原理,并介紹了與其相關的Dubbo、Spring Cloud、SkyWalking、Kubernetes、Istio開源解決方案。最后深度揭秘開源分布式數據庫生態圈Sharding-Sphere的設計與實現。
張亮,京東金融數據研發負責人。熱愛開源,致力于將基礎技術框架從業務耦合中分離,提供純粹、輕量級的技術解決方案,目前主導兩個開源項目Elastic-Job和Sharding-Sphere(Sharding-JDBC)。擅長以Java為主分布式架構以及以Kubernetes和Mesos為主的云平臺方向,推崇優雅代碼,對如何寫出具有展現力的代碼有較多研究。目前主要精力投入在將Sharding-Sphere打造為業界一流的金融級數據解決方案之上。
第1章 云原生 1
1.1 互聯網架構變遷 2
1.1.1 互聯網架構的核心問題 2
1.1.2 從集中式架構到分布式架構 5
1.1.3 從分布式架構到云原生架構 10
1.2 什么是云原生 15
1.2.1 概述 15
1.2.2 云原生與十二要素 16
1.2.3 十二要素進階 23
1.2.4 云原生與CNCF 24
第2章 遠程通信 41
2.1 通信方式 41
2.1.1 通信協議 42
2.1.2 I/O模型 51
2.1.3 Java中的I/O 53
2.2 序列化 66
2.2.1 文本序列化 67
2.2.2 二進制Java序列化 68
2.2.3 二進制異構語言序列化 71
2.3 遠程調用 78
2.3.1 核心概念 78
2.3.2 Java遠程方法調用 79
2.3.3 異構語言RPC框架gRPC 82
第3章 配置 89
3.1 本地配置 89
3.2 配置集中化 90
3.3 配置中心和注冊中心 91
3.4 讀性能 92
3.5 變更實時性 93
3.6 可用性 94
3.7 數據一致性 96
第4章 服務治理 97
4.1 服務發現 97
4.1.1 服務發現概述 97
4.1.2 ZooKeeper 100
4.1.3 Eureka 109
4.2 負載均衡 112
4.2.1 服務端負載均衡 112
4.2.2 客戶端負載均衡 115
4.3 限流 118
4.3.1 限流算法 119
4.3.2 限流實現方案 121
4.3.3 限流的維度與粒度 129
4.4 熔斷 131
4.4.1 概述 131
4.4.2 熔斷器模式 132
4.4.3 Hystrix 133
第5章 觀察分布式服務 135
5.1 層次劃分 136
5.2 核心概念 136
5.3 分布式追蹤 138
5.3.1 概述 138
5.3.2 常見的開源解決方案 139
5.4 應用性能管理與可觀察性平臺 140
5.5 Apache SkyWalking 142
5.5.1 項目定位 142
5.5.2 SkyWalking 5核心架構 143
5.5.3 SkyWalking 5公開案例 146
5.5.4 SkyWalking 6可觀察性分析平臺 147
第6章 侵入式服務治理方案 157
6.1 Dubbo 157
6.1.1 Dubbo概述 158
6.1.2 核心流程 160
6.1.3 注冊中心 160
6.1.4 負載均衡 162
6.1.5 遠程通信 163
6.1.6 限流 164
6.1.7 治理中心 165
6.1.8 監控中心 165
6.1.9 DubboX的擴展 166
6.2 Spring Cloud 168
6.2.1 概述 168
6.2.2 開發腳手架Spring Boot 172
6.2.3 服務發現 174
6.2.4 負載均衡 176
6.2.5 熔斷 178
6.2.6 遠程通信 179
第7章 云原生生態的基石Kubernetes 181
7.1 Kubernetes架構 182
7.2 分層設計理念及架構模型 183
7.3 設計哲學 184
7.4 Kubernetes中的原語 185
7.4.1 Kubernetes中的對象 185
7.4.2 對象的期望狀態與實際狀態 186
7.4.3 描述Kubernetes對象 187
7.4.4 服務發現與負載均衡 188
7.4.5 安全性與權限管理 189
7.4.6 Sidecar設計模式 190
7.5 應用Kubernetes 190
7.6 Kubernetes與云原生生態 192
7.6.1 下一代云計算標準 192
7.6.2 當前存在的問題 192
7.6.3 未來趨勢 193
第8章 跨語言服務治理方案Service Mesh 195
8.1 Service Mesh概述 195
8.1.1 Service Mesh的由來 195
8.1.2 Service Mesh的定義 196
8.1.3 Service Mesh詳解 197
8.2 Service Mesh演進歷程 200
8.2.1 遠古時代的案例 200
8.2.2 微服務時代的現狀 201
8.2.3 侵入式框架的痛點 202
8.2.4 解決問題的思路 206
8.2.5 Proxy模式的探索 207
8.2.6 Sidecar模式的出現 208
8.2.7 第一代Service Mesh 209
8.2.8 第二代Service Mesh 210
8.3 Service Mesh市場競爭 212
8.3.1 Service Mesh的萌芽期 212
8.3.2 急轉直下的Linkerd 212
8.3.3 波瀾不驚的Envoy 214
8.3.4 背負使命的Istio 214
8.3.5 背水一戰的Buoyant 215
8.3.6 其他參與者 217
8.3.7 Service Mesh的國內發展情況 219
8.4 Istio 220
8.4.1 Istio概述 220
8.4.2 架構和核心組件 222
第9章 云原生數據架構 232
9.1 關系型數據庫尚能飯否 232
9.1.1 優勢 233
9.1.2 不足 234
9.2 未達預期的NoSQL 235
9.2.1 鍵值數據庫 235
9.2.2 文檔數據庫 236
9.2.3 列族數據庫 236
9.3 冉冉升起的NewSQL 237
9.3.1 新架構 238
9.3.2 透明化分片中間件 238
9.3.3 云數據庫 239
9.4 云原生數據庫中間件的核心功能 239
9.4.1 數據分片 239
9.4.2 分布式事務 258
9.4.3 數據庫治理 265
第10章 分布式數據庫中間件生態圈ShardingSphere 267
10.1 緣起 267
10.1.1 內部應用框架 268
10.1.2 開源歷程 269
10.2 核心功能 271
10.2.1 數據分片 272
10.2.2 分布式事務 301
10.2.3 數據庫治理 307
10.3 Sharding-JDBC 310
10.3.1 概述 310
10.3.2 使用說明 311
10.4 Sharding-Proxy 316
10.4.1 概述 316
10.4.2 使用說明 317
10.5 Database Mesh 317
10.5.1 概述 317
10.5.2 Service Mesh回顧 318
10.5.3 Database Mesh與Service Mesh的異同 319
10.5.4 Sharding-Sidecar 320
10.6 未來規劃 321