高并發(fā)系統(tǒng)實戰(zhàn)派:集群、Redis緩存、海量存儲、Elasticsearch、RocketMQ、微服務、持續(xù)集成等
定 價:109 元
- 作者:謝恩德
- 出版時間:2022/9/1
- ISBN:9787121442049
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP311.11
- 頁碼:420
- 紙張:
- 版次:01
- 開本:16開
全書共5篇:第1篇,幫助讀者建立高并發(fā)系統(tǒng)的基本認知;第2篇,通過一個生產(chǎn)系統(tǒng)的搭建全流程,介紹了企業(yè)系統(tǒng)在技術框架層面及上線方面需要關注的點;第3篇,介紹了構建高并發(fā)系統(tǒng)的各項技術,包括應用集群化、緩存設計、存儲系統(tǒng)設計、搜索引擎、消息中間件設計、微服務設計、API網(wǎng)關設計等;第4篇,介紹了高并發(fā)系統(tǒng)設計原則及兩個完整的高并發(fā)項目,一方面幫助讀者對前面的內(nèi)容進行鞏固和實操,另一方面也希望給讀者搭建自己的高并發(fā)系統(tǒng)以一定的啟發(fā);第5篇,介紹了高并發(fā)系統(tǒng)的運維與監(jiān)控。
謝恩德 合肥優(yōu)恩物聯(lián)網(wǎng)科技有限公司 前后端技術負責人,在知乎和CSDN等多個網(wǎng)絡媒體發(fā)表了幾十篇前端后技術的文章。
★★第1篇 高并發(fā)系統(tǒng)認知
★★第1章 什么是高并發(fā)系統(tǒng) 2
1.1 什么是高并發(fā) 2
1.2 高并發(fā)系統(tǒng)有哪些關鍵指標 3
1.2.1 響應時間(Response Time) 3
1.2.2 吞吐量(Throughput) 3
1.2.3 每秒請求數(shù)(QPS) 4
1.2.4 每秒事務數(shù)(TPS) 4
1.2.5 訪問量(PV) 5
1.2.6 獨立訪客(UV) 5
1.2.7 網(wǎng)絡流量 5
1.3 為什么要學習高并發(fā)系統(tǒng) 5
1.3.1 提升自身及企業(yè)核心競爭力 6
1.3.2 在面試中脫穎而出 6
1.4 對比單體系統(tǒng)、分布式系統(tǒng)和微服務系統(tǒng) 7
1.4.1 單體系統(tǒng)之痛 7
1.4.2 高并發(fā)系統(tǒng)之分布式架構 11
1.4.3 高并發(fā)系統(tǒng)之微服務架構 12
★★第2章 從剖析兩個高并發(fā)系統(tǒng)開始 20
2.1 案例一:千萬級流量“秒殺”系統(tǒng) 20
2.1.1 千萬級流量“秒殺”系統(tǒng)架構一覽 20
2.1.2 動靜分離方案設計 24
2.1.3 熱點數(shù)據(jù)處理 27
2.1.4 大流量的高效管控 30
2.1.5 扣減庫存的那些事 34
2.1.6 搭建千萬級流量“秒殺”系統(tǒng)需要哪些技術 39
2.2 案例二:C2C二手電商平臺的社會化治理子系統(tǒng) 40
2.2.1 C2C二手電商平臺的社會化治理子系統(tǒng)架構一覽 40
2.2.2 基礎服務治理 42
2.2.3 RPC框架服務通信 50
2.2.4 分布式事務管理 55
★★第2篇 搭建生產(chǎn)級系統(tǒng)
★★第3章 生產(chǎn)級系統(tǒng)框架設計的細節(jié) 64
3.1 冪等性設計——保證數(shù)據(jù)的一致性 64
3.1.1 什么是冪等性 64
3.1.2 如何避免重復提交 66
3.1.3 如何避免更新中的ABA問題 68
3.2 接口參數(shù)校驗——增強服務健壯性 70
3.2.1 【實戰(zhàn)】Spring結合validation進行接口參數(shù)校驗 70
3.2.2 【實戰(zhàn)】自定義參數(shù)校驗注解 73
3.3 統(tǒng)一異常設計——跟雜亂無章的異常信息說再見 75
3.3.1 Spring Boot默認的異常處理機制 75
3.3.2 【實戰(zhàn)】基于Spring Boot構建全局異常處理 76
3.4 統(tǒng)一封裝Response——智能的響應數(shù)據(jù) 83
3.4.1 接口響應數(shù)據(jù)的模型 83
3.4.2 【實戰(zhàn)】開發(fā)統(tǒng)一的響應數(shù)據(jù)模型,以應對不同業(yè)務 87
3.5 編寫高質(zhì)量的異步任務 93
3.5.1 為什么要編寫異步任務 93
3.5.2 【實戰(zhàn)】基于Spring開發(fā)高質(zhì)量的異步任務 94
3.6 DTO與PO的互相轉換 98
3.6.1 什么是DTO、PO 98
3.6.2 【實戰(zhàn)】實現(xiàn)DTO與PO的互相轉換 99
3.7 優(yōu)雅的API設計——對接“清爽”,不出錯 102
3.7.1 最好采用“API先行”策略 103
3.7.2 API 的設計原則 104
3.7.3 RESTful API設計的規(guī)范 106
3.8 API治理——告別“接口滿天飛” 108
3.8.1 【實戰(zhàn)】基于Swagger構建可視化的API文檔 109
3.8.2 API調(diào)用鏈管理 112
★★第4章 快速部署上線 113
4.1 反向代理配置 113
4.1.1 什么是反向代理,為什么要使用反向代理 113
4.1.2 【實戰(zhàn)】使用Nginx配置線上服務 116
4.2 系統(tǒng)性能測試 120
4.2.1 【實戰(zhàn)】進行單元測試 120
4.2.2 【實戰(zhàn)】用AB工具做上線前的性能測試 131
★★第5章 生產(chǎn)環(huán)境監(jiān)測 136
5.1 服務器性能日常監(jiān)測 136
5.1.1 在運維中常說的“服務器平均負載”是什么意思 136
5.1.2 為什么經(jīng)常被問到“CPU上下文切換” 138
5.1.3 【實戰(zhàn)】快速分析出CPU的性能瓶頸 141
5.2 優(yōu)化服務器性能 144
5.2.1 CPU性能優(yōu)化方法論 144
5.2.2 定位和處理內(nèi)存泄漏問題 145
5.3 Java虛擬機(JVM)的生產(chǎn)調(diào)優(yōu) 147
5.3.1 JVM內(nèi)存模型分析 147
5.3.2 Java程序是如何在JVM中運行的 151
5.3.3 JVM優(yōu)化的思路 152
第3篇 專項突破
★★第6章 應用集群化 158
6.1 為什么要應用集群化 158
6.1.1 什么是集群服務器 158
6.1.2 采用集群服務器有什么好處 160
6.1.3 集群系統(tǒng)和分布式系統(tǒng)有什么區(qū)別 161
6.2 搭建應用集群 162
6.2.1 【實戰(zhàn)】使用反向代理搭建應用集群 163
6.2.2 【實戰(zhàn)】搭建Linux服務器集群 166
★★第7章 緩存設計 168
7.1 什么是緩存 168
7.1.1 緩存的定義 168
7.1.2 緩存的常見分類 169
7.2 使用緩存 171
7.2.1 如何正確選擇緩存的讀寫策略 171
7.2.2 如何使用多級緩存來提升服務性能 173
7.2.3 多級緩存之痛 179
7.3 緩存架構設計 183
7.3.1 緩存組件的選擇 183
7.3.2 緩存數(shù)據(jù)結構的設計 187
7.3.3 緩存分布的設計 187
7.3.4 緩存架構部署 190
7.3.5 緩存架構設計的關鍵點 190
7.4 用Redis構建生產(chǎn)級高性能分布式緩存 192
7.4.1 Redis的常見數(shù)據(jù)類型 192
7.4.2 【實戰(zhàn)】通過Redis的讀寫分離抗住10萬以上的QPS 197
7.4.3 【實戰(zhàn)】在高并發(fā)場景下,緩存“雪崩”了該怎么辦 201
7.4.4 【實戰(zhàn)】在高并發(fā)場景下,緩存“穿透”了該怎么辦 204
7.4.5 【實戰(zhàn)】構建一個高性能、可擴展的Redis集群 206
7.4.6 【實戰(zhàn)】實現(xiàn)朋友圈的“點贊”功能 210
7.4.7 【實戰(zhàn)】實現(xiàn)App中的“查找附近的人”功能 212
★★第8章 存儲系統(tǒng)設計 213
8.1 池化技術 213
8.1.1 數(shù)據(jù)庫連接池是如何預分配連接的 213
8.1.2 線程池是如何工作的 214
8.1.3 協(xié)程池有什么作用 216
8.2 數(shù)據(jù)庫采用主從架構——數(shù)據(jù)再也不會丟了 217
8.2.1 什么是數(shù)據(jù)庫的主從架構 217
8.2.2 【實戰(zhàn)】配置MySQL主從架構 219
8.2.3 主從架構中的數(shù)據(jù)是如何實現(xiàn)同步的 221
8.3 數(shù)據(jù)庫讀寫分離——讀/寫數(shù)據(jù)再也不用爭搶了 222
8.3.1 數(shù)據(jù)庫讀寫分離能解決什么問題 223
8.3.2 數(shù)據(jù)庫讀寫分離造成數(shù)據(jù)不一致,該怎么辦 223
8.3.3 【實戰(zhàn)】在程序開發(fā)中實現(xiàn)讀寫分離 224
8.4 數(shù)據(jù)庫分庫分表——處理海量數(shù)據(jù)的“終極大招” 226
8.4.1 在什么情況下需要分庫分表,如何分 226
8.4.2 【實戰(zhàn)】在分庫分表后,如何處理主鍵ID 229
8.4.3 【實戰(zhàn)】在程序開發(fā)中支持分庫分表 232
8.4.4 分庫分表會帶來什么開發(fā)難題 233
8.4.5 【實戰(zhàn)】在分庫分表后實行項目無感上線 234
8.5 引入NoSQL數(shù)據(jù)庫 236
8.5.1 NoSQL數(shù)據(jù)庫是什么,它和SQL數(shù)據(jù)庫有什么區(qū)別 236
8.5.2 常用的NoSQL數(shù)據(jù)庫 237
8.5.3 利用NoSQL數(shù)據(jù)庫可以提升寫入性能 237
8.5.4 利用NoSQL數(shù)據(jù)庫可以提升擴展性 238
★★第9章 搜索引擎——讓查詢更便捷 240
9.1 為什么需要搜索引擎 240
9.2 搜索引擎的通用算法和架構 241
9.2.1 必須知道的倒排索引 241
9.2.2 互聯(lián)網(wǎng)搜索引擎的技術架構 243
9.2.3 Lucene與Elasticsearch的前世今生 245
9.3 用Elasticsearch搭建高性能的分布式搜索引擎 247
9.3.1 Elasticsearch分布式架構的原理 247
9.3.2 【實戰(zhàn)】將Elasticsearch應用在電商系統(tǒng)中 250
9.3.3 【實戰(zhàn)】快速實現(xiàn)Elasticsearch的搜索建議 253
9.3.4 【實戰(zhàn)】在海量數(shù)據(jù)下,提高Elasticsearch的查詢效率 254
★★第10章 消息中間件設計——解耦業(yè)務系統(tǒng)與核心系統(tǒng) 257
10.1 同步和異步 257
10.1.1 何為同步/異步 257
10.1.2 【實戰(zhàn)】使用回調(diào)函數(shù)獲取數(shù)據(jù) 258
10.2 為何要使用消息中間件 260
10.2.1 什么是消息中間件,它有什么作用 260
10.2.2 生產(chǎn)級消息中間件的選型 263
10.2.3 在高并發(fā)場景下如何處理請求 264
10.3 RocketMQ在項目中的使用 267
10.3.1 RocketMQ架構原理 267
10.3.2 【實戰(zhàn)】利用RocketMQ改造訂單系統(tǒng),提升性能 269
10.4 引入消息中間件會帶來什么問題 275
10.4.1 需要保證消息中間件的高可用 275
10.4.2 需要保證消息不被重復消費 277
10.4.3 需要保證消息的順序性 279
10.4.4 需要解決消息中間件中的消息延遲 280
★★第11章 微服務設計——將系統(tǒng)拆分 282
11.1 好好的系統(tǒng)為什么要拆分 282
11.2 如何拆分服務 283
11.2.1 不可忽略的SOA架構 283
11.2.2 如何對已有系統(tǒng)進行微服務改造 284
11.2.3 微服務拆分的方式 287
11.2.4 有哪些好用的微服務開發(fā)框架 288
11.3 微服務設計參照模型 290
11.3.1 在開發(fā)中如何定義軟件分層 290
11.3.2 運用好“微服務的使用模式”可以事半功倍 292
11.4 引入微服務架構會帶來什么問題及其解決方案 294
11.4.1 數(shù)據(jù)一致性問題 295
11.4.2 分布式事務問題 296
11.4.3 復雜度問題 296
11.5 如何有效治理微服務 297
11.5.1 管理服務 298
11.5.2 治理服務 298
11.5.3 監(jiān)控服務 298
11.5.4 定位問題 299
11.5.5 查詢?nèi)罩? 299
11.5.6 運維服務 299
★★第12章 API網(wǎng)關設計——讓服務井然有序 300
12.1 為什么要引入API網(wǎng)關 300
12.1.1 什么是API網(wǎng)關 300
12.1.2 API網(wǎng)關的作用 301
12.2 API網(wǎng)關的通用設計方案 302
12.2.1 設計API網(wǎng)關要考慮哪些關鍵點 302
12.2.2 API網(wǎng)關的選型 304
12.3 將API網(wǎng)關應用到生產(chǎn)項目中 305
12.3.1 【實戰(zhàn)】基于Zuul搭建生產(chǎn)級API網(wǎng)關 305
12.3.2 【實戰(zhàn)】基于Spring Cloud Gateway搭建生產(chǎn)級API網(wǎng)關 308
★★第4篇 高并發(fā)項目設計及實戰(zhàn)
★★第13章 高并發(fā)系統(tǒng)設計原則 316
13.1 高并發(fā)系統(tǒng)的通用設計原則 316
13.1.1 利用負載均衡分散流量 316
13.1.2 利用分布式緩存扛住“讀”流量 322
13.1.3 實現(xiàn)數(shù)據(jù)庫的讀寫分離 322
13.1.4 實現(xiàn)數(shù)據(jù)庫分庫分表 323
13.1.5 使用NoSQL、消息隊列及搜索引擎技術 324
13.1.6 將大應用拆為小應用 325
13.2 提升系統(tǒng)性能的策略 325
13.2.1 垂直伸縮 325
13.2.2 水平伸縮 326
★★第14章 【項目實戰(zhàn)】搭建千萬級流量“秒殺”系統(tǒng) 327
14.1 搭建“秒殺”系統(tǒng)工程 327
14.1.1 技術選型 327
14.1.2 工程搭建 329
14.2 分析“秒殺”業(yè)務 331
14.2.1 “秒殺”業(yè)務場景分析 331
14.2.2 “秒殺”痛點分析 334
14.3 具體設計與開發(fā) 335
14.3.1 數(shù)據(jù)庫層的設計與開發(fā) 335
14.3.2 業(yè)務服務層的設計與開發(fā) 335
14.3.3 動靜分離的實現(xiàn) 339
14.3.4 優(yōu)化系統(tǒng)以應對千萬級流量 340
★★第15章 【項目實戰(zhàn)】搭建C2C二手電商平臺的社會化治理系統(tǒng) 342
15.1 搭建系統(tǒng)工程 342
15.1.1 技術棧列表 342
15.1.2 工程搭建 343
15.2 分析系統(tǒng)業(yè)務 343
15.2.1 C2C二手電商平臺社會化治理系統(tǒng)的業(yè)務介紹 343
15.2.2 C2C二手電商平臺社會化治理系統(tǒng)的痛點分析 343
15.3 整體架構設計 344
15.3.1 整體架構圖 344
15.3.2 場景分析 345
15.4 微服務設計開發(fā) 345
15.4.1 服務拆分及高可用注冊中心搭建 345
15.4.2 服務間通信框架選擇 349
15.4.3 平臺服務開發(fā) 349
15.5 服務治理開發(fā) 351
15.5.1 鏈路追蹤的設計與開發(fā) 351
15.5.2 引入分布式事務框架 352
15.5.3 平臺限流熔斷的設計與開發(fā) 354
15.5.4 引入API網(wǎng)關 357
15.5.5 基于Nacos搭建環(huán)境隔離配置中心 358
★★第5篇 運維監(jiān)控
★★第16章 運維之術——告別加班 360
16.1 什么是CI/CD 360
16.2 為什么要CI/CD 361
16.3 搭建適合自己公司的CI/CD 362
16.3.1 【實戰(zhàn)】基于GitLab搭建代碼管理平臺 362
16.3.2 【實戰(zhàn)】基于Jenkins搭建持續(xù)集成與編譯平臺 363
16.3.3 【實戰(zhàn)】基于Ansible搭建自動化部署平臺 366
16.4 服務器通用運維 366
16.4.1 優(yōu)化硬件 366
16.4.2 分析性能瓶頸 367
16.4.3 【實戰(zhàn)】處理服務器丟包問題 369
16.4.4 【實戰(zhàn)】分析服務吞吐量突然下降的原因 373
★★第17章 監(jiān)控之術——天使之眼 374
17.1 如何定義系統(tǒng)監(jiān)控 374
17.1.1 需要監(jiān)控哪些系統(tǒng)指標 374
17.1.2 如何采集監(jiān)控指標 375
17.1.3 如何存儲監(jiān)控指標 375
17.2 搭建一套可靠的監(jiān)控系統(tǒng) 375
17.2.1 【實戰(zhàn)】基于ELK搭建集中化日志監(jiān)控平臺 375
17.2.2 【實戰(zhàn)】基于Prometheus搭建系統(tǒng)指標監(jiān)控預警平臺 378
17.3 鏈路追蹤——不漏過任何一個異常服務 385
17.3.1 什么是鏈路追蹤 385
17.3.2 常用的開源鏈路追蹤系統(tǒng) 386
17.3.3 【實戰(zhàn)】在微服務架構中加入鏈路追蹤系統(tǒng)SkyWalking 386