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