隨著互聯(lián)網(wǎng)技術的發(fā)展,分布式應用系統(tǒng)對具備高性能、高可用性、可擴展性和可維護性的架構的依賴度越來越高。本書以理論與實踐相結合的方式,對分布式應用系統(tǒng)的架構設計進行系統(tǒng)、全面的闡述。本書分為3個部分,第一部分是分布式系統(tǒng)架構概述,介紹一些分布式系統(tǒng)架構下常見的基礎概念和架構設計的目標;第二部分是核心理論及技術,介紹分布式應用系統(tǒng)下常見的技術中間件機制和使用場景,著重介紹分布式應用系統(tǒng)在高性能、高可用性、可擴展性和可維護性等方面常見的優(yōu)化技術;第三部分是架構實踐案例,梳理幾種常見的大型分布式應用系統(tǒng)的架構,并結合具體問題進行分析,使讀者能夠真正理解設計分布式應用系統(tǒng)架構所面臨的問題及解決問題的思路。
本書主要面向初/中/高級程序員和架構師,但書中的部分內容也適合產品經理、項目經理閱讀。此外,本書內容由淺入深且案例豐富,也適合作為培訓教材。
1.分布式系統(tǒng)是為了解決資源(如計算、存儲等)緊缺的問題而出現(xiàn)的,它包含分布式應用系統(tǒng)和分布式中間件系統(tǒng);
2.本書從基礎的架構概念入手,由淺入深地講解分布式應用系統(tǒng)的核心理論,形成了完整的方法論。
3.本書結合賬號系統(tǒng)、秒殺系統(tǒng)、消息推送系統(tǒng)和區(qū)塊鏈系統(tǒng)這4種常見的大型分布式應用系統(tǒng),詳細講解了架構的實現(xiàn)細節(jié)。
4.閱讀本書,讀者可以掌握分布式應用系統(tǒng)的理論體系,并具備業(yè)務實戰(zhàn)能力。
謝文輝,阿里巴巴高級技術專家,曾在華為、魅族、深信服擔任架構師及技術經理,具有10年以上的系統(tǒng)開發(fā)及架構設計經驗。他目前在阿里巴巴東南亞電商平臺Lazada負責業(yè)務風控架構相關工作。他主導過多個雙活機房的設計和構建工作,也主導過多個日均活躍用戶數(shù)達千萬級的應用系統(tǒng)的架構設計、改造及優(yōu)化工作,對分布式應用系統(tǒng)的高性能、高可用性和高并發(fā)處理有較為豐富的經驗。他的個人興趣在于大數(shù)據(jù)存儲處理、大規(guī)模系統(tǒng)的高性能、高可用性及多機房架構的設計和構建。
第 一部分 分布式系統(tǒng)架構概述
第 1章 架構的基礎概念 3
1.1 架構的幾個概念 3
1.1.1 系統(tǒng)與子系統(tǒng) 4
1.1.2 模塊與組件 4
1.1.3 組件與框架 4
1.2 架構設計的目標 5
1.2.1 高性能 5
1.2.2 高可用性 6
1.2.3 可擴展性 7
1.2.4 可維護性 8
1.3 小結 9
第 2章 架構的演進 10
2.1 單體架構 10
2.2 分層架構 11
2.3 面向服務架構 12
2.4 微服務架構體系 14
2.4.1 微服務架構 14
2.4.2 服務網(wǎng)格架構 16
2.4.3 單元化架構 17
2.5 小結 18
第二部分 核心理論及技術
第3章 常見的基礎組件 21
3.1 數(shù)據(jù)緩存 21
3.1.1 Redis高可用實現(xiàn)方案 22
3.1.2 Redis集群實現(xiàn)方案 24
3.1.3 Redis跨機房數(shù)據(jù)同步方案 29
3.2 數(shù)據(jù)分發(fā) 34
3.2.1 Kafka的分區(qū)機制及副本機制 34
3.2.2 Kafka高吞吐量實現(xiàn)方案 40
3.2.3 Kafka跨機房雙活方案 44
3.3 數(shù)據(jù)存儲 47
3.3.1 關系數(shù)據(jù)庫MySQL 48
3.3.2 列式存儲數(shù)據(jù)庫HBase 49
3.3.3 文檔型存儲數(shù)據(jù)庫MongoDB 51
3.3.4 圖數(shù)據(jù)庫Neo4j 54
3.3.5 內容搜索數(shù)據(jù)庫Elasticsearch 57
3.4 服務遠程調用 59
3.4.1 RPC架構及原理 59
3.4.2 Dubbo架構及原理 60
3.4.3 gRPC架構及原理 62
3.5 小結 63
第4章 高性能架構 64
4.1 基礎概念 64
4.1.1 性能指標 64
4.1.2 利特爾法則 65
4.1.3 系統(tǒng)優(yōu)化分析 65
4.1.4 系統(tǒng)指標選擇 66
4.2 客戶端及網(wǎng)絡接入 66
4.2.1 瀏覽器訪問優(yōu)化 66
4.2.2 CDN緩存 68
4.2.3 反向代理 69
4.3 數(shù)據(jù)存儲 71
4.3.1 數(shù)據(jù)庫讀寫分離 71
4.3.2 數(shù)據(jù)庫分庫/分表 82
4.3.3 數(shù)據(jù)庫如何實現(xiàn)平滑擴容 86
4.3.4 NoSQL綜合解決方案 90
4.4 數(shù)據(jù)緩存 95
4.4.1 適合做緩存的場景 95
4.4.2 緩存穿透及解決方案 95
4.4.3 緩存雪崩及解決方案 97
4.4.4 緩存擊穿及解決方案 97
4.4.5 如何保障緩存與數(shù)據(jù)庫數(shù)據(jù)的一致性 100
4.5 業(yè)務邏輯 103
4.5.1 異步處理 103
4.5.2 消息隊列 106
4.6 架構模式與負載均衡 106
4.6.1 多進程并發(fā)模式與多線程并發(fā)模式 107
4.6.2 阻塞與非阻塞I/O模式 107
4.6.3 負載均衡架構 109
4.7 小結 110
第5章 高可用架構 111
5.1 分布式系統(tǒng)的幾個理論 111
5.1.1 CAP理論 111
5.1.2 BASE理論 114
5.2 數(shù)據(jù)存儲層 116
5.2.1 雙機架構 116
5.2.2 數(shù)據(jù)多副本 118
5.3 業(yè)務邏輯層 122
5.3.1 有狀態(tài)和無狀態(tài) 122
5.3.2 服務治理 124
5.3.3 服務降級 125
5.3.4 服務限流 130
5.4 多機房架構 133
5.4.1 多機房的幾種架構 133
5.4.2 多機房多活架構 138
5.4.3 多機房流量分發(fā) 141
5.5 小結 143
第6章 可擴展架構 144
6.1 可擴展的幾個維度 145
6.1.1 橫向擴展 145
6.1.2 垂直擴展 146
6.1.3 縱深擴展 147
6.2 可擴展架構的實現(xiàn) 148
6.2.1 反向代理層 148
6.2.2 接入層 149
6.2.3 業(yè)務邏輯層 150
6.2.4 數(shù)據(jù)緩存層 152
6.2.5 數(shù)據(jù)存儲層 152
6.3 幾種典型可擴展架構 153
6.3.1 分層架構 153
6.3.2 服務化架構 153
6.3.3 單元化架構 154
6.4 小結 155
第7章 可維護架構 156
7.1 系統(tǒng)監(jiān)控工具 156
7.1.1 Zabbix監(jiān)控系統(tǒng)介紹 156
7.1.2 Prometheus介紹 158
7.1.3 中間件監(jiān)控系統(tǒng)介紹 159
7.2 業(yè)務日志的監(jiān)控及分析 162
7.2.1 日志采集及清洗 163
7.2.2 日志的傳輸及存儲 165
7.2.3 日志查詢及可視化 166
7.3 業(yè)務數(shù)據(jù)的安全監(jiān)控及分析 167
7.3.1 數(shù)據(jù)安全防護方案 167
7.3.2 數(shù)據(jù)授權及審計系統(tǒng) 168
7.3.3 數(shù)據(jù)血緣追蹤 169
7.4 小結 170
第三部分 架構實踐案例
第8章 賬號系統(tǒng) 173
8.1 系統(tǒng)整體架構 173
8.1.1 注冊服務 173
8.1.2 認證服務 175
8.1.3 授權服務 176
8.2 關鍵問題及解決方案 177
8.2.1 如何解決會話粘連問題 177
8.2.2 如何實現(xiàn)數(shù)據(jù)一致性 181
8.2.3 如何實現(xiàn)安全降級 183
8.3 小結 184
第9章 秒殺系統(tǒng) 185
9.1 系統(tǒng)整體架構 185
9.1.1 接入網(wǎng)關 186
9.1.2 訂單及庫存服務 187
9.1.3 支付服務 189
9.2 關鍵問題及解決方案 190
9.2.1 如何優(yōu)化流量金字塔模型 190
9.2.2 如何解決并發(fā)場景下的庫存扣減一致性問題 191
9.2.3 如何提升熱點賬戶的沖扣性能 193
9.3 小結 197
第 10章 消息推送系統(tǒng) 198
10.1 系統(tǒng)整體架構 198
10.1.1 業(yè)務接入層 199
10.1.2 通道層 200
10.1.3 客戶端層 200
10.2 關鍵問題及解決方案 200
10.2.1 如何實現(xiàn)過載保護 201
10.2.2 如何提升消息分發(fā)性能 202
10.2.3 如何解決海量消息推送明細的存儲問題 203
10.2.4 如何降低推送的客戶端功耗 203
10.2.5 如何解決消息重復推送問題 204
10.2.6 如何解決海量長連接問題 205
10.2.7 如何解決客戶端消息偽造問題 206
10.3 小結 206
第 11章 區(qū)塊鏈系統(tǒng) 207
11.1 系統(tǒng)整體架構及優(yōu)化 207
11.1.1 接入層 208
11.1.2 池化層及指令處理層 210
11.1.3 網(wǎng)絡層 213
11.1.4 存儲層 215
11.2 小結 216