超大流量分佈式系統架構解決方案:人人都是架構師2.0

高翔龍

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

商品描述

本書共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