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