電商存儲系統實戰 : 架構設計與海量數據處理

李玥

  • 出版商: 機械工業
  • 出版日期: 2022-01-01
  • 售價: $534
  • 貴賓價: 9.5$507
  • 語言: 簡體中文
  • 頁數: 240
  • 裝訂: 平裝
  • ISBN: 7111697413
  • ISBN-13: 9787111697411
  • 銷售排行: 🥉 2022/4 簡體中文書 銷售排行 第 3 名
    🥇 2022/3 簡體中文書 銷售排行 第 1 名

    立即出貨

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

商品描述

電商系統覆蓋面廣,在其他業務中遇到的技術問題,大多數在電商系統中也會遇到。
本書以電商應用場景為例,講解實戰過程中常會遇到的各種存儲問題。
通過這樣的學習方式,用戶既可以快速地解決實際問題,還能提陞技術能力。
全書共18章,分為設計篇、高速增長篇、海量數據篇和技術展望四篇。
設計篇 解決電商系統從0到1構建過程中遇到的存儲問題。
比如,如何低成本、高質量地快速構建一個小規模的訂單存儲系統。
高速增長篇 關注在快速變化的過程中系統一定會遇到的一些共通問題及其應對方式。
比如,如何從單機的存儲系統逐步演進為分佈式存儲系統,如何在線平滑地擴容存儲系統。
海量數據篇 重點解決在高並發、海量數據的情況下該如何設計存儲系統的問題。
比如,如何存儲海量的埋點數據,如何在各種數據庫之間實時地遷移和同步海量數據,等等。
 技術展望篇 帶讀者了解存儲技術未來的發展趨勢,提前了解未來可能會落地的存儲新技術。

作者簡介

李玥,美團基礎技術部不錯技術專家,極客時間《後端存儲實戰課》《消息隊列高手課》等專欄作者。曾在、京東零售等公司任職。從事互聯網電商行業基礎架構領域的架構設計和研發工作多年,曾多次參與“”和“618”電商大促。專注於分佈式存儲、雲原生架構下的服務治理、分佈式消息和實時計算等技術領域,致力於推進基礎架構技術的創新與開源。

目錄大綱

前言 換一種方式學習存儲系統
篇 設計
第1章 如何設計電商系統 3
1.1 設計電商系統的核心流程 4
1.2 根據流程劃分功能模塊 6
1.3 小結 9
1.4 思考題 10

第2章 訂單系統的設計:確保訂單數據的準確性 11
2.1 訂單系統的核心功能和數據 12
2.2 如何避免重複下單 13
2.3 如何解決ABA問題 16
2.4 小結 18
2.5 思考題 19

第3章 商品系統的存儲架構設計 20
3.1 商品系統需要保存哪些數據 21
3.2 如何存儲商品的基本信息 22
3.3 使用MongoDB保存商品參數 23
3.4 使用對象存儲保存圖片和視頻 24
3.5 將商品介紹靜態化 25
3.6 小結 26
3.7 思考題 28

第4章 購物車系統的存儲架構:前後端混合存儲 29
4.1 設計購物車系統的存儲架構時需要把握什麼原則 30
4.2 如何設計“暫存購物車”的存儲 32
4.3 如何設計“用戶購物車”的存儲 34
4.4 小結 36
4.5 思考題 37

第5章 賬戶系統:用事務解決對賬問題 38
5.1 為什麼總是對不上賬 39
5.2 使用數據庫事務保證數據的一致性 40
5.3 理解事務的隔離級別 42
5.4 小結 49
5.5 思考題 50

第6章 分佈式事務:保證多個系統間的數據一致 51
6.1 什麼是分佈式事務 52
6.2 2PC:訂單與優惠券的數據一致性問題 53
6.3 本地消息表:訂單與購物車的數據一致性問題 57
6.4 小結 59
6.5 思考題 59

第7章 用Elasticsearch構建商品搜索系統 60
7.1 理解倒排索引機制 60
7.2 如何在ES中構建商品的索引 63
7.3 小結 67
7.4 思考題 68

第8章 備份與恢復 69
8.1 如何更安全地實現數據備份和恢復 70
8.2 配置MySQL HA實現高可用性 73
8.3 小結 75
8.4 思考題 76

第二篇 高速增長
第9章 優化SQL 79
9.1 每個系統必踩的“坑”:訪問數據庫超時 79
9.1.1 事故排查過程 79
9.1.2 如何避免悲劇重演 85
9.1.3 小結 87
9.1.4 思考題 88
9.2 如何避免寫出“慢SQL” 88
9.2.1 定量認識MySQL 88
9.2.2 使用索引避免全表掃描 90
9.2.3 分析SQL執行計劃 92
9.2.4 小結 93
9.2.5 思考題 94
9.3 SQL在數據庫中的執行 94
9.3.1 SQL在執行器中是如何執行的 95
9.3.2 SQL在存儲引擎中是如何執行的 98
9.3.3 小結 100
9.3.4 思考題 101

第10章 MySQL應對高並發 102
10.1 使用緩存保護MySQL 102
10.1.1 更新緩存的方式 103
10.1.2 注意避免緩存穿透引起雪崩 105
10.1.3 小結 107
10.1.4 思考題 107
10.2 讀寫分離 107
10.2.1 讀寫分離是提升MySQL並發能力的方案 108
10.2.2 注意讀寫分離帶來的數據不一致問題 111
10.2.3 小結 112
10.2.4 思考題 113
10.3 實現MySQL主從數據庫同步 113
10.3.1 如何配置MySQL的主從同步 113
10.3.2 複製狀態機:所有分佈式存儲都是這樣複製數據的 116
10.3.3 小結 117
10.3.4 思考題 118

第三篇 海量數據
第11章 MySQL應對海量數據 121
11.1 歸檔歷史數據 121
11.1.1 存檔歷史訂單數據提升查詢性能 122
11.1.2 如何批量刪除大量數據 124
11.1.3 小結 127
11.1.4 思考題 128
11.2 分庫分錶 128
11.2.1 如何規劃分庫分錶 129
11.2.2 如何選擇分片鍵 130
11.2.3 如何選擇分片算法 131
11.2.4 小結 133
11.2.5 思考題 134

第12章 緩存海量數據 135
12.1 用Redis構建緩存集群的實踐 135
12.1.1 Redis Cluster如何應對海量數據、高可用和高並發問題 136
12.1.2 為什麼Redis Cluster不適合超大規模集群 138
12.1.3 如何用Redis構建超大規模集群 139
12.1.4 小結 141
12.1.5 思考題 142
12.2 大型企業如何實現MySQL到Redis的同步 142
12.2.1 緩存穿透:超大規模系統的不能承受之痛 142
12.2.2 使用Binlog實時更新Redis緩存 144
12.2.3 小結 149
12.2.4 思考題 150
12.3 基於Binlog實現跨系統實時數據同步 150
12.3.1 使用Binlog和消息隊列構建實時數據同步系統 151
12.3.2 如何保證數據同步的實時性 152
12.3.3 小結 154
12.3.4 思考題 154

第13章 更換數據庫 155
13.1 如何實現不停機更換數據庫 155
13.2 如何實現比對和補償程序 158
13.3 小結 160
13.4 思考題 160

第14章 對象存儲:簡單的分佈式存儲系統 161
14.1 對象存儲數據是如何保存大文件的 162
14.2 如何拆分和保存大文件對象 163
14.3 小結 166
14.4 思考題 167

第15章 海量數據的存儲與查詢 168
15.1 如何存儲前端埋點之類的海量數據 168
15.1.1 使用Kafka存儲海量原始數據 169
15.1.2 使用HDFS存儲更大規模的數據 171
15.1.3 小結 173
15.1.4 思考題 173
15.2 面對海量數據,如何才能查得更快 173
15.2.1 常用的分析類系統應該如何選擇存儲 174
15.2.2 轉變思想:根據查詢選擇存儲系統 176
15.2.3 小結 178
15.2.4 思考題 178

第16章 存儲系統的技術選型 179
16.1 技術選型時應該考慮哪些因素 180
16.2 在線業務系統如何選擇存儲產品 182
16.3 分析系統如何選擇存儲產品 183
16.4 小結 183
16.5 思考題 184

第四篇 技術展望
第17章 使用NewSQL解決高可用和分片難題 187
17.1 什麼是NewSQL 187
17.2 CockroachDB如何實現數據分片和彈性擴容 188
17.3 CockroachDB能提供金融級的事務隔離性嗎 190
17.4 小結 193
17.5 思考題 193

第18章 RocksDB:不丟數據的高性能KV存儲 194
18.1 同樣是KV存儲,RocksDB有哪些不同 195
18.2 LSM-Tree如何兼顧讀寫性能 196
18.3 小結 199
18.4 思考題 199
附錄A 測試題及解析 200
附錄B 思考題解析 206
後記 讓奮鬥成為習慣 219