解祕億級網站的一本書——億級流量網站架構核心技術
網站是直接面對廣大客戶的,是公司的門戶,必須快速響應,必須持續可用,必須抗得住洪峰。任何一個網站的發展過程中都出現過問題,影響客戶體驗和商業利益,公司業務規模越大,網站出現問題的損失越大。此時此刻,有這樣一本書可以幫到您,那就是《億級流量網站架構核心技術 跟開濤學搭建高可用高併發系統》
看到這部著作的人這樣評價
- √經歷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多萬訪問量。
相關推薦
解祕億級網站的一本書——億級流量網站架構核心技術
網站是直接面對廣大客戶的,是公司的門戶,必須快速響應,必須持續可用,必須抗得住洪峰。任何一個網站的發展過程中都出現過問題,影響客戶體驗和商業利益,公司業務規模越大,網站出現問題的損失越大。此時此刻,有這樣一本書可以幫到您,那就是《億級流量網站架構核心技術 跟開濤
觀《億級流量網站架構核心技術》一書有感
並發編程 轉移 tin 前置 發的 中斷 有效 不難 分類 本文的架子參考張開套的《億級流量網站架構核心技術》這本書分為四個部分:指導原則,高可用,高並發,實踐案例。這篇文章說一說前三個部分,大部分內容都是我自己的思考,書只作為參考。指導原則高可用事前副本技術隔離技術配額技
Nginx負載均衡與反向代理—《億級流量網站架構核心技術》
小時 維護 額外 nat gzip 網站架構 weight 2.7 熱點 當我們的應用單實例不能支撐用戶請求時,此時就需要擴容,從一臺服務器擴容到兩臺、幾十臺、幾百臺。然而,用戶訪問時是通過如http://www.XX.com的方式訪問,在請求時,瀏覽器首先會查詢DNS服務
《億級流量網站架構核心技術》目錄一覽
在2011年年底的時候筆者就曾規劃寫一本Spring的書,但是因為是Spring入門型別的書,框架的內容更新太快,覺得還是寫部落格好一些,因此就把寫完的書稿放到了部落格(jinnianshilongnian.iteye.com,因為是龍年開的部落格,所以很多網友喊我龍年兄),並持續更新,到現在已經不
《億級流量網站架構核心技術》讀書筆記 —— 交易型系統設計的一些原則
設計一個系統,不僅需要考慮實現業務功能,還要保證系統高併發、高可用、高可靠等,在系統容量規劃(流量、容量)、SLA指定(吞吐量、響應時間、可用性、降級方案等)、壓測方案(線上、線下等)、監控報警(機器負載、響應時間、可用率等)、應急預案(容災、降級、限流、隔離、
讀書筆記: 《億級流量網站架構核心技術》(開濤的那本)
這本書知識範圍廣,但都淺嘗輒止,可以用來開闊視野,由於之前看過李智慧的《大型網站技術架構》,有部分內容是重合的,所以翻起來比較快。這裡只記錄下之前沒太瞭解的點第1章:交易型系統設計的一些原則開場白太棒了,想全部記錄下來,本章還記錄了一些設計的原則。1、一個好的設計要做到,解決
《億級流量網站架構核心技術》讀書筆記
雖然本人平時主要從事OA系統的開發,系統併發量不會特別大,主要是注重業務邏輯和快速交付,但是通過學習電商網站對高併發高可用的處理,可以促進自己對系統架構的思考,提升自己的業務水平,以後出現高併發高可用問題的時候,才不會手足無措,而且,系統架構原理是想通的,即使是
降級特技之使用Hystrix實現降級和熔斷—《億級流量網站架構核心技術》
使用Hystrix實現降級 通過配置中心可以人工進行降級,而我們也需要根據服務的超時時間進行自動降級,本部分將演示使用Hystrix實現超時自動降級。Hystrix介紹請參考“第3章 隔離術”中的Hystrix簡介部分。 public class GetStockS
《億級流量網站架構核心技術》總結
nginx後端節點健康檢查 主要有三種實現方式: 1. 本身自帶的ngx_http_proxy_module模組和ngx_http_upstream_module模組,屬於惰性檢測。 ngx_http_proxy_module:proxy_connect_
讀《億級流量網站架構核心技術》
張開濤 著 許多京東人編寫的序,寫的超級多,超級無聊。浪費紙張。 書中主要從 nginx + lua , OpenResty 這些工具介紹一些架構實現,如何配置 nginx lua 等。 Consul 是什麼?使用的架構圖是什麼樣的。這種。 Lua 是一種輕量級、
億級流量網站架構核心技術
spa ron size 擴展 環境 配置文件 需要 指定 strong 第一章 交易型系統設計的一些原則 1.1 高並發原則 1.1 高並發原則 1.1.1 無狀態
一篇文章掌握Sql-On-Hadoop核心技術
1. SQL On Hadoop 分類 1.1 查詢延時分類 AtScale 在 2016 年的一篇名為 [15]The Business Intelligence for Hadoop Benchmark 的 SQL On Hadoop 效能測評報告中指出:受查詢資料量大小,查詢型
Java之執行緒一(Java多執行緒程式設計核心技術)
一、等待/通知機制的實現1、wait()的作用是使當前執行程式碼的執行緒進行等待,將當前執行緒放入‘預執行佇列’中,並且在wait()所在的程式碼處停止執行,直到接到通知或者中斷為止。注意:在呼叫wait()之前,執行緒必須獲得該物件的物件級別鎖,所以只能在同步方法或者同步塊
《開濤:網站架構核心技術》讀書筆記系列-第15章【disruptor】
一 序: 本章業務場景:佇列在資料結構中是一種線性表,從一端插入資料,然後從另一端刪除資料。作者舉例的場景有:進行非同步處理、系統解耦、資料同步、流量削峰、緩衝、限流等。 前面的比較淺,總結起來,核心知識點有兩塊: 1. disruptor+redis佇列 2. 基於c
關於億級流量網站架構一書緩存機制的探討
obj dpa array ride 定義 from 有客 build 遠程 在京東的億級流量網站架構一書,175頁介紹緩存有這樣一段話 僅就這段代碼來看,在高並發情況下,實際上並不能阻止大量線程調用loadSync函數 當然這個書裏的代碼是作者的簡寫,這裏探討只是針對書
每分鐘訪問10w+,11種策略教你保持億級流量網站穩定性!
穩定性在大型網站執行中至關重要,面對每分鐘 10 萬次的網路訪問,稍有不慎就會引起重大故障。今天這篇文章一起討論下億級流量網站在穩定性方面的一些做法,希望對您有幫助。 一、基礎策略 1.1、配置化 配置化就是把很多業務流程相關的資料統一放在一個配置平臺上,從程式碼中抽離
爬蟲很簡單麽?直到我抓取了一千億個網頁後我懂!爬蟲真不簡單!
服務 字體 每日 還需要 道理 但是 電子商務 發表 硬件 現在爬蟲技術似乎是很容易的事情,但這種看法是很有迷惑性的。開源的庫/框架、可視化的爬蟲工具以及數據析取工具有很多,從網站抓取數據似乎易如反掌。然而,當你成規模地在網站上抓東西時,事情很快就會變得非常
JAVA架構師大型分散式高併發電商專案實戰,效能優化,叢集,億級高併發,web安全,快取架構實戰
現任58到家技術委員會主席,高階技術總監,負責企業,支付,營銷、客戶關係等多個後端業務部門。本質,技術人一枚。網際網路架構技術專家,“架構師之路”公眾號作者。曾任百度高階工程師,58同城高階架構師,58同城技術委員會主席,58同城C2C技術部負責人。 內容介紹 1.大資
VEFX維億平臺可靠嗎?以銀行級保障客戶資金安全指數交易平臺
投資平臺多如牛毛,其中摻雜了一些假冒偽劣的平臺,欺騙投資者的錢財,擾亂市場秩序。因此,很多投資者對投資平臺都心存芥蒂,對每一個平臺是否正規合法都心存疑惑,勢必追根問底。而現在,大多數人最想知道的,就是最近頻頻刷屏的VEFX維億正規性如何。 判斷一個平臺是不是正規合法,主要從兩個方面辨別:交易軟體穩定
億級流量系統架構之如何支撐百億級資料的儲存與計算
“本文聊一下筆者幾年前所帶的團隊負責的多個專案中的其中一個,用這個專案來聊聊一個億級流量系統架構演進的過程。 一、背景引入 首先簡單介紹一下專案背景,公司對合作商家提供一個付費級產品,這個商業產品背後涉及到數百人的研發團隊協作開發,包括各種業務系統來提供很多強大的業務功能,同時在整個平臺