億級流量網站架構核心技術 — 跟開濤學搭建高可用高並發系統

張開濤

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

商品描述

《億級流量網站架構核心技術——跟開濤學搭建高可用高並發系統》內容提要 《億級流量網站架構核心技術》一書總結並梳理了億級流量網站高可用和高並發原則,通過實例詳細介紹瞭如何落地這些原則。本書分為四部分:概述、高可用原則、高並發原則、案例實戰。從負載均衡、限流、降級、隔離、超時與重試、回滾機制、壓測與預案、緩存、池化、異步化、擴容、隊列等多方面詳細介紹了億級流量網站的架構核心技術,讓讀者看後能快速運用到實踐項目中。 不管是軟件開發人員,還是運維人員,通過閱讀《億級流量網站架構核心技術》都能系統地學習實現億級流量網站的架構核心技術,並收獲解決系統問題的思路和方法。

目錄大綱

第1部分概述1 

1、交易型系統設計的一些原則2 
1.1高並發原則3 
1.1.1無狀態3 
1.1.2拆分3 
1.1.3服務化4 
1.1.4消息隊列4 
1.1.5數據異構6 
1.1.6緩存銀彈7 
1.1.7並發化9 
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 
…… 
參考資料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 HTT PClient客戶端緩存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 HTT PClient連接池236 
12.2.1 HTT PClient 4.5.2配置236 
12.2.2 HTT PClient連接池源碼分析240 
12.2.3 HTT PClient 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-j dbc讀寫分離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.9.1簡介303 
15.9.2 XML配置304 
15.9.3 EventWorker 305 
15.9.4 EventPublishThread 307 
15.9.5 EventHandler 308 
15.9.6 EventQueue 308 
15.10下單系統水平可擴展架構311 
15.10.1下單服務313 
15.10.2同步Worker 313 
15.11基於Canal實現數據異構314 
15.11.1 Mysql主從復制315 
15.11.2 Canal簡介316 
15.11.3 Canal示例318 

第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.6.1數據閉環332 
16.6.2數據維度化333 
16.6.3拆分系統334 
16.6.4 Worker無狀態化+任務化334 
16.6.5異步化+並發化335 
16.6.6多級緩存化335 
16.6.7動態化336 
16.6.8彈性化336 
16.6.9降級開關336 
16.6.10多機房多活337 
16.6.11多種壓測方案338 
16.7遇到的一些坑和問題339 
16.7.1 SSD性能差339 
16.7.2鍵值存儲選型壓測340 
16.7.3數據量大時JIMDB同步不動342 
16.7.4切換主從342 
16.7.5分片配置342 
16.7.6模板元數據存儲HTML 342 
16.7.7庫存接口訪問量600w/分鐘343 
16.7.8微信接口調用量暴增344 
16.7.9開啟Nginx Proxy Cache性能不升反降344 
16.7.10配送至讀服務因依賴太多,響應時間偏慢344 
16.7.11網絡抖動時,返回502錯誤346 
16.7. 12機器流量太大346 
16.8其他347 

17、京東商品詳情頁服務閉 環實踐348 
17.1為什麼需要統一服務348 
17.2整體架構349 
17.3一些架構思路和總結350 
17.3.1兩種讀服務架構模式351 
17.3.2本地緩存352 
17.3.3多級緩存353 
17.3.4統一入口/服務閉環354 
17.4引入Nginx接入層354 
17.4.1數據校驗/過濾邏輯前置354 
17.4.2緩存前置355 
17.4.3業務邏輯前置355 
17.4.4降級開關前置355 
17.4.5 AB測試356 
17.4.6灰度發布/流量切換356 
17.4.7監控服務質量356 
17.4.8限流356 
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.2 .1負載均衡363 
18.2.2單機閉環364 
18.2.3分佈式閉環367 
18.2.4接入網關368 
18.2.5核心接入Nginx功能369 
18.2.6業務Nginx功能369 
18.2.7 Web應用370 
18.3如何使用OpenResty開發Web應用371 
18.3.1項目搭建371 
18.3.2啟停腳本372 
18.3.3配置文件372 
18.3.4 nginx.conf配置文件373 
18.3.5 Nginx項目配置文件373 
18.3.6業務代碼374 
18.3.7模板374 
18.3.8公共Lua庫375 
18.3.9功能開發375 
18.4基於OpenResty的常用功能總結375 
18.5一些問題376 

19、應用數據靜態化架構高性能單頁Web應用377 
19.1整體架構378 
19.1.1 CMS系統379 
19.1.2前端展示系統380 
19.1.3控制系統380 
19.2數據和模板動態化381 
19.3多版本機制381 
19.4異常問題382 

20、使用OpenResty開發Web服務383 
20.1架構383 
20.2單DB架構384 
20.2.1 DB+Cache/數據庫讀寫分離架構384 
20.2.2 OpenResty+Local Redis+Mysql集群架構385 
20.2.3 OpenResty+Redis集群+Mysql集群架構386 
20.3實現387 
20.3.1後台邏輯388 
20.3.2前台邏輯388 
20.3 .3項目搭建389 
20.3.4 Redis+Twemproxy配置389 
20.3.5 Mysql+Atlas配置390 
20.3.6 Java+Tomcat安裝394 
20.3.7 Java+Tomcat邏輯開發395 
20.3.8 Nginx+ Lua邏輯開發401 

21、使用OpenResty開發商品詳情頁405 
21.1技術選型407 
21.2核心流程408 
21.3項目搭建408 
21.4數據存儲實現410 
21.4.1商品基本信息SSDB集群配置410 
21.4.2商品介紹SSDB集群配置413 
21.4 .3其他信息Redis配置417 
21.4.4集群測試418 
21.4.5 Twemproxy配置419 
21.5動態服務實現422 
21.5.1項目搭建422 
21.5.2項目依賴422 
21.5.3核心代碼423 
21.5.4基本信息服務424 
21.5 .5商品介紹服務426 
21.5.6其他信息服務426 
21.5.7輔助工具427 
21.5.8 web.xml配置428 
21.5.9打WAR包428 
21.5.10配置Tomcat 428 
21.5.11測試429 
21.5.12 Nginx配置429 
21.5.13綁定hosts測試430 
21.6前端展示實現430 
21.6.1基礎組件430 
21.6.2商品介紹432 
21.6.4前端展示434 
21.6.5測試442 
21.6.6優化442