分布式中間件核心原理與RocketMQ最佳實(shí)踐
定 價(jià):89 元
- 作者:劉猛
- 出版時(shí)間:2023/1/1
- ISBN:9787301335048
- 出 版 社:北京大學(xué)出版社
- 中圖法分類:TP393.07
- 頁(yè)碼:294
- 紙張:
- 版次:1
- 開(kāi)本:16開(kāi)
本書(shū)從分布式系統(tǒng)的基礎(chǔ)概念講起,逐步深入分布式系統(tǒng)中間件進(jìn)階實(shí)戰(zhàn),并在最后結(jié)合一個(gè)大型項(xiàng)目案例進(jìn)行講解,重點(diǎn)介紹了使用Spring Cloud框架整合各種分布式組件的過(guò)程,讓讀者不但可以系統(tǒng)地學(xué)習(xí)分布式中間件的相關(guān)知識(shí),而且還能對(duì)業(yè)務(wù)邏輯的分析思路、實(shí)際應(yīng)用開(kāi)發(fā)有更為深入的理解。
全書(shū)共分12章,前3個(gè)章節(jié)是學(xué)習(xí)分布式系統(tǒng)架構(gòu)的準(zhǔn)備階段。第1章開(kāi)篇部分,講解演進(jìn)過(guò)程中分布式系統(tǒng)是如何出現(xiàn)的;第2章Spring部分,講解如何搭建目前流行的Spring Boot和Spring Cloud框架;第3章容器部分,講解目前最流行的Docker容器技術(shù)和Kubernetes容器編排工具;第4章~第8章深入講解消息中間件RocketMQ的相關(guān)知識(shí),理論與實(shí)戰(zhàn)并存;第9章將深入RocketMQ底層,探索閱讀源碼的樂(lè)趣,掌握精通RocketMQ的同時(shí)學(xué)會(huì)閱讀源碼的方法;第10章和第11章講解分布式系統(tǒng)中必須考慮的問(wèn)題:分布式事務(wù)與分布式鎖;第12章以一個(gè)電商系統(tǒng)業(yè)務(wù)為例,讓讀者體驗(yàn)一個(gè)項(xiàng)目從無(wú)到有的過(guò)程,并學(xué)以致用。
本書(shū)內(nèi)容由淺入深、結(jié)構(gòu)清晰、實(shí)例豐富、通俗易懂、實(shí)用性強(qiáng),適合需要全方位學(xué)習(xí)分布式中間件相關(guān)技術(shù)
的人員,也適合培訓(xùn)學(xué)校作為培訓(xùn)教材,還可作為大、中專院校相關(guān)專業(yè)的教學(xué)參考書(shū)。
劉猛,Java架構(gòu)師,目前任職于聯(lián)仁健康JAVA高級(jí)工程師,負(fù)責(zé)架構(gòu)設(shè)計(jì),包括系統(tǒng)架構(gòu)設(shè)計(jì)、前端布局開(kāi)發(fā)(JS原生或者Vue.js框架均可)、大數(shù)據(jù)可視化開(kāi)發(fā)(Echarts)、JAVA后臺(tái)接口開(kāi)發(fā)(Spring Cloud框架)、整個(gè)項(xiàng)目策劃與交付。曾先后為南京海泰醫(yī)療、北京嘉和美康、北京聯(lián)仁健康、中國(guó)移動(dòng)云設(shè)計(jì)項(xiàng)目等。
第1章 走進(jìn)分布式系統(tǒng) 1
1.1 分布式系統(tǒng)簡(jiǎn)介 2
1.1.1 分布式系統(tǒng)的架構(gòu)演變過(guò)程 2
1.1.2 分布式系統(tǒng)的特性 6
1.1.3 分布式系統(tǒng)帶來(lái)的問(wèn)題 6
1.2 分布式中間件簡(jiǎn)介 7
1.2.1 什么是分布式中間件 7
1.2.2 常用的分布式中間件 8
1.3?小結(jié)?8
第2章 Spring微服務(wù)實(shí)戰(zhàn) 9
2.1 Spring Boot實(shí)戰(zhàn) 10
2.1.1 什么是Spring Boot 10
2.1.2 創(chuàng)建Spring Boot項(xiàng)目 10
2.1.3 實(shí)戰(zhàn):Spring Boot定時(shí)訪問(wèn)數(shù)據(jù)庫(kù) 13
2.2 Spring Cloud實(shí)戰(zhàn) 18
2.2.1 什么是Spring Cloud 18
2.2.2 從電商系統(tǒng)看Spring Cloud基本架構(gòu) 18
2.2.3 實(shí)戰(zhàn):動(dòng)手搭建Spring Cloud電商項(xiàng)目 22
2.3 小結(jié) 33
第3章 容器技術(shù)簡(jiǎn)介 34
3.1 Docker簡(jiǎn)介 35
3.1.1 什么是Docker 35
3.1.2 動(dòng)手安裝Docker環(huán)境 36
3.1.3 Docker鏡像常用命令 37
3.1.4 Docker容器常用命令 39
3.1.5 Dockerfile介紹 42
3.1.6 實(shí)戰(zhàn):Docker打包Spring Boot項(xiàng)目 45
3.2 Kubernetes簡(jiǎn)介 49
3.2.1 什么是Kubernetes 49
3.2.2 動(dòng)手搭建Kubernetes集群 51
3.2.3 實(shí)戰(zhàn):Kubernetes部署Spring Boot項(xiàng)目 55
3.3 小結(jié) 57
第4章 消息中間件概述 58
4.1 消息中間件簡(jiǎn)介 59
4.1.1 同步的概念 59
4.1.2 異步調(diào)用 60
4.1.3 什么是消息中間件 60
4.2 消息中間件的作用 61
4.2.1 異步化提升性能 61
4.2.2 降低耦合度 62
4.2.3 流量削峰 63
4.3 常見(jiàn)的消息中間件 64
4.3.1 ActiveMQ 64
4.3.2 RabbitMQ 65
4.3.3 RocketMQ 66
4.3.4 Kafka 67
4.4 RocketMQ的基本架構(gòu) 69
4.4.1 RocketMQ是如何承受高并發(fā)的 69
4.4.2 RocketMQ如何存儲(chǔ)大量消息數(shù)據(jù) 69
4.4.3 RocketMQ是如何處理宕機(jī)的 70
4.4.4 如何知道我該訪問(wèn)哪個(gè)Broker 71
4.5 電商系統(tǒng)面臨的技術(shù)挑戰(zhàn) 72
4.5.1 再談電商系統(tǒng)業(yè)務(wù)流程 72
4.5.2 退款與取消支付流程 74
4.5.3 大數(shù)據(jù)團(tuán)隊(duì)帶來(lái)的技術(shù)挑戰(zhàn) 75
4.6 小結(jié) 75
第5章 NameServer 76
5.1 NameServer概述 77
5.2 NameServer與其他組件的交互流程 77
5.2.1 Broker如何向NameServer注冊(cè)信息 77
5.2.2 系統(tǒng)如何從NameServer獲取信息 79
5.2.3 NameServer如何感知到Broker宕機(jī) 79
5.2.4 系統(tǒng)如何感知到Broker宕機(jī) 80
5.3 小結(jié) 81
第6章 RocketMQ的高可用 82
6.1 Broker的主從架構(gòu) 83
6.1.1 Master Broker與Slave Broker之間的消息同步 83
6.1.2 Master Broker與Slave Broker的讀寫(xiě)分離 83
6.1.3 Master Broker與Slave Broker的宕機(jī)處理 84
6.1.4 Dledger實(shí)現(xiàn)RocketMQ的高可用 85
6.2 Dledger的自動(dòng)切換原理 85
6.2.1 使用Dledger技術(shù)替換CommitLog 85
6.2.2 Dledger怎么選舉Leader 86
6.2.3 Dledger的數(shù)據(jù)同步機(jī)制 87
6.3 其他消息中間件的高可用 87
6.3.1 RabbitMQ的高可用 88
6.3.2 Kafka的高可用 89
6.4?實(shí)戰(zhàn)——部署一個(gè)RocketMQ集群?91
6.4.1 單機(jī)快速部署 91
6.4.2 使用三臺(tái)機(jī)器部署NameServer 92
6.4.3 使用三臺(tái)機(jī)器部署B(yǎng)roker 93
6.4.4 補(bǔ)充說(shuō)明實(shí)踐中的問(wèn)題 94
6.5 實(shí)戰(zhàn)——RocketMQ的可視化監(jiān)控管理 95
6.5.1 部署可視化監(jiān)控工具 95
6.5.2 如何使用控制臺(tái) 95
6.6 實(shí)戰(zhàn)——RocketMQ的生產(chǎn)環(huán)境參數(shù)調(diào)整 97
6.6.1 OS內(nèi)核參數(shù)調(diào)整 97
6.6.2 JVM參數(shù)調(diào)整 98
6.6.3 RocketMQ參數(shù)調(diào)整 98
6.7 小結(jié) 99
第7章 生產(chǎn)者與消費(fèi)者 100
7.1 發(fā)送模式與消費(fèi)模式 101
7.1.1 RocketMQ的發(fā)送模式 101
7.1.2 RocketMQ的消費(fèi)模式 104
7.2 生產(chǎn)者發(fā)送消息的底層原理 105
7.2.1 什么是MessageQueue 106
7.2.2 生產(chǎn)者發(fā)送消息存入哪個(gè)MessageQueue 107
7.2.3 如果Broker發(fā)生故障怎么辦 107
7.3 Broker的持久化 108
7.3.1 CommitLog 108
7.3.2 MessageQueue是如何存儲(chǔ)的 109
7.3.3 寫(xiě)入CommitLog的性能探索 110
7.3.4 同步刷盤(pán)和異步刷盤(pán) 110
7.4 消費(fèi)者獲取消息的底層原理 111
7.4.1 消費(fèi)者組 111
7.4.2 集群模式和廣播模式 112
7.4.3 MessageQueue與消費(fèi)者的關(guān)系 113
7.4.4 Push模式和Pull模式 113
7.4.5 Broker如何讀取消息返回給消費(fèi)者 114
7.5 實(shí)戰(zhàn)——使用代碼來(lái)操作RocketMQ 115
7.5.1 原生代碼實(shí)現(xiàn) 115
7.5.2 Spring Boot實(shí)現(xiàn) 116
7.6 實(shí)戰(zhàn)——對(duì)RocketMQ集群進(jìn)行壓測(cè) 121
7.6.1 壓測(cè)的指標(biāo) 122
7.6.2 動(dòng)手實(shí)踐壓測(cè) 122
7.7 小結(jié) 126
第8章 RocketMQ的實(shí)際問(wèn)題與解決方案 127
8.1 消息是怎么丟失的 128
8.1.1 引入訂單業(yè)務(wù) 128
8.1.2 訂單系統(tǒng)推送消息過(guò)程中會(huì)丟失消息嗎 129
8.1.3 MQ接收到消息后,自己會(huì)把消息弄丟嗎 129
8.1.4 積分系統(tǒng)消費(fèi)到了消息就能保證消息的不丟失了嗎 130
8.2 RocketMQ消息丟失解決方案:事務(wù)消息 131
8.2.1 half消息機(jī)制 131
8.2.2 half消息的流程分析 132
8.3 RocketMQ消息丟失解決方案:同步刷盤(pán)+手動(dòng)提交 134
8.3.1 Broker的消息丟失解決方案 135
8.3.2 Consumer的消息丟失解決方案 135
8.3.3 消息零丟失方案的優(yōu)缺點(diǎn)分析 136
8.4 探索RocketMQ的重復(fù)消費(fèi)和亂序問(wèn)題 136
8.4.1 為什么會(huì)重復(fù)消費(fèi) 137
8.4.2 消息重試、延時(shí)消息、死信隊(duì)列 138
8.4.3 消息亂序 139
8.5 實(shí)戰(zhàn):RocketMQ高級(jí)功能代碼實(shí)現(xiàn) 140
8.5.1 事務(wù)消息代碼實(shí)現(xiàn) 140
8.5.2 順序消息代碼實(shí)現(xiàn) 145
8.5.3 消息過(guò)濾代碼實(shí)現(xiàn) 149
8.5.4 延時(shí)消息代碼實(shí)現(xiàn) 150
8.6 小結(jié) 152
第9章 走進(jìn)RocketMQ底層 153
9.1 開(kāi)啟源碼閱讀之路 154
9.1.1 RocketMQ源碼結(jié)構(gòu)介紹 154
9.1.2 啟動(dòng)NameServer與Broker 156
9.1.3 測(cè)試生產(chǎn)消息和消費(fèi)消息 159
9.2 NameServer源碼解析 160
9.2.1 NameServer的啟動(dòng)與配置的加載 160
9.2.2 NameServer網(wǎng)絡(luò)通信的初始化 166
9.2.3 NameServer中Netty是如何啟動(dòng)的 168
9.3 Broker源碼解析 173
9.3.1 Broker的啟動(dòng) 173
9.3.2 BrokerController的創(chuàng)建與初始化 177
9.3.3 Broker如何向NameServer注冊(cè) 188
9.3.4 NameServer如何接收Broker的請(qǐng)求 198
9.4 Producer與Consumer源碼解析 205
9.4.1 Producer與NameServer的通信 205
9.4.2 Producer與Broker的通信 207
9.4.3 Broker的同步刷盤(pán)與異步刷盤(pán) 211
9.4.4 Consumer的創(chuàng)建與啟動(dòng) 213
9.5 小結(jié) 215
第10章 分布式事務(wù) 216
10.1 ACID與隔離級(jí)別 217
10.1.1 事務(wù)的ACID 217
10.1.2 事務(wù)的隔離級(jí)別 218
10.1.3 MySQL是如何實(shí)現(xiàn)可重復(fù)讀的 218
10.2 業(yè)內(nèi)分布式事務(wù)方案介紹 219
10.2.1 CAP理論與BASE理論 219
10.2.2 XA規(guī)范與2PC/3PC分布式事務(wù) 220
10.2.3 TCC分布式方案 222
10.2.4 可靠消息最終一致性方案 223
10.3 實(shí)戰(zhàn):分布式事務(wù)框架Seata 224
10.3.1 Seata原理介紹 224
10.3.2 Seata Server的部署 224
10.3.3 Seata的代碼實(shí)現(xiàn) 226
10.4 小結(jié) 227
第11章 分布式鎖 228
11.1 分布式鎖簡(jiǎn)介 229
11.1.1 單機(jī)系統(tǒng)下的鎖 229
11.1.2 分布式鎖 229
11.2 Zookeeper實(shí)現(xiàn)分布式鎖 230
11.2.1 Zookeeper實(shí)現(xiàn)分布式鎖的原理 230
11.2.2 實(shí)戰(zhàn):使用Curator實(shí)現(xiàn)分布式鎖 231
11.3 Redis實(shí)現(xiàn)分布式鎖 233
11.3.1 Redis實(shí)現(xiàn)分布式鎖的原理 233
11.3.2 實(shí)戰(zhàn):使用Redisson實(shí)現(xiàn)分布式鎖 234
11.4 小結(jié) 236
第12章 電商網(wǎng)站系統(tǒng)案例實(shí)戰(zhàn) 237
12.1 項(xiàng)目業(yè)務(wù)分析 238
12.1.1 下單業(yè)務(wù) 238
12.1.2 支付業(yè)務(wù) 238
12.2 基礎(chǔ)技術(shù)架構(gòu)與表結(jié)構(gòu)設(shè)計(jì) 240
12.2.1 技術(shù)選型 240
12.2.2 Spring Cloud Alibaba框架搭建 240
12.2.3 數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì) 249
12.3 下單業(yè)務(wù)開(kāi)發(fā) 252
12.3.1 下單接口定義 252
12.3.2 下單接口實(shí)現(xiàn)類定義 255
12.3.3 注冊(cè)中心Nacos搭建 258
12.3.4 引入Dubbo框架 260
12.3.5 訂單接口實(shí)現(xiàn)類開(kāi)發(fā) 264
12.3.6 使用RocketMQ實(shí)現(xiàn)失敗補(bǔ)償機(jī)制 272
12.4 支付業(yè)務(wù)開(kāi)發(fā) 278
12.4.1 支付接口定義 278
12.4.2 創(chuàng)建支付訂單 278
12.4.3 支付回調(diào)接口 279
12.4.4 消息的消費(fèi) 281
12.5 網(wǎng)關(guān)服務(wù)的完善 282
12.5.1 網(wǎng)關(guān)服務(wù)的搭建 282
12.5.2 測(cè)試網(wǎng)關(guān)服務(wù) 284
12.6 小結(jié) 285