架構設計 2.0:大型分佈式系統架構方法論與實踐

餘春龍

  • 出版商: 電子工業
  • 出版日期: 2021-12-01
  • 定價: $630
  • 售價: 8.5$536
  • 語言: 簡體中文
  • 頁數: 320
  • 裝訂: 平裝
  • ISBN: 7121425076
  • ISBN-13: 9787121425073
  • 相關分類: 軟體架構
  • 立即出貨

買這商品的人也買了...

商品描述

本書深刻總結了作者在大型因特網公司長期的實戰經驗,系統化地闡述了構建大型分佈式系統所需要的技術架構與業務架構方法論,並輔與詳盡的實踐剖析。全書分為三大部分:第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