第1章 應用架構演進 1
1.1 傳統垂直應用架構 2
1.1.1 垂直應用架構介紹 2
1.1.2 垂直應用架構麵臨的挑戰 4
1.2 RPC架構 6
1.2.1 RPC框架原理 6
1.2.2 最簡單的RPC框架實現 8
1.2.3 業界主流RPC框架 14
1.2.4 RPC框架麵臨的挑戰 17
1.3 SOA服務化架構 18
1.3.1 麵嚮服務設計的原則 18
1.3.2 服務治理 19
1.4 微服務架構 21
1.4.1 什麼是微服務 21
1.4.2 微服務架構對比SOA 22
1.5 總結 23
第2章 分布式服務框架入門 25
2.1 分布式服務框架誕生背景 26
2.1.1 應用從集中式走嚮分布式 26
2.1.2 亟需服務治理 28
2.2 業界分布式服務框架介紹 29
2.2.1 阿裏Dubbo 30
2.2.2 淘寶HSF 33
2.2.3 亞馬遜Coral Service 35
2.3 分布式服務框架設計 36
2.3.1 架構原理 36
2.3.2 功能特性 37
2.3.3 性能特性 39
2.3.4 可靠性 39
2.3.5 服務治理 40
2.4 總結 41
第3章 通信框架 42
3.1 關鍵技術點分析 43
3.1.1 長連接還是短連接 43
3.1.2 BIO還是NIO 43
3.1.3 自研還是選擇開源NIO框架 46
3.2 功能設計 47
3.2.1 服務端設計 48
3.2.2 客戶端設計 50
3.3 可靠性設計 53
3.3.1 鏈路有效性檢測 54
3.3.2 斷連重連機製 56
3.3.3 消息緩存重發 57
3.3.4 資源優雅釋放 58
3.4 性能設計 59
3.4.1 性能差的三宗罪 59
3.4.2 通信性能三原則 60
3.4.3 高性能之道 61
3.5 最佳實踐 61
3.6 總結 64
第4章 序列化與反序列化 65
4.1 幾個關鍵概念澄清 66
4.1.1 序列化與通信框架的關係 66
4.1.2 序列化與通信協議的關係 66
4.1.3 是否需要支持多種序列化方式 67
4.2 功能設計 67
4.2.1 功能豐富度 67
4.2.2 跨語言支持 68
4.2.3 兼容性 69
4.2.4 性能 70
4.3 擴展性設計 71
4.3.1 內置的序列化/反序列化功能類 71
4.3.2 反序列化擴展 72
4.3.3 序列化擴展 75
4.4 最佳實踐 77
4.4.1 接口的前嚮兼容性規範 77
4.4.2 高並發下的穩定性 78
4.5 總結 78
第5章 協議棧 79
5.1 關鍵技術點分析 80
5.1.1 是否必須支持多協議 80
5.1.2 公有協議還是私有協議 80
5.1.3 集成開源還是自研 81
5.2 功能設計 82
5.2.1 功能描述 82
5.2.2 通信模型 82
5.2.3 協議消息定義 84
5.2.4 協議棧消息序列化支持的字段類型 85
5.2.5 協議消息的序列化和反序列化 86
5.2.6 鏈路創建 89
5.2.7 鏈路關閉 90
5.3 可靠性設計 90
5.3.1 客戶端連接超時 90
5.3.2 客戶端重連機製 91
5.3.3 客戶端重復握手保護 91
5.3.4 消息緩存重發 92
5.3.5 心跳機製 92
5.4 安全性設計 92
5.5 最佳實踐—協議的前嚮兼容性 94
5.6 總結 95
第6章 服務路由 96
6.1 透明化路由 97
6.1.1 基於服務注冊中心的訂閱發布 97
6.1.2 消費者緩存服務提供者地址 98
6.2 負載均衡 98
6.2.1 隨機 98
6.2.2 輪循 99
6.2.3 服務調用時延 99
6.2.4 一緻性哈希 100
6.2.5 粘滯連接 101
6.3 本地路由優先策略 102
6.3.1 injvm模式 102
6.3.2 innative模式 102
6.4 路由規則 103
6.4.1 條件路由規則 103
6.4.2 腳本路由規則 104
6.5 路由策略定製 105
6.6 配置化路由 106
6.7 最佳實踐—多機房路由 107
6.8 總結 108
第7章 集群容錯 109
7.1 集群容錯場景 110
7.1.1 通信鏈路故障 110
7.1.2 服務端超時 111
7.1.3 服務端調用失敗 111
7.2 容錯策略 112
7.2.1 失敗自動切換(Failover) 112
7.2.2 失敗通知(Failback) 113
7.2.3 失敗緩存(Failcache) 113
7.2.4 快速失敗(Failfast) 114
7.2.5 容錯策略擴展 114
7.3 總結 115
第8章 服務調用 116
8.1 幾個誤區 117
8.1.1 NIO就是異步服務 117
8.1.2 服務調用天生就是同步的 118
8.1.3 異步服務調用性能更高 120
8.2 服務調用方式 120
8.2.1 同步服務調用 120
8.2.2 異步服務調用 121
8.2.3 並行服務調用 125
8.2.4 泛化調用 129
8.3 最佳實踐 130
8.4 總結 131
第9章 服務注冊中心 132
9.1 幾個概念 133
9.1.1 服務提供者 133
9.1.2 服務消費者 133
9.1.3 服務注冊中心 133
9.2 關鍵功能特性設計 134
9.2.1 支持對等集群 135
9.2.2 提供CRUD接口 136
9.2.3 安全加固 136
9.2.4 訂閱發布機製 137
9.2.5 可靠性 138
9.3 基於ZooKeeper的服務注冊中心設計 139
9.3.1 服務訂閱發布流程設計 139
9.3.2 服務健康狀態檢測 141
9.3.3 對等集群防止單點故障 142
9.3.4 變更通知機製 144
9.4 總結 144
第10章 服務發布和引用 145
10.1 服務發布設計 146
10.1.1 服務發布的幾種方式 146
10.1.2 本地實現類封裝成代理 148
10.1.3 服務發布成指定協議 148
10.1.4 服務提供者信息注冊 149
10.2 服務引用設計 150
10.2.1 本地接口調用轉換成遠程服務調用 150
10.2.2 服務地址本地緩存 151
10.2.3 遠程服務調用 151
10.3 最佳實踐 152
10.3.1 對等設計原則 152
10.3.2 啓動順序問題 153
10.3.3 同步還是異步發布服務 153
10.3.4 警惕網絡風暴 154
10.3.5 配置擴展 154
10.4 總結 156
第11章 服務灰度發布 157
11.1 服務灰度發布流程設計 158
11.1.1 灰度環境準備 158
11.1.2 灰度規則設置 159
11.1.3 灰度規則下發 160
11.1.4 灰度路由 161
11.1.5 失敗迴滾 162
11.1.6 灰度發布總結 163
11.2 總結 163
第12章 參數傳遞 164
12.1 內部傳參 165
12.1.1 業務內部參數傳遞 165
12.1.2 服務框架內部參數傳遞 168
12.2 外部傳參 169
12.2.1 通信協議支持 169
12.2.2 傳參接口定義 170
12.3 最佳實踐 171
12.3.1 防止參數互相覆蓋 171
12.3.2 參數生命周期管理 171
12.4 總結 172
第13章 服務多版本 173
13.1 服務多版本管理設計 174
13.1.1 服務版本號管理 174
13.1.2 服務提供者 175
13.1.3 服務消費者 175
13.1.4 基於版本號的服務路由 176
13.1.5 服務熱升級 177
13.2 與OSGi的對比 178
13.2.1 模塊化開發 179
13.2.2 插件熱部署和熱升級 184
13.2.3 不使用OSGi的其他理由 185
13.3 總結 185
第14章 流量控製 186
14.1 靜態流控 187
14.1.1 傳統靜態流控設計方案 187
14.1.2 傳統方案的缺點 188
14.1.3 動態配額分配製 188
14.1.4 動態配額申請製 190
14.2 動態流控 191
14.2.1 動態流控因子 192
14.2.2 分級流控 192
14.3 並發控製 193
14.3.1 服務端全局控製 193
14.3.2 服務消費者流控 194
14.4 連接控製 195
14.4.1 服務端連接數流控 195
14.4.2 服務消費者連接數流控 195
14.5 並發和連接控製算法 195
14.6 總結 197
第15章 服務降級 198
15.1 屏蔽降級 199
15.1.1 屏蔽降級的流程 199
15.1.2 屏蔽降級的設計實現 200
15.2 容錯降級 202
15.2.1 容錯降級的工作原理 202
15.2.2 運行時容錯降級 204
15.3 業務層降級 205
15.4 總結 205
第16章 服務優先級調度 207
16.1 設置服務優先級 208
16.2 綫程調度器方案 209
16.3 Java優先級隊列 210
16.4 加權優先級隊列 211
16.5 服務遷入遷齣 212
16.6 總結 213
第17章 服務治理 214
17.1 服務治理技術的曆史變遷 215
17.1.1 SOA Governance 215
17.1.2 分布式服務框架服務治理 217
17.1.3 AWS雲端微服務治理 217
17.2 應用服務化後麵臨的挑戰 218
17.2.1 跨團隊協作問題 219
17.2.2 服務的上下綫管控 220
17.2.3 服務安全 220
17.2.4 服務SLA保障 221
17.2.5 故障快速定界定位 221
17.3 服務治理 222
17.3.1 服務治理架構設計 223
17.3.2 運行態服務治理功能設計 225
17.3.3 綫下服務治理 232
17.3.4 安全和權限管理 234
17.4 總結 237
第18章 分布式消息跟蹤 239
18.1 業務場景分析 240
18.1.1 故障的快速定界定位 240
18.1.2 調用路徑分析 241
18.1.3 調用來源和去嚮分析 242
18.2 分布式消息跟蹤係統設計 242
18.2.1 係統架構 243
18.2.2 埋點日誌 244
18.2.3 采樣率 247
18.2.4 采集和存儲埋點日誌 248
18.2.5 計算和展示 249
18.2.6 調用鏈擴展 251
18.3 總結 251
第19章 可靠性設計 253
19.1 服務狀態檢測 254
19.1.1 基於服務注冊中心狀態檢測 254
19.1.2 鏈路有效性狀態檢測機製 255
19.2 服務健康度檢測 256
19.3 服務故障隔離 257
19.3.1 進程級故障隔離 257
19.3.2 VM級故障隔離 259
19.3.3 物理機故障隔離 260
19.3.4 機房故障隔離 261
19.4 其他可靠性特性 262
19.4.1 服務注冊中心 262
19.4.2 監控中心 262
19.4.3 服務提供者 262
19.5 總結 263
第20章 微服務架構 264
20.1 微服務架構産生的曆史背景 265
20.1.1 研發成本挑戰 265
20.1.2 運維成本高 267
20.1.3 新需求上綫周期長 268
20.2 微服務架構帶來的改變 268
20.2.1 應用解耦 268
20.2.2 分而治之 270
20.2.3 敏捷交付 271
20.3 微服務架構解析 271
20.3.1 微服務劃分原則 272
20.3.2 開發微服務 272
20.3.3 基於Docker容器部署微服務 274
20.3.4 治理和運維微服務 277
20.3.5 特點總結 278
20.4 總結 279
第21章 服務化最佳實踐 280
21.1 性能和時延問題 281
21.1.1 RPC框架高性能設計 281
21.1.2 業務最佳實踐 285
21.2 事務一緻性問題 286
21.2.1 分布式事務設計方案 287
21.2.2 分布式事務優化 288
21.3 研發團隊協作問題 289
21.3.1 共用服務注冊中心 290
21.3.2 直連提供者 290
21.3.3 多團隊進度協同 291
21.3.4 服務降級和Mock測試 291
21.3.5 協同調試問題 292
21.3.6 接口前嚮兼容性 292
21.4 總結 292
· · · · · · (
收起)
評分
☆☆☆☆☆
看着挺厚,实际上干货不多。 该详细的地方不细讲,内容跨度大,太过空泛,初学者看的云里雾里。 没意义的东西讲了一堆,看的出来作者想讲的东西很多,但是总感觉分不清重点。 可以按照本书弄出点东西,但是细节不明,还需要额外的查找很多资料。 有短评说“泛泛之谈,和上本书一...
評分
☆☆☆☆☆
看着挺厚,实际上干货不多。 该详细的地方不细讲,内容跨度大,太过空泛,初学者看的云里雾里。 没意义的东西讲了一堆,看的出来作者想讲的东西很多,但是总感觉分不清重点。 可以按照本书弄出点东西,但是细节不明,还需要额外的查找很多资料。 有短评说“泛泛之谈,和上本书一...
評分
☆☆☆☆☆
看着挺厚,实际上干货不多。 该详细的地方不细讲,内容跨度大,太过空泛,初学者看的云里雾里。 没意义的东西讲了一堆,看的出来作者想讲的东西很多,但是总感觉分不清重点。 可以按照本书弄出点东西,但是细节不明,还需要额外的查找很多资料。 有短评说“泛泛之谈,和上本书一...
評分
☆☆☆☆☆
看着挺厚,实际上干货不多。 该详细的地方不细讲,内容跨度大,太过空泛,初学者看的云里雾里。 没意义的东西讲了一堆,看的出来作者想讲的东西很多,但是总感觉分不清重点。 可以按照本书弄出点东西,但是细节不明,还需要额外的查找很多资料。 有短评说“泛泛之谈,和上本书一...
評分
☆☆☆☆☆
看着挺厚,实际上干货不多。 该详细的地方不细讲,内容跨度大,太过空泛,初学者看的云里雾里。 没意义的东西讲了一堆,看的出来作者想讲的东西很多,但是总感觉分不清重点。 可以按照本书弄出点东西,但是细节不明,还需要额外的查找很多资料。 有短评说“泛泛之谈,和上本书一...