億級流量系統架構設計與實戰

李琛軒

  • 出版商: 電子工業
  • 出版日期: 2024-05-01
  • 售價: $768
  • 貴賓價: 9.5$730
  • 語言: 簡體中文
  • 頁數: 432
  • ISBN: 7121476983
  • ISBN-13: 9787121476983
  • 立即出貨

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

相關主題

商品描述

本書講解億級流量系統架構的設計方法及實戰經驗,在內容結構上分為三大篇:架構知識篇(第1~3章),主要講解海量用戶應用後台的組成結構、高並發處理和服務可用性保障,首先講解後台由哪些關鍵組件構成及機房搭建思路,然後講解後台在應對高並發讀請求和寫請求時的通用處理手段,最後講解通用的服務治理手段以保障後台高效運行。基礎服務設計篇(第4~6章),主要講解幾個基礎服務的架構設計,這里選取的基礎服務幾乎為所有互聯網後台所需的專門系統,包括分佈式唯一ID生成器、用戶登錄服務和海量消息推送系統;核心服務設計篇(第7~13章),主要講解常見社交互動場景中所需的核心服務的架構設計,包括內容發布系統、通用計數系統、排行榜服務、用戶關系服務、Timeline Feed服務、評論服務和IM服務。

目錄大綱

架構知識篇
第1章 大型互聯網公司的基礎架構 2
1.1 引言:單機房的內部架構 2
1.2 客戶端連接機房的技術1:DNS 5
1.2.1 DNS的意義 5
1.2.2 域名結構 6
1.2.3 域名服務器 6
1.2.4 域名解析過程 7
1.3 客戶端連接機房的技術2:HTTP DNS 9
1.3.1 DNS存在的問題 9
1.3.2 HTTP DNS的原理 10
1.3.3 HTTP DNS實踐 11
1.4 接入層的技術演進 12
1.4.1 Nginx 13
1.4.2 LVS 19
1.4.3 LVS+Nginx接入層的架構 25
1.5 服務發現 28
1.5.1 註冊與發現 29
1.5.2 可用地址管理 30
1.5.3 地址變更推送 31
1.6 RPC服務 32
1.7 存儲層技術:MySQL 35
1.7.1 關系型數據庫 35
1.7.2 MySQL 37
1.7.3 高可用架構1:主從模式 37
1.7.4 高可用架構2:MHA 40
1.7.5 高可用架構3:MMM 41
1.7.6 高可用架構4:MGR 43
1.8 存儲層技術:Redis 44
1.8.1 高可用架構1:主從模式 44
1.8.2 高可用架構2:哨兵模式 45
1.8.3 高可用架構3:集群模式 46
1.8.4 高可用架構4:中心化集群架構 50
1.9 存儲層技術:LSM Tree 53
1.9.1 LSM Tree的原理 53
1.9.2 讀/寫數據流程 56
1.10 存儲層技術:其他NoSQL數據庫 57
1.11 消息中間件技術 61
1.11.1 通信模式與用途 62
1.11.2 Kafka 64
1.11.3 Kafka的高可用 67
1.12 多機房:主備機房 69
1.13 多機房:同城雙活 71
1.13.1 存儲層改造 71
1.13.2 靈活實施 73
1.13.3 分流與故障切流 74
1.13.4 兩地三中心 77
1.14 多機房:異地多活 78
1.14.1 架構要點 78
1.14.2 MySQL DRC的原理 80
1.14.3 Redis DRC的原理 83
1.14.4 分流策略 84
1.14.5 數據復制鏈路 85
1.15 本章小結 86

第2章 通用的高並發架構設計 88
2.1 高並發架構設計的要點 88
2.1.1 形成高並發系統的必要條件 88
2.1.2 高並發系統的衡量指標 89
2.1.3 高並發場景分類 90
2.2 高並發讀場景方案1:數據庫讀/寫分離 91
2.2.1 讀/寫分離架構 91
2.2.2 讀/寫請求路由方式 91
2.2.3 主從延遲與解決方案 92
2.3 高並發讀場景方案2:本地緩存 93
2.3.1 基本的緩存淘汰策略 93
2.3.2 W-TinyLFU策略 94
2.3.3 緩存擊穿與SingleFlight 95
2.4 高並發讀場景方案3:分佈式緩存 100
2.4.1 分佈式緩存選型 100
2.4.2 如何使用Redis緩存 101
2.4.3 緩存穿透 102
2.4.4 緩存雪崩 103
2.4.5 緩存更新 103
2.5 高並發讀場景總結:CQRS 105
2.5.1 CQRS的簡要架構與實現 106
2.5.2 更多的使用場景 107
2.5.3 CQRS架構的特點 108
2.6 高並發寫場景方案1:數據分片之數據庫分庫分表 108
2.6.1 分庫和分表 109
2.6.2 垂直拆分 109
2.6.3 水平拆分 111
2.6.4 水平拆分規則 113
2.6.5 擴容方案 117
2.6.6 其他數據分片形式 120
2.7 高並發寫場景方案2:異步寫與寫聚合 120
2.7.1 異步寫 121
2.7.2 寫聚合 122
2.8 本章小結 122
第3章 通用的服務可用性治理手段 124
3.1 微服務架構與網絡調用 124
3.2 重試 126
3.2.1 冪等接口 126
3.2.2 重試時機 130
3.2.3 重試風險與重試風暴 130
3.2.4 重試控制:不重試的請求 131
3.2.5 重試控制:重試請求比 132
3.3 熔斷與隔離 132
3.3.1 服務雪崩 133
3.3.2 Hystrix熔斷器 134
3.3.3 Resilience4j和Sentinel熔斷器 136
3.3.4 共享資源與艙壁隔離 137
3.3.5 艙壁隔離的實現 138
3.4 限流 139
3.4.1 頻控 140
3.4.2 單機限流1:時間窗口 141
3.4.3 單機限流2:漏桶算法 143
3.4.4 單機限流3:令牌桶算法 144
3.4.5 全局限流 146
3.5 自適應限流 148
3.5.1 服務與等待隊列 149
3.5.2 基於請求排隊時間 150
3.5.3 基於延遲比率 151
3.5.4 其他方案 152
3.6 降級策略 155
3.6.1 服務依賴度降級 155
3.6.2 讀請求降級 158
3.6.3 寫請求降級 159
3.7 本章小結 160

基礎服務設計篇
第4章 唯一ID生成器 164
4.1 分佈式唯一ID 164
4.1.1 全局唯一與UUID 164
4.1.2 唯一ID生成器的特點 165
4.1.3 單調遞增與趨勢遞增 167
4.2 單調遞增的唯一ID 168
4.2.1 Redis INCRBY命令 168
4.2.2 基於數據庫的自增主鍵 171
4.2.3 高可用架構 172
4.3 趨勢遞增的唯一ID:基於時間戳 174
4.3.1 正確使用時間戳 174
4.3.2 Snowflake算法 175
4.3.3 Snowflake算法的靈活應用 175
4.3.4 分配服務實例ID 177
4.3.5 時鐘回撥問題與解決方案 179
4.3.6 最終架構 179
4.4 趨勢遞增的唯一ID:基於數據庫的自增主鍵 180
4.4.1 分庫分表架構 181
4.4.2 批量緩存架構 182
4.5 美團點評開源方案:Leaf 183
4.5.1 Leaf-segment方案 183
4.5.2 Leaf-snowflake方案 185
4.6 本章小結 187
第5章 用戶登錄服務 189
5.1 用戶賬號 189
5.2 用戶登錄服務的功能要點 190
5.3 密碼保護 192
5.3.1 使用HTTPS通信 192
5.3.2 非對稱加密 193
5.3.3 密碼加密存儲 194
5.4 手機號登錄和郵箱登錄 194
5.4.1 數據表設計 195
5.4.2 用戶註冊 195
5.4.3 用戶登錄 196
5.4.4 手機號一鍵登錄 197
5.5 第三方登錄 199
5.5.1 OAuth 2標準 200
5.5.2 客戶端接入第三方登錄 201
5.5.3 服務端接入第三方登錄 202
5.5.4 第三方登錄的完整流程總結 203
5.6 登錄態管理 204
5.6.1 存儲型方案:Session 205
5.6.2 計算型方案:令牌 207
5.6.3 長短令牌方案 208
5.7 掃碼登錄 210
5.7.1 二維碼 210
5.7.2 掃碼登錄的場景介紹 211
5.7.3 掃碼登錄的技術實現 211
5.8 本章小結 213
第6章 海量推送系統 215
6.1 分佈式長連接服務的技術要素分析 216
6.1.1 WebSocket協議簡介 216
6.1.2 長連接服務器 217
6.1.3 分佈式推送服務器 218
6.1.4 路由算法 219
6.2 海量推送系統設計 220
6.2.1 整體架構設計 220
6.2.2 長連接的建立過程 221
6.2.3 消息格式設計 222
6.2.4 消息推送接口 223
6.2.5 單點消息推送的細節 224
6.2.6 全局消息推送的細節 225
6.2.7 多點消息推送的細節 226
6.2.8 pusher平滑升級的問題 227
6.2.9 pusher擴容的問題 236
6.3 本章小結 237
核心服務設計篇
第7章 內容發布系統 240
7.1 內容發布系統的設計背景 240
7.2 內容存儲設計 241
7.2.1 內容數據的存儲 241
7.2.2 內容元信息的存儲 243
7.2.3 內容主體的存儲選型 244
7.2.4 音視頻轉碼 245
7.3 內容審核設計 246
7.3.1 內容審核的必要性 246
7.3.2 內容的審核時機策略 246
7.3.3 如何審核內容 247
7.3.4 審核中心的對外交互 249
7.4 內容的全生命周期管理設計 250
7.4.1 內容的創建設計 250
7.4.2 內容的修改設計 252
7.4.3 內容審核結果處理與版本控制設計 254
7.4.4 內容的刪除與下架設計 256
7.5 內容分發設計 256
7.5.1 內容分發渠道 256
7.5.2 何時通知分發渠道 257
7.5.3 將內容投遞到分發渠道 257
7.6 內容展示設計 258
7.6.1 內容數據的特點 259
7.6.2 使用CDN加速靜態資源訪問 259
7.6.3 使用緩存和多副本支撐高並發讀取 260
7.6.4 內容展示流程設計 263
7.7 完整架構總覽 265
7.8 本章小結 267
第8章 通用計數系統 268
8.1 計數的常見用途 268
8.2 如何存儲計數數據 269
8.2.1 計數數據的特點 269
8.2.2 關系型數據庫的困境 270
8.2.3 是否要使用關系型數據庫 270
8.2.4 使用Redis存儲計數數據 271
8.3 海量計數服務設計 272
8.3.1 Redis數據類型 272
8.3.2 計數累計與讀取的示例 274
8.3.3 優化內存的調研 274
8.3.4 優化內存:定製化Redis 276
8.3.5 冷熱數據分離 279
8.3.6 應對過熱數據 280
8.3.7 計數服務架構圖 281
8.3.8 計數服務的適用範圍 282
8.4 本章小結 283
第9章 排行榜服務 284
9.1 排行榜的應用場景 284
9.2 排行榜技術的特點 285
9.3 使用Redis實現排行榜 285
9.3.1 使用Redis ZSET 286
9.3.2 冪等更新 287
9.3.3 同積分排名處理 289
9.3.4 服務設計 291
9.3.5 關於大Key的問題 295
9.4 粗估排行榜的實現 296
9.4.1 線段樹 296
9.4.2 粗估排名的實現 299
9.5 精確排名與粗估排名結合 306
9.6 本章小結 309

第10章 用戶關系服務 310
10.1 用戶關系服務的職責 310
10.2 基於Redis ZSET的設計 311
10.3 基於數據庫的設計 312
10.3.1 最初的想法 312
10.3.2 應對分庫分表 313
10.3.3 Following表的索引設計 314
10.3.4 Follower表的索引設計 316
10.3.5 進階:回表問題與優化 316
10.3.6 關註數和粉絲數 317
10.4 緩存查詢 318
10.4.1 緩存什麽數據 318
10.4.2 緩存的創建與更新策略 319
10.4.3 本地緩存 321
10.4.4 緩存與數據庫結合的最終方案 321
10.5 基於圖數據庫的設計 323
10.5.1 實現用戶關系 323
10.5.2 應用權衡 327
10.6 本章小結 328
第11章 Timeline Feed服務 330
11.1 Feed流的分類 330
11.2 Timeline Feed流的功能特性 331
11.3 拉模式與用戶發件箱 331
11.4 推模式與用戶收件箱 333
11.5 推拉結合模式 334
11.5.1 結合思路 334
11.5.2 區分活躍用戶 335
11.6 實現Timeline Feed服務的關鍵技術細節 336
11.6.1 內容與用戶收件箱的交互 336
11.6.2 推送子任務 338
11.6.3 收件箱保存什麽數據 339
11.6.4 讀請求參數 340
11.6.5 使用數據庫實現收件箱 340
11.6.6 使用Redis ZSET實現收件箱 343
11.6.7 通過推拉結合模式構建Timeline Feed數據 348
11.6.8 收尾工作 355
11.7 本章小結 356
第12章 評論服務 357
12.1 評論功能 357
12.2 評論列表模式 358
12.3 評論服務設計的初步想法 361
12.4 單級模式服務設計 361
12.4.1 數據表的初步設計 361
12.4.2 讀/寫接口與索引 362
12.4.3 數據庫的最終設計 363
12.4.4 高並發問題 364
12.5 蓋樓模式服務設計 366
12.5.1 數據庫方案:遞歸查詢 366
12.5.2 數據庫方案:保存完整樓層 368
12.5.3 圖數據庫方案 369
12.6 二級模式服務設計 370
12.6.1 數據特點 371
12.6.2 時間順序:數據庫方案 371
12.6.3 時間順序:圖數據庫方案 373
12.6.4 評論審核與狀態 376
12.6.5 按照熱度排序 377
12.6.6 高並發處理 381
12.6.7 架構總覽 385
12.7 本章小結 386
第13章 IM服務 388
13.1 IM的意義與核心能力 388
13.2 IM相關概念 389
13.3 消息投遞 390
13.3.1 存儲消息:讀擴散與寫擴散 390
13.3.2 接收消息:拉模式與推模式 393
13.4 存儲初探 395
13.5 消息的有序性保證 396
13.5.1 消息亂序 396
13.5.2 客戶端發送消息 396
13.5.3 服務端存儲消息 397
13.5.4 服務端推送消息與客戶端補償 398
13.6 會話管理與命令消息 401
13.6.1 創建單聊會話 402
13.6.2 創建群聊會話 402
13.6.3 命令消息 403
13.7 消息回執 404
13.7.1 上報已讀消息 404
13.7.2 記錄已讀消息 404
13.8 階段性匯總:存儲設計 405
13.9 高並發架構 408
13.9.1 發送消息 409
13.9.2 數據緩存 409
13.9.3 消息分級 410
13.9.4 直播間彈幕模式 411
13.10 本章小結:最終架構 413