解祕億級網站的一本書——億級流量網站架構核心技術

網站是直接面對廣大客戶的,是公司的門戶,必須快速響應,必須持續可用,必須抗得住洪峯。任何一個網站的發展過程中都出現過問題,影響客戶體驗和商業利益,公司業務規模越大,網站出現問題的損失越大。此時此刻,有這樣一本書可以幫到您,那就是《億級流量網站架構核心技術 跟開濤學搭建高可用高併發系統》

圖片描述

看到這部著作的人這樣評價

  • √經歷618、雙11多次大考,是保證大規模電商系統高流量、高頻次的葵花寶典。
  • √集中火力講述作者構建京東大流量系統用到的高可用和高併發原則。
  • √濃縮作者多年對網站系統升級迭代的創新、技術、實踐和積累。
  • √高可用和高併發總體原則、關鍵技術、實戰經驗的總結,以及曾經踩過的坑。
  • √教你如何構建高併發、大流量系統方能經受起億級線上用戶流量的真實考驗。
  • √從前端到DB底層設計,本書無不精細闡述。
  • √站在一個新高度思考網站後臺技術,從應用級緩存到前端緩存,從SOA到閉環。
  • √京東多年架構升級及大促備戰的高質量總結。
  • √將系統設計的深奧套路講得如此清晰,難能可貴。
  • √完整呈現如何設計響應億級請求的京東商品詳情頁系統。
  • √本書作者是將技術應用於業務、理論應用於實踐的大師。
  • √地表至強,天大福利。
  • √流量併發暴增與系統架構變革的十字路口,需要這樣一本書。
  • √一個億級流量網站和一箇中小型網站的技術架構難度截然不同。
  • √這種指導手冊式的技術書籍,值得精讀和細品。
  • √一本互聯網高併發架構設計的百科全書。
  • √從各角度剖析系統設計的優化要點和注意事項。
  • √循序漸進地將一系列複雜問題闡述得清晰、易讀。
  • √實戰出真理,選擇這本書,靠譜。

目錄

第1部分 概述 / 1
1 交易型系統設計的一些原則 / 2
1.1 高併發原則 / 3
1.2 高可用原則 / 10
1.2.1 降級 / 10
1.2.2 限流 / 11
1.2.3 切流量 / 12
1.2.4 可回滾 / 12
1.3 業務設計原則 / 12
1.3.1 防重設計 / 13
1.3.2 冪等設計 / 13
1.3.3 流程可定義 / 13
1.3.4 狀態與狀態機 / 13
1.3.5 後臺系統操作可反饋 / 14
1.3.6 後臺系統審批化 / 14
1.3.7 文檔和註釋 / 14
1.3.8 備份 / 14
1.4 總結 / 14
第2部分 高可用 / 17
2 負載均衡與反向代理 / 18
2.1 upstream配置 / 20
2.2 負載均衡算法 / 21
2.3 失敗重試 / 23
2.4 健康檢查 / 24
2.4.1 TCP心跳檢查 / 24
2.4.2 HTTP心跳檢查 / 25
2.5 其他配置 / 25
2.5.1 域名上游服務器 / 25
2.5.2 備份上游服務器 / 26
2.5.3 不可用上游服務器 / 26
2.6 長連接 / 26
2.7 HTTP反向代理示例 / 29
2.8 HTTP動態負載均衡 / 30
2.8.1 Consul+Consul-template / 31
2.8.2 Consul+OpenResty / 35
2.9 Nginx四層負載均衡 / 39
2.9.1 靜態負載均衡 / 39
2.9.2 動態負載均衡 / 41
參考資料 / 42
3 隔離術 / 43
3.1 線程隔離 / 43
3.2 進程隔離 / 45
3.3 集羣隔離 / 45
3.4 機房隔離 / 46
3.5 讀寫隔離 / 47
3.6 動靜隔離 / 48
3.7 爬蟲隔離 / 49
3.8 熱點隔離 / 50
3.9 資源隔離 / 50
3.10 使用Hystrix實現隔離 / 51
3.10.1 Hystrix簡介 / 51
3.10.2 隔離示例 / 52
3.11 基於Servlet 3實現請求隔離 / 56
3.11.1 請求解析和業務處理線程池分離 / 57
3.11.2 業務線程池隔離 / 58
3.11.3 業務線程池監控/運維/降級 / 58
3.11.4 如何使用Servlet 3異步化 / 59
3.11.5 一些Servlet 3異步化壓測數據 / 64
4 限流詳解 / 66
4.1 限流算法 / 67
4.1.1 令牌桶算法 / 67
4.1.2 漏桶算法 / 68
4.2 應用級限流 / 69
4.2.1 限流總併發/連接/請求數 / 69
4.2.2 限流總資源數 / 70
4.2.3 限流某個接口的總併發/請求數 / 70
4.2.4 限流某個接口的時間窗請求數 / 70
4.2.5 平滑限流某個接口的請求數 / 71
4.3 分佈式限流 / 75
4.3.1 Redis+Lua實現 / 76
4.3.2 Nginx+Lua實現 / 77
4.4 接入層限流 / 78
4.4.1 ngx_http_limit_conn_module / 78
4.4.2 ngx_http_limit_req_module / 80
4.4.3 lua-resty-limit-traffic / 88
4.5 節流 / 90
4.5.1 throttleFirst/throttleLast / 90
4.5.2 throttleWithTimeout / 91
參考資料 / 92
5 降級特技 / 93
5.1 降級預案 / 93
5.2 自動開關降級 / 95
5.2.1 超時降級 / 95
5.2.2 統計失敗次數降級 / 95
5.2.3 故障降級 / 95
5.2.4 限流降級 / 95
5.3 人工開關降級 / 96
5.4 讀服務降級 / 96
5.5 寫服務降級 / 97
5.6 多級降級 / 98
5.7 配置中心 / 100
5.7.1 應用層API封裝 / 100
5.7.2 配置文件實現開關配置 / 101
5.7.3 配置中心實現開關配置 / 102
5.8 使用Hystrix實現降級 / 106
5.9 使用Hystrix實現熔斷 / 108
5.9.1 熔斷機制實現 / 108
5.9.2 配置示例 / 112
5.9.3 採樣統計 / 113
6 超時與重試機制 / 117
6.1 簡介 / 117
6.2 代理層超時與重試 / 119
6.2.1 Nginx / 119
6.2.2 Twemproxy / 126
6.3 Web容器超時 / 127
6.4 中間件客戶端超時與重試 / 127
6.5 數據庫客戶端超時 / 131
6.6 NoSQL客戶端超時 / 134
6.7 業務超時 / 135
6.8 前端Ajax超時 / 135
6.9 總結 / 136
6.10 參考資料 / 137
7 回滾機制 / 139
7.1 事務回滾 / 139
7.2 代碼庫回滾 / 140
7.3 部署版本回滾 / 141
7.4 數據版本回滾 / 142
7.5 靜態資源版本回滾 / 143
8 壓測與預案 / 145
8.1 系統壓測 / 145
8.1.1 線下壓測 / 146
8.1.2 線上壓測 / 146
8.2 系統優化和容災 / 147
8.3 應急預案 / 148
第3部分 高併發 / 153
9 應用級緩存 / 154
9.1 緩存簡介 / 154
9.2 緩存命中率 / 155
9.3 緩存回收策略 / 155
9.3.1 基於空間 / 155
9.3.2 基於容量 / 155
9.3.3 基於時間 / 155
9.3.4 基於Java對象引用 / 156
9.3.5 回收算法 / 156
9.4 Java緩存類型 / 156
9.4.1 堆緩存 / 158
9.4.2 堆外緩存 / 162
9.4.3 磁盤緩存 / 162
9.4.4 分佈式緩存 / 164
9.4.5 多級緩存 / 166
9.5 應用級緩存示例 / 167
9.5.1 多級緩存API封裝 / 167
9.5.2 NULL Cache / 170
9.5.3 強制獲取最新數據 / 170
9.5.4 失敗統計 / 171
9.5.5 延遲報警 / 171
9.6 緩存使用模式實踐 / 172
9.6.1 Cache-Aside / 173
9.6.2 Cache-As-SoR / 174
9.6.3 Read-Through / 174
9.6.4 Write-Through / 176
9.6.5 Write-Behind / 177
9.6.6 Copy Pattern / 181
9.7 性能測試 / 181
9.8 參考資料 / 182
10 HTTP緩存 / 183
10.1 簡介 / 183
10.2 HTTP緩存 / 184
10.2.1 Last-Modified / 184
10.2.2 ETag / 190
10.2.3 總結 / 192
10.3 HttpClient客戶端緩存 / 192
10.3.1 主流程 / 195
10.3.2 清除無效緩存 / 195
10.3.3 查找緩存 / 196
10.3.4 緩存未命中 / 198
10.3.5 緩存命中 / 198
10.3.6 緩存內容陳舊需重新驗證 / 202
10.3.7 緩存內容無效需重新執行請求 / 205
10.3.8 緩存響應 / 206
10.3.9 緩存頭總結 / 207
10.4 Nginx HTTP緩存設置 / 208
10.4.1 expires / 208
10.4.2 if-modified-since / 209
10.4.3 nginx proxy_pass / 209
10.5 Nginx代理層緩存 / 212
10.5.1 Nginx代理層緩存配置 / 212
10.5.2 清理緩存 / 215
10.6 一些經驗 / 216
參考資料 / 217
11 多級緩存 / 218
11.1 多級緩存介紹 / 218
11.2 如何緩存數據 / 220
11.2.1 過期與不過期 / 220
11.2.2 維度化緩存與增量緩存 / 221
11.2.3 大Value緩存 / 221
11.2.4 熱點緩存 / 221
11.3 分佈式緩存與應用負載均衡 / 222
11.3.1 緩存分佈式 / 222
11.3.2 應用負載均衡 / 222
11.4 熱點數據與更新緩存 / 223
11.4.1 單機全量緩存+主從 / 223
11.4.2 分佈式緩存+應用本地熱點 / 224
11.5 更新緩存與原子性 / 225
11.6 緩存崩潰與快速修復 / 226
11.6.1 取模 / 226
11.6.2 一致性哈希 / 226
11.6.3 快速恢復 / 226
12 連接池線程池詳解 / 227
12.1 數據庫連接池 / 227
12.1.1 DBCP連接池配置 / 228
12.1.2 DBCP配置建議 / 233
12.1.3 數據庫驅動超時實現 / 234
12.1.4 連接池使用的一些建議 / 235
12.2 HttpClient連接池 / 236
12.2.1 HttpClient 4.5.2配置 / 236
12.2.2 HttpClient連接池源碼分析 / 240
12.2.3 HttpClient 4.2.3配置 / 241
12.2.4 問題示例 / 243
12.3 線程池 / 244
12.3.1 Java線程池 / 245
12.3.2 Tomcat線程池配置 / 248
13 異步併發實戰 / 250
13.1 同步阻塞調用 / 251
13.2 異步Future / 252
13.3 異步Callback / 253
13.4 異步編排CompletableFuture / 254
13.5 異步Web服務實現 / 257
13.6 請求緩存 / 259
13.7 請求合併 / 261
14 如何擴容 / 266
14.1 單體應用垂直擴容 / 267
14.2 單體應用水平擴容 / 267
14.3 應用拆分 / 268
14.4 數據庫拆分 / 271
14.5 數據庫分庫分表示例 / 275
14.5.1 應用層還是中間件層 / 275
14.5.2 分庫分表策略 / 277
14.5.3 使用sharding-jdbc分庫分表 / 279
14.5.4 sharding-jdbc分庫分表配置 / 279
14.5.5 使用sharding-jdbc讀寫分離 / 283
14.6 數據異構 / 284
14.6.1 查詢維度異構 / 284
14.6.2 聚合數據異構 / 285
14.7 任務系統擴容 / 285
14.7.1 簡單任務 / 285
14.7.2 分佈式任務 / 287
14.7.3 Elastic-Job簡介 / 287
14.7.4 Elastic-Job-Lite功能與架構 / 287
14.7.5 Elastic-Job-Lite示例 / 288
15 隊列術 / 295
15.1 應用場景 / 295
15.2 緩衝隊列 / 296
15.3 任務隊列 / 297
15.4 消息隊列 / 297
15.5 請求隊列 / 299
15.6 數據總線隊列 / 300
15.7 混合隊列 / 301
15.8 其他隊列 / 302
15.9 Disruptor+Redis隊列 / 303
15.10 下單系統水平可擴展架構 / 311
第4部分 案例 / 323
16 構建需求響應式億級商品詳情頁 / 324
16.1 商品詳情頁是什麼 / 324
16.2 商品詳情頁前端結構 / 325
16.3 我們的性能數據 / 327
16.4 單品頁流量特點 / 327
16.5 單品頁技術架構發展 / 327
16.5.1 架構1.0 / 328
16.5.2 架構2.0 / 328
16.5.3 架構3.0 / 330
16.6 詳情頁架構設計原則 / 332
16.7 遇到的一些坑和問題 / 339
16.8 其他 / 347
17 京東商品詳情頁服務閉環實踐 / 348
17.1 爲什麼需要統一服務 / 348
17.2 整體架構 / 349
17.3 一些架構思路和總結 / 350
17.4 引入Nginx接入層 / 354
17.5 前端業務邏輯後置 / 356
17.6 前端接口服務端聚合 / 357
17.7 服務隔離 / 359
18 使用OpenResty開發高性能Web應用 / 360
18.1 OpenResty簡介 / 361
18.1.1 Nginx優點 / 361
18.1.2 Lua的優點 / 361
18.1.3 什麼是ngx_lua / 361
18.1.4 開發環境 / 362
18.1.5 OpenResty生態 / 362
18.1.6 場景 / 362
18.2 基於OpenResty的常用架構模式 / 363
18.3 如何使用OpenResty開發Web應用 / 371
18.4 基於OpenResty的常用功能總結 / 375
18.5 一些問題 / 376
19 應用數據靜態化架構高性能單頁Web應用 / 377
19.1 整體架構 / 378
19.2 數據和模板動態化 / 381
19.3 多版本機制 / 381
19.4 異常問題 / 382
20 使用OpenResty開發Web服務 / 383
20.1 架構 / 383
20.2 單DB架構 / 384
20.3 實現 / 387
21 使用OpenResty開發商品詳情頁 / 405
21.1 技術選型 / 407
21.2 核心流程 / 408
21.3 項目搭建 / 408
21.4 數據存儲實現 / 410
21.5 動態服務實現 / 422
21.6 前端展示實現 / 430

內容簡介

《億級流量網站架構核心技術》一書總結並梳理了億級流量網站高可用和高併發原則,通過實例詳細介紹瞭如何落地這些原則。本書分爲四部分:概述、高可用原則、高併發原則、案例實戰。從負載均衡、限流、降級、隔離、超時與重試、回滾機制、壓測與預案、緩存、池化、異步化、擴容、隊列等多方面詳細介紹了億級流量網站的架構核心技術,讓讀者看後能快速運用到實踐項目中。

不管是軟件開發人員,還是運維人員,通過閱讀《億級流量網站架構核心技術》都能系統地學習實現億級流量網站的架構核心技術,並收穫解決系統問題的思路和方法。

關於作者

張開濤,現就職於京東,“開濤的博客”公衆號作者。寫過《跟我學Spring》《跟我學Spring MVC》《跟我學Shiro》《跟我學Nginx+Lua開發》等系列教程,博客現有1000多萬訪問量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章