分佈式微服務架構:原理與實戰

分佈式微服務架構:原理與實戰

作者: 黃文毅
出版社: 清華大學
出版在: 2019-11-01
ISBN-13: 9787302537816
ISBN-10: 730253781X





內容描述


隨著因特網技術的發展,系統架構由單體架構、垂直MVC架構、SOA服務化、分佈式服務演變到分佈式微服務架構,這是因特網企業架構的必經之路。分佈式微服務架構涵蓋的技術面廣,知識點多。本書旨在讓更多電腦從業者熟悉一個完整的分佈式微服務架構所涉及的基礎概念、涵蓋的技術以及實戰開發。 本書蘊含的知識體系甚廣,第1~2章主要講解架構是如何向前演化發展的以及閱讀本書之前需要準備的環境。第3~5章主要講解服務之間的RPC調用、通信協議等。第6~7章主要講解服務路由以及服務註冊中心的原理和實踐。第8章主要講解服務調用。第9章主要講解服務容器化以及如何部署和發布服務。第10~11章主要講解服務限流、降級、容錯以及熔斷等技術。第12~13章主要講解如何搭建服務日誌和監控體系。第15章主要講解配置中心的原理以及如何搭建配置中心。第16章主要講解分佈式數據庫、分佈式緩存、分佈式事務、分佈式Session以及服務如何通過Kafka解耦。第17章主要講解微服務如何測試。第18章主要講解目前主流的分佈式微服務架構案例。 本書適用於所有Java編程語言開發人員、分佈式微服務架構愛好者以及電腦專業的學生等。


目錄大綱


第1章從架構演進啟程1
1.1水平分層架構1
1.1.1應用架構概述1
1.1.2 MVC架構/水平分層架構2
1.2 SOA服務化架構3
1.2.1 SOA概述4
1.2.2 SOA的特徵4
1.2.3 SOA面臨的問題5
1.3分佈式微服務架構5
1.3.1微服務概述5
1.3.2 SOA與微服務5
1.3.3微服務架構的特點6
1.3.4微服務架構的缺點6
1.3. 5微服務架構全景圖7
1.3.6微服務類型8
1.3.7微服務拆分原則與步驟9

第2章微服務開發框架11
2.1環境準備11
2.1.1安裝JDK 11
2.1.2安裝Intellij IDEA 14
2.1.3安裝Apache Maven 14
2.2一分鐘快速搭建Spring Boot項目15
2.2.1使用Spring Initializr新建項目15
2.2.2測試18
2.3 Spring Boot簡單介紹18
2.3.1 Spring Boot核心功能及特性19
2.3.2 Spring Boot的缺點20
2.4 Spring Boot目錄介紹20
2.4.1 Spring Boot工程目錄20
2.4.2 Spring Boot入口類21
2.4.3 Spring Boot測試類22
2.4.4 pom文件23
2.5 Spring Boot生產級特性24
2.5.1應用監控24
2.5.2健康檢查28
2.5.3跨域訪問29
2.5.4外部配置30

第3章分佈式RPC框架31
3.1 RPC框架概述31
3.1.1 RPC的定義31
3.1.2 RPC核心組件31
3.1 .3 RPC調用過程32
3.1.4 RPC框架調用分類33
3.1.5 RPC框架性能35
3.1.6 RPC框架與分佈式服務框架35
3.2 RPC框架36
3.2.1 RMI遠程方法調用36
3.2.2 Thrift 37
3.2.3 Hessian 38
3.2.4 Avro-RPC 38
3.2.5 gRPC 38
3.2.6其他RPC框架39

第4章序列化與反序列化40
4.1序列化與反序列化40
4.1.1序列化/反序列化概念40
4.1.2序列化/反序列化特性41
4.2常用序列化框架41
4.2. 1 Java默認序列化41
4.2.2 XML序列化框架46
4.2.3 JSON序列化框架48
4.2.4 ProtoBuf序列化框架50

第5章微服務底層通信與協議54
5.1 Java網絡通信54
5.1.1傳統BIO編程54
5.1.2偽異步I/O編程60
5.1.3 NIO編程62
5.2 Netty框架78
5.2.1 Netty概述78
5.2.2第一個Netty應用程序78
5.2.3 Netty架構設計84
5.3分佈式服務框架協議89
5.3.1主流公有協議89
5.3.2私有協議設計90

第6章服務路由與負載均衡94
6.1服務路由概述94
6.1.1服務路由的定義94
6.1.2服務信息存放方式94
6.2負載均衡概述95
6.2.1 Nginx的定義95
6.2.2負載均衡的實現95
6.2.3負載均衡算法98

第7章微服務註冊中心103
7.1了解微服務註冊中心103
7.1.1註冊中心幾個概念103
7.1.2註冊中心104
7.2 ZooKeeper實現服務註冊中心104
7.2.1 ZooKeeper概述104
7.2.2 ZooKeeper的原理105
7.2.3 ZooKeeper的安裝106
7.2.4 ZooKeeper搭建集群環境109
7.2.5 ZooKeeper集群總體架構110
7.2.6命令行客戶端zkCli.sh 112
7.2.7 ZkClient連接ZooKeeper 116
7.2.8 ZooKeeper實現服務註冊與發現120

第8章微服務框架服務調用與容錯122
8.1服務調用概述122
8.2服務調用方式123
8.2.1同步服務調用123
8.2.2異步服務調用125
8.2.3並行服務調用130
8.2.4泛化調用132

第9章分佈式微服務封裝與部署133
9.1微服務封裝技術133
9.1.1 Docker概述133
9.1.2 Docker的基本概念135
9.1.3 Docker架構135
9.1.4 Docker的安裝137
9.1.5 Docker的常用命令138
9.1.6製作鏡像142
9.1.7使用Dockerfile構建鏡像144
9.1.8 Spring Boot集成Docker 147
9.2微服務部署概述150
9.2.1藍綠部署150
9.2.2滾動發布152
9.2.3灰度發布/金絲雀部署154

第10章分佈式服務限流155
10.1服務限流概述155
10.1.1限流定義155
10.1.2限流算法155
10.2限流設計157
10.2.1限流設計原理157
10.2.2分級限流158

第11章服務降級、熔斷、調度159
11.1服務降級概述159
11.2服務降級方式159
11.2.1服務降級開關159
11.2.2自動降級160
11.2.3讀服務降級161
11.2.4寫服務降級161
11.3服務容錯策略161
11.3.1失敗轉移(Failover) 162
11.3.2失敗自動恢復(Failback) 162
11.3.3快速失敗(Failfast) 162
11.3.4失敗緩存(FailCache) 162
11.4 Hystrix降級、熔斷162
11.4.1 Hystrix簡介162
11.4.2 Hystrix實現降級/熔斷164
11.5服務優先級設計165
11.5.1服務實例數量調整165
11.5.2加權優先級隊列166
11.5.3線程調度器167

第12章服務版本與服務發布168
12.1服務概述168
12.2服務版本168
12.2.1服務版本概述168
12.2.2 Snapshot和Release 169
12.3服務發布169
12.3.1服務發布概述169
12.3.2服務發布方式170

第13章分佈式微服務日誌中心173
13.1分佈式日誌概述173
13.1.1結構化日誌/非結構化日誌173
13.1.2日誌類型175
13.2日誌框架175
13.2.1 JDK Logger 175
13.2.2 Apache Commons Logging 177
13.2.3 Log4j/Log4j 2 177
13.2.4 Spring Boot集成Log4j 179
13.2. 5 Docker日誌框架181
13.2.6 Linux系統Syslog 183
13.3搭建日誌中心183
13.3.1 ELK概述183
13.3.2 Elasticsearch日誌存儲184
13.3.3 Logstash日誌收集189
13.3.4 Fluentd日誌收集191
13.3.5 Kibana日誌查詢193
13.3.6 ELK架構與Docker整合194
13.3.7 ELK架構原理195

第14章分佈式微服務監控197
14.1分佈式服務架構監控197
14.1.1監控的價值197
14.1.2監控的完整體系197
14.1.3微服務監控類型198
14.1.4 Spring Boot應用監控198
14.1.5 Spring Boot Admin監控系統201
14.2搭建系統監控中心206
14.2.1概述206
14.2.2時序數據收集系統:cAdvisor 206
14.2.3時序數據存儲系統:InfluxDB 209
14.2.4時序數據分析系統:Grafana 212
14.2.5集成InfluxDB cAdvisor Grafana 214

第15章分佈式微服務配置中心218
15.1配置中心概述218
15.1.1配置概述218
15.1.2配置中心解決問題218
15.1.3全局配置219
15.1.4配置中心221
15.2 Spring Cloud Config 223
15.2.1 Spring Cloud Config概述223
15.2.2 Spring Cloud Config快速入門224

第16章分佈式微服務存儲與解耦232
16.1分佈式數據庫架構232
16.1.1分庫232
16.1.2分錶233
16.1.3水平切分的方式233
16.1.4垂直切分的方式235
16.1.5分組235
16.1.6 Mycat分庫分錶實戰236
16.1.7 Spring MyBatis Mycat快速體驗240
16.2分佈式事務249
16.2.1數據庫事務249
16.2.2分佈式事務249
16.2. 3 CAP定理250
16.2.4 BASE理論251
16.2.5兩階段提交(2PC) 252
16.2.6補償事務(TCC) 252
16.2.7後置提交254
16.2.8本地消息表(異步確保) 255
16.3分佈式緩存架構256
16.3.1 Memcache與Redis 256
16.3.2進程內緩存257
16.3.3 Redis單節點安裝259
16.3.4 Redis持久化策略260
16.3.5 Redis主從復制模式263
16.3.6 Redis哨兵模式266
16.3.7 Redis哨兵模式安裝部署271
16.3.8 Redis集群模式277
16.3.9 Redis集群環境搭建280
16.3.10 Redis緩存穿透和雪崩288
16.4微服務解耦294
16.4.1服務解耦概述294
16.4.2 Kafka介紹295
16.4.3 Kafka安裝299
16.4.4 Kafka搭建集群環境300
16.4.5 Kafka Manager的安裝301
16.4.6 Kafka常用命令301
16.4 .7 Spring Boot集成Kafka 311
16.5分佈式服務Session 315
16.5.1 Session與Cookie 315
16.5.2 Session一致性問題315
16.5.3 Session同步316

第17章分佈式微服務測試318
17.1分佈式微服務測試318
17.1. 1微服務測試概述318
17.1.2微服務測試319
17.2 Spring Boot單元測試321
17.3 Mockito/PowerMockito測試框架323
17.3.1 Mockito概述323
17.3.2 Mockito簡單實例324
17.3.3 PowerMock概述327
17.3.4 PowerMockito簡單實例327
17.4 H2內存型數據庫330
17.4.1 H2概述330
17.4.2 Spring Boot集成H2 330
17.5 REST API測試333
17.5.1 Postman概述333
17.5.2 Postman簡單使用333
17.6性能測試336
17.6.1 ab概述336
17.6.2 ab測試336
17.6.3其他性能測試工具338

第18章分佈式微服務架構經典案例341
18.1微服務架構案例341
18.1.1微服務架構概述341
18.1.2微服務架構平台選擇342
18.1.3微服務接口類型342
18.2分佈式服務框架Dubbo 343
18.2.1 Dubbo概述343
18.2 .2 Dubbo原理344
18.3 Spring Boot Spring Cloud解決方案345
18.3.1 Spring Boot概述345
18.3.2 Spring Cloud概述345
18.3.3微服務、Spring Boot、Spring Cloud的關係347
18.3.4 Spring Cloud與Dubbo的優劣347
18.4 Spring Boot Kubernetes Docker解決方案348
18.4.1 Docker概述348
18.4.2 Kubernetes概述349
18.4.3 Kubernetes的基本概念349
18.4.4 Kubernetes的使用351
18.4.5 Kubernetes的架構356
18.4.6 Kubernetes集群監控359
18.4.7 Kubernetes集群日誌管理359
18.4.8 Kubernetes解決方案359
參考文獻361


作者介紹


黃文毅,CSDN博客專家,CSDN學院、網易學院和騰訊學院等網絡學院講師。曾就職於廈門星耀藍圖科技有限公司(為浦發銀行、興業銀行、南京銀行、湖南農信銀行等銀行開發系統)和上海美團(從事美團和大眾點評後端開發工作),目前就職於廈門美圖科技有限公司,從事美圖秀秀和美拍後端開發工作。




相關書籍

XSLT 2.0 and XPath 2.0 Programmer's Reference, 4/e

作者 Michael Kay

2019-11-01

經典實戰手冊:AngularJS 全攻略 (舊名: AngularJS 快速上手-- 實務範例教學)

作者 姜琇森 蕭國倫 蔣宜成 蕭盟興

2019-11-01

編寫可靠的JavaScript代碼:測試驅動開發JavaScript商業軟件

作者 Lawrence D. Spencer Seth H. Richards

2019-11-01