內容簡介
《Java分散式中間件開發實戰》首先從單體架構套用講起,繼而引出分散式系統框架,然後介紹分散式系統的設計原則,以及分散式系統服務調用與數據訪問方法,接著介紹基於分散式系統的多業務場景下分散式事務和分散式鎖的使用,以及如何利用訊息中間件對業務進行解耦,並介紹分散式系統的服務治理、日誌收集和系統監控等內容,最後介紹當下流行的雲平台部署的相關知識,包括Docker容器、Kubernetes編排,以及持續集成與部署等。
《Java分散式中間件開發實戰》共11章,涵蓋的主要內容有分散式系統的理論知識,分散式系統服務間調用與數據訪問,分散式事務與分散式鎖,分散式訊息中間件RocketMQ與Kafka,分散式系統服務治理、監控與日誌收集,Docker容器技術和Kubernetes編排框架,Git、GitLab和Jenkins等持續集成與部署的相關知識。
《Java分散式中間件開發實戰》內容通俗易懂,案例豐富,實用性強,特別適合有Java開發基礎的中間件入門與進階讀者閱讀,也適合網際網路領域從事分散式系統開發的相關人員閱讀,還適合相關培訓機構的學員作為參考書。
圖書目錄
第1篇 分散式系統基礎知識
第1章 分散式系統理論基礎 2
1.1 企業級系統架構的演進 2
1.1.1 單體架構 3
1.1.2 集群架構 4
1.1.3 分散式架構 5
1.1.4 無服務架構 7
1.2 分散式系統概述 8
1.2.1 分散式系統的相關術語 8
1.2.2 分散式中間件簡介 9
1.2.3 分散式系統服務治理簡介 17
1.3 分散式系統的設計原則 21
1.3.1 CAP定理 22
1.3.2 BASE理論 25
1.3.3 分散式一致性協定 26
1.4 總結 40
第2章 分散式系統服務調用 41
2.1 RPC服務調用 41
2.1.1 RPC原理簡介 41
2.1.2 RPC序列化協定 42
2.1.3 RPC框架 44
2.2 用HTTP方式訪問服務 48
2.2.1 RESTful架構 48
2.2.2 OpenFeign訪問 48
2.2.3 RestTemplate訪問 51
2.3 總結 53
第3章 分散式系統數據訪問 54
3.1 集成MyBatis-Plus 54
3.1.1 MyBatis-Plus簡介 54
3.1.2 MyBatis-Plus集成 55
3.1.3 Druid連線池 61
3.1.4 Spring Boot事務控制 63
3.2 分散式快取 65
3.2.1 分散式快取之Redis 66
3.2.2 分散式快取更新策略 68
3.2.3 分散式快取失效問題 70
3.3 總結 71
第2篇 分散式系統中間件實戰
第4章 分散式事務與分散式鎖 74
4.1 分散式事務 74
4.1.1 分散式事務簡介 74
4.1.2 分散式事務框架——Seata 77
4.2 分散式鎖 79
4.2.1 分散式鎖簡介 79
4.2.2 用Redisson組件實現分散式鎖 80
4.3 總結 82
第5章 分散式訊息中間件 83
5.1 分散式訊息中間件概述 83
5.1.1 分散式訊息中間件的設計原理 83
5.1.2 分散式訊息中間件的套用場景 85
5.1.3 引入分散式訊息中間件帶來的問題 86
5.2 分散式訊息中間件之RocketMQ 87
5.2.1 RocketMQ的基本概念 87
5.2.2 RocketMQ的特性 90
5.2.3 RocketMQ實戰案例 91
5.3 分散式訊息中間件之Kafka 95
5.3.1 Kafka的基本概念 95
5.3.2 Kafka實戰案例 97
5.4 總結 99
第6章 分散式系統服務治理 100
6.1 服務限流與降級 100
6.1.1 限流算法 100
6.1.2 分散式限流組件 103
6.2 配置中心 107
6.2.1 配置中心之Apollo 107
6.2.2 配置中心之Nacos 110
6.3 服務註冊與發現 112
6.4 服務鏈路追蹤 113
6.5 服務網關 115
6.6 總結 116
第7章 分散式系統監控 117
7.1 監控端點 117
7.1.1 Micrometer簡介 117
7.1.2 Spring Boot Actuator集成 118
7.2 Prometheus組件 120
7.2.1 Prometheus簡介 120
7.2.2 Prometheus搭建 121
7.3 Grafana組件 123
7.4 總結 125
第8章 分散式系統日誌收集 126
8.1 日誌框架 126
8.1.1 Log4j簡介 126
8.1.2 Log4j替代者之Logback 129
8.1.3 Log4j升級版之Log4j2 130
8.2 服務端日誌收集 131
8.2.1 Elastic之Filebeat 131
8.2.2 Elastic之Logstash 133
8.3 日誌存儲 134
8.3.1 Elasticsearch簡介 135
8.3.2 Elasticsearch框架的原理 137
8.3.3 Elasticsearch命令 138
8.4 日誌可視化 144
8.4.1 Kibana組件簡介 144
8.4.2 Kibana的安裝 145
8.4.3 Kibana日誌可視化 147
8.5 總結 150
第3篇 分散式系統編排與部署
第9章 容器化技術之Docker 152
9.1 容器化概述 152
9.1.1 從虛擬化到容器化 152
9.1.2 容器化與Docker 154
9.2 Docker概述 155
9.2.1 Docker簡介 155
9.2.2 Docker架構 155
9.2.3 Docker安裝 157
9.2.4 Docker套用示例 159
9.3 Docker命令 160
9.3.1 容器生命周期管理命令 160
9.3.2 容器操作命令 165
9.3.3 容器鏡像管理命令 168
9.3.4 容器倉庫管理命令 169
9.4 Dockerfile概述 170
9.4.1 Docker鏡像構建 170
9.4.2 Dockerfile指令 171
9.5 總結 174
第10章 容器編排引擎Kubernetes 175
10.1 Kubernetes概述 175
10.1.1 Kubernetes的發展歷史 175
10.1.2 Kubernetes架構 176
10.1.3 Kubernetes的重要概念 179
10.2 Kubernetes編排 195
10.2.1 Pod編排 195
10.2.2 Service編排 196
10.2.3 Ingress編排 197
10.2.4 ConfigMap配置檔案 197
10.3 Kubernetes部署工具 197
10.3.1 Kubectl工具 197
10.3.2 Helm工具 200
10.3.3 Helm配置檔案 201
10.4 總結 203
第11章 分散式系統持續集成與交付 204
11.1 Git代碼管理工具 204
11.1.1 Git工具簡介 204
11.1.2 Git安裝示例 207
11.1.3 Git的核心命令 208
11.2 GitLab持續集成 213
11.2.1 GitLab簡介 214
11.2.2 GitLab搭建 214
11.2.3 GitLab Runner搭建 216
11.3 Jenkins交付 218
11.3.1 Jenkins簡介 218
11.3.2 Jenkins搭建 219
11.3.3 Jenkins套用部署 220
11.4 總結 222
第1篇 分散式系統基礎知識
第1章 分散式系統理論基礎 2
1.1 企業級系統架構的演進 2
1.1.1 單體架構 3
1.1.2 集群架構 4
1.1.3 分散式架構 5
1.1.4 無服務架構 7
1.2 分散式系統概述 8
1.2.1 分散式系統的相關術語 8
1.2.2 分散式中間件簡介 9
1.2.3 分散式系統服務治理簡介 17
1.3 分散式系統的設計原則 21
1.3.1 CAP定理 22
1.3.2 BASE理論 25
1.3.3 分散式一致性協定 26
1.4 總結 40
第2章 分散式系統服務調用 41
2.1 RPC服務調用 41
2.1.1 RPC原理簡介 41
2.1.2 RPC序列化協定 42
2.1.3 RPC框架 44
2.2 用HTTP方式訪問服務 48
2.2.1 RESTful架構 48
2.2.2 OpenFeign訪問 48
2.2.3 RestTemplate訪問 51
2.3 總結 53
第3章 分散式系統數據訪問 54
3.1 集成MyBatis-Plus 54
3.1.1 MyBatis-Plus簡介 54
3.1.2 MyBatis-Plus集成 55
3.1.3 Druid連線池 61
3.1.4 Spring Boot事務控制 63
3.2 分散式快取 65
3.2.1 分散式快取之Redis 66
3.2.2 分散式快取更新策略 68
3.2.3 分散式快取失效問題 70
3.3 總結 71
第2篇 分散式系統中間件實戰
第4章 分散式事務與分散式鎖 74
4.1 分散式事務 74
4.1.1 分散式事務簡介 74
4.1.2 分散式事務框架——Seata 77
4.2 分散式鎖 79
4.2.1 分散式鎖簡介 79
4.2.2 用Redisson組件實現分散式鎖 80
4.3 總結 82
第5章 分散式訊息中間件 83
5.1 分散式訊息中間件概述 83
5.1.1 分散式訊息中間件的設計原理 83
5.1.2 分散式訊息中間件的套用場景 85
5.1.3 引入分散式訊息中間件帶來的問題 86
5.2 分散式訊息中間件之RocketMQ 87
5.2.1 RocketMQ的基本概念 87
5.2.2 RocketMQ的特性 90
5.2.3 RocketMQ實戰案例 91
5.3 分散式訊息中間件之Kafka 95
5.3.1 Kafka的基本概念 95
5.3.2 Kafka實戰案例 97
5.4 總結 99
第6章 分散式系統服務治理 100
6.1 服務限流與降級 100
6.1.1 限流算法 100
6.1.2 分散式限流組件 103
6.2 配置中心 107
6.2.1 配置中心之Apollo 107
6.2.2 配置中心之Nacos 110
6.3 服務註冊與發現 112
6.4 服務鏈路追蹤 113
6.5 服務網關 115
6.6 總結 116
第7章 分散式系統監控 117
7.1 監控端點 117
7.1.1 Micrometer簡介 117
7.1.2 Spring Boot Actuator集成 118
7.2 Prometheus組件 120
7.2.1 Prometheus簡介 120
7.2.2 Prometheus搭建 121
7.3 Grafana組件 123
7.4 總結 125
第8章 分散式系統日誌收集 126
8.1 日誌框架 126
8.1.1 Log4j簡介 126
8.1.2 Log4j替代者之Logback 129
8.1.3 Log4j升級版之Log4j2 130
8.2 服務端日誌收集 131
8.2.1 Elastic之Filebeat 131
8.2.2 Elastic之Logstash 133
8.3 日誌存儲 134
8.3.1 Elasticsearch簡介 135
8.3.2 Elasticsearch框架的原理 137
8.3.3 Elasticsearch命令 138
8.4 日誌可視化 144
8.4.1 Kibana組件簡介 144
8.4.2 Kibana的安裝 145
8.4.3 Kibana日誌可視化 147
8.5 總結 150
第3篇 分散式系統編排與部署
第9章 容器化技術之Docker 152
9.1 容器化概述 152
9.1.1 從虛擬化到容器化 152
9.1.2 容器化與Docker 154
9.2 Docker概述 155
9.2.1 Docker簡介 155
9.2.2 Docker架構 155
9.2.3 Docker安裝 157
9.2.4 Docker套用示例 159
9.3 Docker命令 160
9.3.1 容器生命周期管理命令 160
9.3.2 容器操作命令 165
9.3.3 容器鏡像管理命令 168
9.3.4 容器倉庫管理命令 169
9.4 Dockerfile概述 170
9.4.1 Docker鏡像構建 170
9.4.2 Dockerfile指令 171
9.5 總結 174
第10章 容器編排引擎Kubernetes 175
10.1 Kubernetes概述 175
10.1.1 Kubernetes的發展歷史 175
10.1.2 Kubernetes架構 176
10.1.3 Kubernetes的重要概念 179
10.2 Kubernetes編排 195
10.2.1 Pod編排 195
10.2.2 Service編排 196
10.2.3 Ingress編排 197
10.2.4 ConfigMap配置檔案 197
10.3 Kubernetes部署工具 197
10.3.1 Kubectl工具 197
10.3.2 Helm工具 200
10.3.3 Helm配置檔案 201
10.4 總結 203
第11章 分散式系統持續集成與交付 204
11.1 Git代碼管理工具 204
11.1.1 Git工具簡介 204
11.1.2 Git安裝示例 207
11.1.3 Git的核心命令 208
11.2 GitLab持續集成 213
11.2.1 GitLab簡介 214
11.2.2 GitLab搭建 214
11.2.3 GitLab Runner搭建 216
11.3 Jenkins交付 218
11.3.1 Jenkins簡介 218
11.3.2 Jenkins搭建 219
11.3.3 Jenkins套用部署 220
11.4 總結 222
作者簡介
解承凱 資深
Java開發工程師。曾任職於愛奇藝等網際網路公司,現任職於北京某科技公司基礎技術平台組,負責公司大數據服務平台的開發。主要從事Web端與移動端Java開發的相關工作,專注於分散式系統後端服務開發。有近10年的網際網路開發經驗和微服務編程與架構經驗,熟悉微服務治理的相關技術,對分散式中間件的開發和使用有豐富的經驗。著有《Spring Boot從入門到實踐》一書。