架構演變實戰:從單體到微服務再到中台
內容描述
本書從搭建單體架構遇到的瓶頸開始,通過真實案例介紹從單體架構轉型為微服務架構及中台架構過程中遇到的困難、問題與具體解決方法。全書共計9章,前3章以案例和原理為基礎,介紹微服務的優劣勢及其使用場景;第4~6章描述如何基於單體架構搭建和優化微服務架構;第7~8章介紹如何掌握測試、部署交付流程等軟件工程中的各個關鍵環節和核心要素;第9章講解在多元化業務場景下如何構建中台架構,以實現通用能力的下沉,從而形成共享服務,達到資源使用率的最大化。 本書適合技術管理者、架構師和有一定開發基礎的技術人員閱讀,尤其適合已進入或即將進入微服務架構和中台架構領域的相關人員閱讀。希望本書能為讀者提供一些技術路線上的啟發和指引,幫其少走彎路。
目錄大綱
第1章 從單體架構開始 1
1.1 單體應用優化之路 2
1.1.1 應用無狀態 3
1.1.2 數據讀/寫分離 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 思想統一 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 微服務的數據請求模型 31
2.6 日誌收集和控制 33
第3章 微服務模式開發 39
3.1 服務治理的核心概念 40
3.1.1 分佈式系統 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的配置與發布 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的執行流程 68
3.7.2 Dubbo SPI的執行流程 70
3.7.3 Dubbo SPI原理解析 74
3.8 FILTER的擴展使用場景 77
3.8.1 Dubbo Filter的執行過程 77
3.8.2 Dubbo Filter的使用場景 81
3.9 DUBBO服務發布和調用分析 85
3.9.1 標籤解析 87
3.9.2 服務註冊和發布流程 88
3.9.3 服務引用流程和服務調用流程 91
第4章 實施微服務架構的全過程 94
4.1 前後端分離 95
4.2 服務無狀態化 96
4.3 統一認證服務 97
4.3.1 令牌方式 98
4.3.2 JWT方式 100
4.4 微服務設計模式 105
4.5 微服務實戰詳解 106
4.5.1 需求背景 107
4.5.2 技術選型 108
4.5.3 設計數據庫表 110
4.5.4 代碼結構模型 114
4.5.5 服務發布上線 120
4.6 線上問題及解決方案 122
4.6.1 服務線程池滿 122
4.6.2 數據庫的CPU佔用率飚高 124
4.6.3 無止境的循環依賴 125
第5章 微服務進階優化 126
5.1 緩存分類 127
5.1.1 CDN緩存 128
5.1.2 本地緩存 129
5.1.3 分佈式緩存 135
5.2 微服務緩存優化 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 案例實戰 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 狀態監控 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 冪等實戰 179
5.7 配置中心 180
5.7.1 常見的配置方式 180
5.7.2 配置中心 181
5.7.3 案例實戰 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章 億級流量網關開發實戰 200
6.1 為什麼使用網關 201
6.1.1 網關的職責和工作原理 202
6.1.2 核心功能 203
6.2 網關的高可用性設計 207
6.2.1 高可用性的衡量標準 207
6.2.2 影響系統高可用性的因素 209
6.2.3 提升系統可用性的常用方法 209
6.3 從零開始自研高性能異步網關 211
6.3.1 API協議的製定 211
6.3.2 API的註冊與發布 211
6.3.3 異步化請求 215
6.3.4 泛化調用 220
6.3.5 功能插件化 223
6.3.6 請求快照 226
6.3.7 API生命週期 227
6.4 網關優化 228
6.4.1 資源隔離 228
6.4.2 業務線程分離 230
6.4.3 Epoll加速 231
6.4.4 高速緩存 232
6.4.5 自恢復能力 234
6.5 自研網關所遇到的難題 234
6.5.1 網關找不到服務提供者 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 數據採集流程 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 內存負載實驗 286
7.4.6 數據庫調用延時實驗 286
7.4.7 Redis調用延時實驗 287
7.4.8 Dubbo服務延時實驗 288
7.4.9 Dubbo線程池滿實驗 289
7.4.10 混沌實驗的可視化 290
第8章 容量預估與服務上線 291
8.1 持續集成和持續交付 292
8.1.1 為什麼需要持續集成和持續交付 292
8.1.2 持續集成和持續交付的流程 296
8.1.3 搭建持續集成平台 301
8.1.4 持續集成項目實戰 324
8.2 灰度發布 337
8.2.1 灰度發布介紹 338
8.2.2 灰度發布的流程 340
8.2.3 灰度發布實戰 343
8.3 搭建全鏈路壓測平台 348
8.3.1 實施全鏈路壓測的原則 349
8.3.2 流量染色與數據隔離 351
8.3.3 如何生成壓測流量 353
8.3.4 全鏈路壓測實戰 355
8.4 線上容量的預估 367
8.4.1 容量預估的參考指標 368
8.4.2 硬件選型 370
8.4.3 容量預估實戰 371
第9章 中台架構設計 376
9.1 什麼是中台 377
9.1.1 研髮亂象 377
9.1.2 中台的定義 379
9.1.3 中台的分類 380
9.1.4 企業是否需要中台 381
9.1.5 中台對企業的價值 382
9.2 業務中台的搭建步驟 382
9.2.1 高管的介入決定成敗 382
9.2.2 獨立中台的產品經理 385
9.2.3 獨立中台的技術團隊 389
9.2.4 需求邊界管理 390
9.2.5 業務中台的架構設計 391
9.3 業務中台實戰 392
9.3.1 需求分析 393
9.3.2 架構實現 395
9.3.3 業務流程 396
9.3.4 業務線接入 399
9.4 中台的績效考核標準 401
9.5 中台的弊端 403
9.5.1 不同的業務線,需求不具備共性 403
9.5.2 需求的優先級被降低 403
9.5.3 項目組溝通難 404
9.5.4 業務線被動升級 405
9.6 實戰總結 406