買這商品的人也買了...
-
$330$314 -
$580$452 -
$301區塊鏈 2.0 以太坊應用開發指南
-
$594$564 -
$780$616 -
$450$405 -
$534$507 -
$534$507 -
$704Redis 核心原理與實踐
-
$580$458 -
$594$564 -
$800$624 -
$534$507 -
$734掌握分佈式跟蹤:微服務和復雜系統性能分析
-
$520$410 -
$600$300 -
$500$390 -
$580$458 -
$510深度探索 Go語言 — 對象模型與 runtime 的原理、特性及應用
-
$479$455 -
$419$398 -
$314人人都離不開的算法 — 圖解算法應用
-
$768$730 -
$654$621 -
$534$507
相關主題
商品描述
本書深刻總結了作者在大型因特網公司長期的實戰經驗,系統化地闡述了構建大型分佈式系統所需要的技術架構與業務架構方法論,並輔與詳盡的實踐剖析。全書分為三大部分:第1部分完整討論了分佈式架構的幾大核心問題,包括高並發、高可靠性、高可用、數據一致性(包括分佈式事務、Paxos/Raft一致性算法)、跨城容災與異地多活、CAP理論;第2部分從業務架構思維、需求分析、業務建模、領域驅動設計與微服務等角度探討業務架構;第3部分是案例實戰,通過眾多的業界實際案例來對理論有一個更為直觀的介紹。通過本書,讀者可以對構建大型復雜系統的方法論有全局的認識,對軟件架構的核心能力有深刻的理解,對個人的技術成長起到一定的借鑒作用,提升思維認知。本書不僅適合工程師、架構師閱讀,也適合企業系統開發人員在內的軟件開發從業人員閱讀。
作者簡介
余春龍,中科院軟件所碩士畢業,先後在多家一線互聯網公司任架構師,歷經各種大規模研發團隊的架構實踐,在海量高並發高可用架構、業務建模、領域驅動設計、技術規劃與技術管理等方面具備豐富的工程經驗,形成了自己完整的一套架構方。
目錄大綱
1部分 分佈式架構
1章 高並發 4
1.1 問題分類 4
1.1.1 側重於“高並發讀”的系統 4
1.1.2 側重於“高並發寫”的系統 6
1.1.3 同時側重於“高並發讀”和“高並發寫”的系統 7
1.2 高並發讀 8
1.2.1 策略1:動靜分離與CDN加速 8
1.2.2 策略2:加緩存 9
1.2.3 策略3:並發讀與Pipeline 10
1.2.4 策略4:批量讀 12
1.2.5 策略5:重寫輕讀 12
1.2.6 總結:讀寫分離(CQRS架構) 14
1.3 高並發寫 16
1.3.1 策略1:數據分片 16
1.3.2 策略2:任務分片 17
1.3.3 策略3:異步化與Pipeline 19
1.3.4 策略4:批量 26
1.3.5 策略5:串行化+多進程單線程+異步I/O 27
2章 高可靠 29
2.1 容量評估與規劃 29
2.1.1 理論基礎:吞吐量、響應時間與並發數三者關係 29
2.1.2 容量規劃 31
2.1.3 單機*大QPS估算方法1: CPU密集型與I/O密集型的區分 32
2.1.4 單機*大QPS估算方法2:壓力測試 33
2.2 過載保護:限流與熔斷 35
2.2.1 限流的兩種限制維度 35
2.2.2 單機限流的算法 35
2.2.3 單機限流的實現 37
2.2.4 限流 40
2.2.5 熔斷 41
2.3 時與重試 42
2.4 隔離 43
2.5 有損服務與降級 44
2.6 灰度發布、備份與回滾 45
2.7 監控體係與日誌報警 47
3章 分佈式事務 50
3.1 隨處可見的分佈式事務問題 51
3.1.1 緩存和數據庫的一致性問題 51
3.1.2 消息中間件和數據庫的一致性問題 51
3.1.3 兩個數據庫的一致性問題 51
3.1.4 服務和數據庫的一致性問題 51
3.1.5 兩個服務的一致性問題 52
3.1.6 兩個文件的一致性問題 52
3.2 分佈式事務解決方案匯總 52
3.2.1 2PC 52
3.2.2 *終一致性:**種實現方案 56
3.2.3 *終一致性:二種實現方案(基於事務消息) 59
3.2.4 TCC 61
3.2.5 事務狀態表+事務補償 63
3.2.6 同步雙寫(多寫)+異步對賬 64
3.2.7 妥協方案:弱一致性+基於狀態的事後補償 66
3.2.8 妥協方案:重試+回滾+報警+人工修復 68
3.2.9 阿裡雲Seata框架 68
3.2.10 總結 73
4章 高可用 74
4.1 高可用架構的思維框架 74
4.1.1 如何實現故障探測 75
4.1.2 如何解決腦裂問題 75
4.1.3 如何做到數據一致性 76
4.1.4 如何做到對客戶端透明 76
4.1.5 如何解決高可用依賴的連環套問題 76
4.2 接入層高可用 78
4.2.1 DNS層高可用:廣域網負載均衡 79
4.2.2 接入網關高可用:局域網負載均衡 79
4.2.3 Ngin高可用 81
4.2.4 Tomcat高可用 81
4.3 業務邏輯層(微服務層)高可用 82
4.4 存儲層高可用 83
4.4.1 RedisCluster的高可用案例 83
4.4.2 HDFS的高可用案例 85
5章 高可用:多副本一致性算法 89
5.1 高可用且強一致性到底有多難 89
5.1.1 Kafka的消息丟失問題 89
5.1.2 Kafka的消息錯亂問題 93
5.1.3 MySQL半同步複製數據不一致問題 94
5.2 Paos算法解析 96
5.2.1 Paos解決什麼問題 96
5.2.2 複製狀態機 99
5.2.3 一個樸素而深刻的想法 101
5.2.4 Basic Paos算法 102
5.2.5 Multi Paos算法 105
5.3 Raft算法解析 108
5.3.1 為“可理解性”而設計 108
5.3.2 單點寫入 108
5.3.3 日誌結構 109
5.3.4 階段1:Leader選舉 113
5.3.5 階段2:日誌複製 115
5.3.6 階段3:恢復階段 116
5.3.7 安全性保證 116
5.4 Zab算法解析 119
5.4.1 複製狀態機與Primary-Backup System 119
5.4.2 zid 121
5.4.3 “序”:亂序提交與順序提交 122
5.4.4 Leader選舉:FLE算法 124
5.4.5 正常階段:2階段提交 125
5.4.6 恢復階段 126
5.5 三種算法對比與工程實現 127
6章 高可用:跨城容災與異地多活 129
6.1 跨城的關鍵物理約束:時延 129
6.2 多IDC無復制架構 130
6.2.1 單寫多讀架構 130
6.2.2 各IDC自治架構 132
6.3 同城同步複製,跨城異步複製:2地3中心 133
6.4 跨城同步複製:3地5中心 133
6.5 跨城異步複製 135
6.5.1 不能容忍數據不一致:實現部分的強一致 136
6.5.2 可以容忍數據不一致:事後修復 137
6.5.3 加快異步複製速度 137
6.6 單元化 138
6.6.1 到底什麼是單元化 138
6.6.2 什麼系統不能單元化 140
7章 CAP理論 142
7.1 CAP理論的誤解 142
7.2 現實世界不存在“強一致性”(PACELC理論) 143
2部分 業務架構
8章 業務架構定義 148
8.1 各式各樣的方 148
8.2 什麼不是業務架構 149
8.3 以終為始:業務架構到底解決哪些問題 150
9章 深刻理解現實世界:識別“真正的”需求 153
9.1 探究問題的本源 153
9.2 系統化思維 154
9.3 信息傳播的遞減效應 155
9.4 主要矛盾與次要矛盾 156
9.5 產品手段與技術手段的權衡 156
10章 深刻理解現實世界:從整體上去看待需求 158
10.1 利益相關者分析:看需求先看人 158
10.2 金字塔原理:不重不漏地拆解問題 160
10.3 需求的兩種表現形式:業務流程與業務規則 162
10.4 “業務”的閉環性 163
11章 不同粒度的建模方法與原則 165
11.1 單個系統內部的建模方法與原則 165
11.1.1 建模的通用思維:搭積木 165
11.1.2 面向對象建模的基本步驟 167
11.2 問題空間 169
11.2.1 深刻理解專業名詞 169
11.2.2 重要信息“顯性化” 170
11.2.3 抽象 171
11.3 解決方案空間 174
11.3.1 重構 174
11.3.2 設計模式 175
11.3.3 面向對象的五大原則(SOLID原則) 178
11.4 跨系統、跨團隊的建模方法與原則 179
11.4.1 康威定律 179
11.4.2 領域的劃分:高內聚與低耦合 181
11.4.3 邊界思維:接口的設計比實現重要得多 182
11.4.4 多視角描述同一個架構:架構4+1/5+1視圖 184
12章 常用架構模式 186
12.1 分層架構模式與“偽分層” 186
12.2 管道-過濾器架構模式 189
12.3 狀態機架構模式 190
12.4 業務切麵/業務閉環架構模式 192
12.5 規則引擎 193
12.5.1 什麼是規則 194
12.5.2 業務代碼如何抽象成一條條規則 194
12.5.3 規則描述語言DSL 196
12.5.4 規則引擎的兩種執行方式 197
12.6 工作流引擎 198
13章 領域驅動設計 200
13.1 傳統開發模式:面向數據庫表的“麵條式”代碼 200
13.2 DDD的基本概念 201
13.3 DDD的方 203
13.3.1 領域模型和數據模型的區別 203
13.3.2 基於DDD的分層架構 203
13.3.3 領域模型和數據模型如何映 204
13.3.4 DDD中的讀寫分離模式 206
14章 DDD的折中與微服務架構 207
14.1 軟件建模本身的困難 207
14.2 “無建模”帶來的各種問題 209
14.3 DDD的困難 210
14.4 折中後的DDD 211
14.4.1 宏觀層面:遵循子域、限界上下文、微服務三者的映關係 211
14.4.2 微觀層面:不遵循DDD的方 212
14.5 三個不同層次的讀寫分離架構 212
3部分 案例實戰
15章 基礎架構案例實戰 216
15.1 分佈式鎖 216
15.1.1 分佈式鎖的使用場景 216
15.1.2 分佈式鎖的常用實現方式與問題 216
15.1.3 用串行化代替分佈式鎖 217
15.2 服務註冊與服務發現中心 219
15.2.1 服務註冊與服務發現中心的基本原理 219
15.2.2 服務路由表的數據延遲與解決方案 220
15.2.3 服務註冊中心應該是AP系統,還是CP系統 221
15.2.4 配置中心應該是AP系統,還是CP系統 222
15.3 分佈式ID生成系統 222
15.3.1 全局**,趨勢遞增 223
15.3.2 全局**,單調遞增 225
15.3.3 全局**,連續遞增 229
16章 C端業務系統案例實戰 230
16.1 電商庫存系統 230
16.1.1 業務背景與需求分析 230
16.1.2 高並發讀與寫:緩存與本地緩存的權衡 234
16.1.3 數據一致性:冪等問題 238
16.1.4 數據一致性:扣減多個商品的原子性問題 239
16.1.5 數據一致性:並發更新的鎖問題 239
16.1.6 數據一致性:流水和庫存表如何對賬 240
16.1.7 業務架構進階之一:一個庫存模型同時支持自營與平臺
兩個商業模式 241
16.1.8 業務架構進階之二:分區售賣問題 243
16.1.9 業務架構進階之三:供應鏈庫存(不光要管售賣,還要管採購) 244
16.1.10 業務架構進階之:以“單據”為中心的庫存對賬 245
16.1.11 業務架構進階之五:先採後賣,還是先賣後採 247
16.2 秒殺系統 249
16.2.1 需求分析 249
16.2.2 異步秒殺與同步秒殺 250
16.2.3 同步秒殺系統的設計 252
16.2.4 防刷問題 253
16.2.5 名額歸還問題 254
16.2.6 同步與異步的相結合 254
16.2.7 層層限流,保護*終的核心系統 255
16.3 Feeds流 255
16.3.1 需求分析 255
16.3.2 無限長列表的實現 256
16.3.3 寫擴散和讀擴散的相結合 258
16.3.4 評論的實現 259
17章 B端業務系統案例實戰 261
17.1 規則引擎平臺 261
17.1.1 規則引擎的典型應用場景 261
17.1.2 種技術選型 263
17.1.3 規則的存儲與版本管理 265
17.1.4 可視化規則編輯 266
17.1.5 特徵庫、動作庫管理 268
17.1.6 特徵數據庫 269
17.1.7 總結 270
17.2 工作流引擎平臺 271
17.2.1 沒有工作流引擎,如何做業務開發 271
17.2.2 工作流引擎的基本思路 273
17.2.3 工作流引擎與微服務編排引擎、分佈式事務的Saga模式的區別與
聯繫 274
17.2.4 BPMN標準 278
17.2.5 工作流引擎的技術選型與Activiti介紹 281
17.2.6 對Activiti的裁剪 283
17.2.7 Activiti的性能問題與對Activiti的擴展 284
17.2.8 工作流引擎與微服務/DDD方的衝突 285
17.3 權限管理系統 286
17.3.1 權限管理系統的由來 286
17.3.2 權限如何抽象:權限Code 287
17.3.3 權限的進一步抽象 288
17.3.4 權限模型 289
17.3.5 權限系統的實現方式 289
17.3.6 API權限與微服務鑑權 292
18章 大數據與中台案例實戰 295
18.1 嚴格區分在線業務邏輯與離線業務邏輯 295
18.2 警惕後台離線任務 298
18.3 合理利用大數據交互式查詢引擎 300
18.4 中台 301
18.4.1 什麼不是中台 301
18.4.2 業務中台 303
18.4.3 數據中台 304
18.4.4 中台和組織架構 307