本書共5章,每一章的內容幾乎都是獨立的,大家完全可以有選擇性地閱讀。第1章以大規模服務化架構作為全書的開篇,主要介紹了分布式系統架構的演變過程,以及在大規模服務調用場景下,如何實施服務治理。第2章重點介紹了在大促前夕,如何在線上實施全鏈路壓測,以及有指導性地進行容量規劃和性能優化,讓系統堅如磐石。第3章重點介紹了如何有效地對流量實施管制,若采用合理且有效的方式管制住峰值流量,使其井然有序地對系統進行訪問,則在任何情況下,系統就都能穩定運行。第4章重點介紹了在大促搶購的場景下,如何解決高并發讀和高并發寫等核心技術難題。第5章詳細地介紹了關系型數據庫的架構演變過程,還重點介紹了在實際的訂單業務場景下,如何保證數據的最終一致性。
云集基礎架構負責人,技術委員會委員,經歷了云集架構從0到1的蛻變,見證了云集業務的井噴式增長,擁有大量高并發、大流量,以及海量數據處理的實戰經驗,負責云集基礎技術平臺的架構設計和中間件研發等工作,熱衷于開源技術,常年游走在GitHub上。
目錄
第 1 章 大系統小做——大規模服務化架構 ................................................................... 1
1.1 分布式系統的架構演變過程 ............................................................................ 1
1.1.1 單機架構 ................................................................................................ 3
1.1.2 集群架構 ................................................................................................ 4
1.1.3 垂直拆分業務子系統 ............................................................................ 6
1.1.4 服務化架構演進 .................................................................................... 8
1.1.5 服務化與微服務架構的區別 ................................................................ 9
1.1.6 集群與分布式的區別 .......................................................................... 10
1.1.7 前后端分離架構演進 ...........................................................................11
1.1.8 API 網關服務 ....................................................................................... 14
1.1.9 分布式多活數據中心架構演進 .......................................................... 17
1.2 服務治理需求 ................................................................................................. 20
1.2.1 服務化與 RPC 協議 ............................................................................. 20
1.2.2 基于服務治理框架 Dubbo 實現服務化 .............................................. 22
1.2.3 警惕因超時和重試引起的系統雪崩 .................................................. 26
1.2.4 為什么需要實施服務治理 .................................................................. 28
1.2.5 關于服務化后的分布式事務問題 ...................................................... 31
1.2.6 注冊中心性能瓶頸方案 ...................................................................... 32
1.2.7 分布式多活架構下的服務就近調用方案 .......................................... 34
1.3 服務治理之調用鏈 ......................................................................................... 35
1.3.1 Google 的 Dapper 論文簡介 ................................................................ 36
1.3.2 調用鏈的實現方案 .............................................................................. 38
1.3.3 基于非侵入式運行期 AOP 方案實現數據采集上報 ......................... 48
1.3.4 調配采樣率 .......................................................................................... 57
1.4 本章小結 ......................................................................................................... 58
第 2 章 大促備戰核彈——全鏈路壓測 ........................................................................ 59
2.1 為什么要在線上實施全鏈路壓測 .................................................................. 60
2.2 業務系統如何區分壓測流量 .......................................................................... 63
2.2.1 壓測流量打標方案 .............................................................................. 63
2.2.2 在鏈路上下文信息中傳遞壓測標記 .................................................. 65
2.2.3 外部第三方接口走 Mock .................................................................... 67
2.2.4 壓測數據的隔離方案 .......................................................................... 68
2.3 如何發起大規模的壓測流量 .......................................................................... 69
2.3.1 數據構造平臺 ...................................................................................... 69
2.3.2 自研全鏈路壓測軍演系統的一些經驗分享 ...................................... 71
2.4 本章小結 ......................................................................................................... 74
第 3 章 削峰填谷——流控方案 ................................................................................... 75
3.1 為什么需要限流 ............................................................................................. 76
3.2 限流方案 ......................................................................................................... 79
3.2.1 常見的限流算法 .................................................................................. 80
3.2.2 基于 Guava 實現平均速率限流 .......................................................... 83
3.2.3 接入層限流方案 .................................................................................. 86
3.2.4 應用層限流——限時搶購限流方案 .................................................. 89
3.3 基于時間分片的削峰方案 .............................................................................. 92
3.3.1 活動分時段進行實現削峰 .................................................................. 93
3.3.2 通過答題驗證實現削峰 ...................................................................... 93
3.4 基于消息隊列的解耦、削峰、最終一致性方案 .......................................... 94
3.4.1 基于消息隊列實現解耦 ...................................................................... 95
3.4.2 常見消息中間件的使用 ...................................................................... 96
3.4.3 基于消息隊列的一些典型案例 .........................................................113
3.5 本章小結 ........................................................................................................116
第 4 章 大促搶購核心技術難題——讀/寫優化方案 ................................................... 117
4.1 緩存技術簡介 ................................................................................................118
4.1.1 本地緩存 .............................................................................................119
4.1.2 本地緩存的痛點 ................................................................................ 121
4.1.3 神秘的 off-heap 技術 ......................................................................... 122
4.2 高性能分布式緩存 Redis ............................................................................. 127
4.2.1 基于 Jedis 客戶端操作 Redis ............................................................ 128
4.2.2 基于 RedisCluster 模式實現 Sharding .............................................. 129
4.3 同一熱賣商品高并發讀難題 ........................................................................ 133
4.3.1 多級緩存方案 .................................................................................... 135
4.3.2 緩存穿透思考 .................................................................................... 139
4.3.3 RedisCluster 模式下的讀/寫分離方案 .............................................. 140
4.4 同一熱賣商品高并發寫難題 ........................................................................ 143
4.4.1 InnoDB 引擎的行鎖問題 .................................................................. 143
4.4.2 基于 Redis 樂觀鎖的庫存扣減方案 ................................................. 145
4.4.3 嵌入 Lua 腳本的庫存扣減方案 ........................................................ 149
4.4.4 基于 AliSQL 數據庫提升并發寫性能 .............................................. 155
4.5 本章小結 ....................................................................................................... 161
第 5 章 星羅棋布——分庫分表方案 .......................................................................... 162
5.1 關系數據庫的架構演變 ............................................................................... 163
5.1.1 數據庫讀/寫分離 ............................................................................... 163
5.1.2 數據庫垂直分庫 ................................................................................ 164
5.1.3 數據庫水平分庫與水平分表 ............................................................ 165
5.1.4 MySQL Sharding 與 MySQL Cluster 的區別 .................................... 166
5.2 Sharding 中間件 ............................................................................................ 167
5.2.1 常見的 Sharding 中間件對比 ........................................................... 167
5.2.2 Shark 簡介 .......................................................................................... 169
5.2.3 Shark 的架構模型 .............................................................................. 170
5.2.4 使用 Shark 實現分庫分表后的數據路由任務 ................................. 171
5.2.5 分庫分表后所帶來的影響 ................................................................ 178
5.2.6 全局唯一 SequenceID 解決方案 ....................................................... 179
5.2.7 基于 Solr 滿足多維度的復雜條件查詢 ............................................ 182
5.2.8 關于分布式事務 ................................................................................ 183
5.3 數據庫的 HA 方案 ........................................................................................ 184
5.3.1 基于配置中心實現主備切換 ............................................................ 185
5.3.2 基于 Keepalived 實現主備切換 ........................................................ 186
5.3.3 保障主備切換過程中的數據一致性 ................................................ 188
5.4 訂單業務冗余表需求 ................................................................................... 190
5.4.1 冗余表的實現方案 ............................................................................ 190
5.4.2 數據最終一致性方案 ........................................................................ 192
5.5 本章小結 ....................................................................................................... 195
附錄............................................................................................................................. 196
后記............................................................................................................................. 223