本書從搭建單體架構遇到的瓶頸開始,通過真實案例介紹從單體架構轉型為微服務架構及中臺架構過程中遇到的困難、問題與具體解決方法。全書共計9章,前3章以案例和原理為基礎,介紹微服務的優(yōu)劣勢及其使用場景;第4~6章描述如何基于單體架構搭建和優(yōu)化微服務架構;第7~8章介紹如何掌握測試、部署交付流程等軟件工程中的各個關鍵環(huán)節(jié)和核心要素;第9章講解在多元化業(yè)務場景下如何構建中臺架構,以實現(xiàn)通用能力的下沉,從而形成共享服務,達到資源使用率的最大化。 本書適合技術管理者、架構師和有一定開發(fā)基礎的技術人員閱讀,尤其適合已進入或即將進入微服務架構和中臺架構領域的相關人員閱讀。希望本書能為讀者提供一些技術路線上的啟發(fā)和指引,幫其少走彎路。
在上海若雅軟件系統(tǒng)有限公司擔任技術總監(jiān),負責工業(yè)互聯(lián)網(wǎng)和大數(shù)據(jù);諸葛天下(北京)信息技術有限公司擔任上海研發(fā)中心負責人,負責車主端項目;鑫涌算力信息科技(上海)有限公司擔任技術總監(jiān)兼首席架構師,負責項目整體的技術架構和人員管理2019 Dubbo社區(qū)開發(fā)者日活動講師、南京中臺大會講師2018 QCon講師
第1章 從單體架構開始 1
1.1 單體應用優(yōu)化之路 2
1.1.1 應用無狀態(tài) 3
1.1.2 數(shù)據(jù)讀/寫分離 4
1.1.3 分庫分表 5
1.2 比性能更可怕的問題 7
1.3 微服務框架選型 8
1.3.1 總體架構對比 9
1.3.2 編程方式對比 10
1.4 第一次失敗的微服務重構 10
第2章 服務拆分與工程劃分 14
2.1 實施微服務架構的前置條件 15
2.1.1 思想統(tǒng)一 15
2.1.2 充分培訓 16
2.1.3 標準化的工程 17
2.1.4 自動化部署 18
2.2 服務拆分的角度和原則 19
2.2.1 服務拆分的角度 20
2.2.2 服務拆分的原則 21
2.3 服務拆分案例剖析 23
2.4 服務工具化替代文檔約束 26
2.5 微服務的數(shù)據(jù)請求模型 31
2.6 日志收集和控制 33
第3章 微服務模式開發(fā) 39
3.1 服務治理的核心概念 40
3.1.1 分布式系統(tǒng) 40
3.1.2 RPC框架 43
3.1.3 服務治理 44
3.2 注冊中心簡介 47
3.2.1 ZooKeeper 47
3.2.2 Nacos 51
3.3 PROVIDER的配置與發(fā)布 53
3.4 CONSUMER的配置 56
3.5 對負載均衡策略的選擇 58
3.6 DUBBO的常用特性 64
3.6.1 服務的多版本管理 65
3.6.2 上下文信息 66
3.6.3 隱式傳參 67
3.7 SPI原理介紹 67
3.7.1 Java SPI的執(zhí)行流程 68
3.7.2 Dubbo SPI的執(zhí)行流程 70
3.7.3 Dubbo SPI原理解析 74
3.8 FILTER的擴展使用場景 77
3.8.1 Dubbo Filter的執(zhí)行過程 77
3.8.2 Dubbo Filter的使用場景 81
3.9 DUBBO服務發(fā)布和調用分析 85
3.9.1 標簽解析 87
3.9.2 服務注冊和發(fā)布流程 88
3.9.3 服務引用流程和服務調用流程 91
第4章 實施微服務架構的全過程 94
4.1 前后端分離 95
4.2 服務無狀態(tài)化 96
4.3 統(tǒng)一認證服務 97
4.3.1 令牌方式 98
4.3.2 JWT方式 100
4.4 微服務設計模式 105
4.5 微服務實戰(zhàn)詳解 106
4.5.1 需求背景 107
4.5.2 技術選型 108
4.5.3 設計數(shù)據(jù)庫表 110
4.5.4 代碼結構模型 114
4.5.5 服務發(fā)布上線 120
4.6 線上問題及解決方案 122
4.6.1 服務線程池滿 122
4.6.2 數(shù)據(jù)庫的CPU占用率飚高 124
4.6.3 無止境的循環(huán)依賴 125
第5章 微服務進階優(yōu)化 126
5.1 緩存分類 127
5.1.1 CDN緩存 128
5.1.2 本地緩存 129
5.1.3 分布式緩存 135
5.2 微服務緩存優(yōu)化 137
5.2.1 單級緩存 137
5.2.2 多級緩存 138
5.2.3 緩存管理策略 140
5.3 串行轉并行 144
5.3.1 串行、并行的概念 144
5.3.2 將串行調用轉為并行調用的方法 145
5.3.3 案例實戰(zhàn) 147
5.4 服務的熔斷與降級 150
5.4.1 熔斷器的工作原理 150
5.4.2 服務降級的原理 152
5.4.3 Hystrix詳解 153
5.4.4 Sentinel詳解 158
5.4.5 熔斷器與Dubbo的集成 165
5.4.6 狀態(tài)監(jiān)控 168
5.5 限流 170
5.5.1 限流算法 170
5.5.2 如何進行限流 171
5.5.3 單機限流 171
5.5.4 分布式限流 172
5.5.5 混合限流 174
5.6 接口的冪等性 174
5.6.1 為什么需要冪等性 175
5.6.2 如何保證接口的冪等性 175
5.6.3 冪等實戰(zhàn) 179
5.7 配置中心 180
5.7.1 常見的配置方式 180
5.7.2 配置中心 181
5.7.3 案例實戰(zhàn) 182
5.7.4 案例說明 183
5.8 消息隊列 183
5.8.1 為什么使用消息隊列 183
5.8.2 消息隊列的使用場景 185
5.9 分布式事務 189
5.9.1 事務的特性 189
5.9.2 分布式事務方案 191
第6章 億級流量網(wǎng)關開發(fā)實戰(zhàn) 200
6.1 為什么使用網(wǎng)關 201
6.1.1 網(wǎng)關的職責和工作原理 202
6.1.2 核心功能 203
6.2 網(wǎng)關的高可用性設計 207
6.2.1 高可用性的衡量標準 207
6.2.2 影響系統(tǒng)高可用性的因素 209
6.2.3 提升系統(tǒng)可用性的常用方法 209
6.3 從零開始自研高性能異步網(wǎng)關 211
6.3.1 API協(xié)議的制定 211
6.3.2 API的注冊與發(fā)布 211
6.3.3 異步化請求 215
6.3.4 泛化調用 220
6.3.5 功能插件化 223
6.3.6 請求快照 226
6.3.7 API生命周期 227
6.4 網(wǎng)關優(yōu)化 228
6.4.1 資源隔離 228
6.4.2 業(yè)務線程分離 230
6.4.3 Epoll加速 231
6.4.4 高速緩存 232
6.4.5 自恢復能力 234
6.5 自研網(wǎng)關所遇到的難題 234
6.5.1 網(wǎng)關找不到服務提供者 235
6.5.2 多余的class字段 236
6.5.3 錯誤傳值 236
6.5.4 日期格式異常 237
6.5.5 自定義異常失效 238
6.5.6 源碼修改如何集成 239
第7章 微服務之服務測試的演進 242
7.1 測試模型的演進 243
7.1.1 倒三角測試模型 243
7.1.2 金字塔測試模型 244
7.1.3 橄欖球測試模型 245
7.1.4 契約測試模型 246
7.2 微服務架構的測試流程 247
7.2.1 測試策略 247
7.2.2 單元測試 249
7.2.3 API測試 252
7.2.4 服務框架測試 254
7.3 構建契約測試平臺 255
7.3.1 測試面臨的阻礙 255
7.3.2 契約測試的核心思想 258
7.3.3 自研契約測試平臺 260
7.3.4 數(shù)據(jù)采集流程 264
7.3.5 契約測試的核心代碼 269
7.3.6 契約驗證流程 277
7.4 混沌工程之問題注入 280
7.4.1 理解混沌工程 281
7.4.2 如何實施混沌實驗 283
7.4.3 CPU滿載實驗 284
7.4.4 磁盤寫滿實驗 285
7.4.5 內(nèi)存負載實驗 286
7.4.6 數(shù)據(jù)庫調用延時實驗 286
7.4.7 Redis調用延時實驗 287
7.4.8 Dubbo服務延時實驗 288
7.4.9 Dubbo線程池滿實驗 289
7.4.10 混沌實驗的可視化 290
第8章 容量預估與服務上線 291
8.1 持續(xù)集成和持續(xù)交付 292
8.1.1 為什么需要持續(xù)集成和持續(xù)交付 292
8.1.2 持續(xù)集成和持續(xù)交付的流程 296
8.1.3 搭建持續(xù)集成平臺 301
8.1.4 持續(xù)集成項目實戰(zhàn) 324
8.2 灰度發(fā)布 337
8.2.1 灰度發(fā)布介紹 338
8.2.2 灰度發(fā)布的流程 340
8.2.3 灰度發(fā)布實戰(zhàn) 343
8.3 搭建全鏈路壓測平臺 348
8.3.1 實施全鏈路壓測的原則 349
8.3.2 流量染色與數(shù)據(jù)隔離 351
8.3.3 如何生成壓測流量 353
8.3.4 全鏈路壓測實戰(zhàn) 355
8.4 線上容量的預估 367
8.4.1 容量預估的參考指標 368
8.4.2 硬件選型 370
8.4.3 容量預估實戰(zhàn) 371
第9章 中臺架構設計 376
9.1 什么是中臺 377
9.1.1 研發(fā)亂象 377
9.1.2 中臺的定義 379
9.1.3 中臺的分類 380
9.1.4 企業(yè)是否需要中臺 381
9.1.5 中臺對企業(yè)的價值 382
9.2 業(yè)務中臺的搭建步驟 382
9.2.1 高管的介入決定成敗 382
9.2.2 獨立中臺的產(chǎn)品經(jīng)理 385
9.2.3 獨立中臺的技術團隊 389
9.2.4 需求邊界管理 390
9.2.5 業(yè)務中臺的架構設計 391
9.3 業(yè)務中臺實戰(zhàn) 392
9.3.1 需求分析 393
9.3.2 架構實現(xiàn) 395
9.3.3 業(yè)務流程 396
9.3.4 業(yè)務線接入 399
9.4 中臺的績效考核標準 401
9.5 中臺的弊端 403
9.5.1 不同的業(yè)務線,需求不具備共性 403
9.5.2 需求的優(yōu)先級被降低 403
9.5.3 項目組溝通難 404
9.5.4 業(yè)務線被動升級 405
9.6 實戰(zhàn)總結 406