透過梳理大型網站技術發展歷程,剖析大型網站技術架構模式,深入講述大型互聯網架構設計的核心原理,並透過一組典型網站技術架構設計案例,為讀者呈現一幅包括技術選型、架構設計、性能優化、Web安全、系統發佈、運維監控等在內的大型網站開發全景視圖。
❉業界好評
√ 經歷618、雙11多次實測,是保證大規模電商系統高流量、高頻次的葵花寶典。
√ 集中火力講述作者構建京東大流量系統用到的高可用和高平行處理原則。
√ 濃縮作者多年對網站系統升級反覆運算的創新、技術、實作和積累。
√ 高可用和高平行處理總體原則、關鍵技術、實戰經驗的總結。
√ 教你如何構建高平行處理、大流量系統方能經受起億級線上用戶流量的真實考驗。
√ 從前端到DB底層設計,本書無不精細闡述。
√ 站在一個新高度思考網站後台技術,從應用級快取到前端快取,從SOA到閉環。
√ 京東多年架構升級及大促備戰的高品質總結。
√ 將系統設計的深奧套路講得如此清晰,難能可貴。
√ 完整呈現如何設計回應億級請求的京東商品詳情頁系統。
√ 本書作者是將技術應用於業務、理論應用於實作的大師。
√ 地表至強,天大福利。
√ 流量併發暴增與系統架構變革的十字路口,需要這樣一本書。
√ 一個億級流量網站和一個中小型網站的技術架構難度截然不同。
√ 這種指導手冊式的技術書籍,值得精讀和細品。
√ 一本互聯網高平行處理架構設計的百科全書。
√ 從各角度剖析系統設計的優化要點和注意事項。
√ 循序漸進地將一系列複雜問題闡述得清晰、易讀。
適用:希望對在第一線從事開發工作或正在解決第一線問題的讀者有所幫助。
作者簡介:
張開濤 任職於京東,「開濤的博客」公眾號作者。寫過《跟我學Spring》、《跟我學Spring MVC》、《跟我學Shiro》、《跟我學Nginx Lua開發》等系列教程,博客現有1000多萬訪問量。
作者序
前 言
❉ 為什麼要寫這本書
在2011年底的時候筆者就曾規劃寫一本Spring 的書,但是因為Spring入門類型的書,架構的內容更新太快,覺得還是寫部落格好一些,因此就把寫完的書稿《跟我學Spring》放到部落格(jinnianshilongnian.iteye.com,
因為是龍年開的部落格,很多網友喊我龍年兄)中,並持續更新。大家在網上找資源時會發現,很多內容不成系統,無法系統地學習,這也是我曾經的痛點,因此我寫部落格的特色就是堅持寫系列文章——想學習某種技術只要我的部落格有就不需要去其他地方再找了,到現在已經寫過《跟我學Spring》、《Spring 雜談》、《跟我學Spring MVC》、《跟我學Shiro》、《跟我學Nginx+Lua》等系列, 累計存取量已超過1000萬。我寫部落格還有一個私心:帶新人,當時我們系統架構使用OpenResty,而團隊成員都是Java 程式設計師,所以就寫了《跟我學OpenResty(Nginx+Lua)開發》,新人跟著教學學一遍就能上手做事。
2015 年開始,筆者在個人公眾號「開濤的部落格」撰寫《聊聊高平行處理系統》系列文章,陸續發表《聊聊高平行處理系統之限流特技》、《聊聊高平行處理系統之降級特技》、《聊聊高平行處理系統之佇列術》、《建置需求回應式億級商品詳情頁》等文章。這些內容都是筆者在第一線使用過的一些技能,而這些技能又是第一線程式設計師或架構師應該掌握的必備技能。這一系列也獲得很多讀者的回饋和認可,幫助他們解決系統的一些問題。公眾號發表的有些內容偏理論,很多人不知道怎麼去用,因此就有了豐富理論和實戰內容並出版本書的想法。想學習高可用和高平行處理系統技能,看這本書就夠了,並且可以作為案頭工具書來用。
筆者耗費了大半年業餘時間才成就此書,希望這些在實戰用上的技術可以幫助到讀者。
本書說明的原則並不是筆者歸納出來的,有許多前輩們已經實作過,筆者只是用一點時間進行整理,並把工作中使用過的經驗和案例融入到書中。
成長和進步是一個循序漸進的過程,妄圖看完本書後能屠龍降魔是不可能的,別人走過的路還是要走一遍,別人踩過的地雷還是要踩一遍。正如作家格拉德威爾在《異類:不一樣的成功啟示錄》一書中的一萬小時定律:「人們眼中的天才之所以卓越非凡,並非天資超人一等,而是付出持續不斷的努力。一萬小時的錘煉是任何人從平凡變成世界級大師的必要條件」。
❉ 適合讀者群
本書希望對在第一線從事開發工作或正解決第一線問題的朋友有所幫助。
❉ 如何閱讀本書
本書的內容是理論與實戰相結合,有關的基礎知識比較多,共分為4個部分,讀者可按照任何順序閱讀每一個部分,但建議先閱讀第1部分進行系統了解。
第1部分 概述,主要介紹開發高平行處理系統的一些原則,並說明本書將要說明的原則。
第2部分 高可用,幫助讀者了解高可用的一些原則,如負載平衡、限流、降級、隔離、逾時與重試、回覆機制、壓測與備娛等,並能實際應用到自己的系統中。
第3部分 高平行處理,介紹開發高平行處理系統的一些原則,如快取、池化、非同步化、擴充、佇列等,並配合大量案例幫助讀者更進一步地掌握和運用。
第4部分 案例,介紹筆者開發過的商品詳情頁、統一服務等系統架構,還有一些靜態化架構的想法,幫助讀者了解前面介紹的一些原則。
閱讀本書需要對Java、OpenResty(Nginx+Lua)、Redis、MySQL等有一定了解,OpenResty 可以參考我的部落格《跟我學OpenResty
(Nginx+Lua) 開發》系列文章。本文提到的Nginx+Lua 等於
OpenResty。可掃碼閱讀《跟我學OpenResty(Nginx+Lua)開發》。
因為篇幅有限,本書範例很難做到全面且詳細,因此想法不要受限於書中所寫,要活學活用,舉一反三。例如多級快取的想法,可以擴充到多級儲存:記憶體→ NVMe/SATA SSD →機械碟。
❉ 勘誤和支援
由於筆者能力有限,雖然找了很多朋友幫忙校對,但書中難免會出現一些錯誤,也請讀者朋友批評指正。大家可以掃以下二維碼關注我的公眾號或存取我的部落格留言回饋錯誤和建議,筆者會積極提供解答。
❉ 致謝
首先要感謝進入京東商場時的架構組的同事們,感謝隋劍峰、鄒開紅、馮培源、李尊敬、徐濤、楊超、王戰兵、趙輝、孫炳蔚等對我的幫助,也感謝楊思勇、尚鑫、徐爍、韓笑躍等對我的信任,並給我大膽實作商場單品頁的機會,還有我的好搭檔劉峻樺,還有王曉鐘、劉海峰、林世洪、肖飛、何小鋒、鮑永成、劉行、周昱行等對我的幫助和支援,感謝我的主管徐春俊、楊建對我的支援和肯定,感謝京東和我的團隊,還有許許多多一起合作過和交流過的朋友們,沒有你們的幫助就沒有這本書的出版。
感謝張志統、肖飛、趙雲霄、馬順風、劉兵、張亮、顏晟、曾波、孫偉、王景、黃楊俊、王君富、李晉、劉嘉南、劉藝飛、吳正軒、邵東風、孫鵬、張金立、任敬表、劉冉、陳玉苗、王曉雯、李樂偉、晁志剛、王向維、趙湘建、尤鳳凱等對本書的校對和建議。感謝林世洪、肖飛、趙雲霄為本書提供素材。也感謝那些在我部落格和公眾號留言和鼓勵我的朋友,最後感謝電子工業出版社的俠少和楊璐的支持。
前 言
❉ 為什麼要寫這本書
在2011年底的時候筆者就曾規劃寫一本Spring 的書,但是因為Spring入門類型的書,架構的內容更新太快,覺得還是寫部落格好一些,因此就把寫完的書稿《跟我學Spring》放到部落格(jinnianshilongnian.iteye.com,
因為是龍年開的部落格,很多網友喊我龍年兄)中,並持續更新。大家在網上找資源時會發現,很多內容不成系統,無法系統地學習,這也是我曾經的痛點,因此我寫部落格的特色就是堅持寫系列文章——想學習某種技術只要我的部落格有就不需要去其他地方再找了,到現在已經寫過《跟我學Spring》、《Spring...
目錄
第1 部分 概述
01 交易型系統設計的一些原則
1.1 高平行處理原則
1.2 高可用原則
1.3 業務設計原則
1.4 歸納
第2 部分 高可用
02 負載平衡與反向代理
2.1 upstream 設定
2.2 負載平衡演算法
2.3 失敗重試
2.4 健康檢查
2.5 其他設定
2.6 長連接
2.7 HTTP 反向代理範例
2.8 HTTP 動態負載平衡
2.9 Nginx 四層負載平衡
參考資料
03 隔離術
3.1 執行緒隔離
3.2 處理程序隔離
3.3 叢集隔離
3.4 機房隔離
3.5 讀寫隔離
3.6 動靜隔離
3.7 爬蟲隔離
3.8 熱點隔離
3.9 資源隔離
3.10 使用Hystrix 實現隔離
3.11 基於Servlet 3 實現請求隔離
04 限流詳解
4.1 限流演算法
4.2 應用級限流
4.3 分散式限流
4.4 連線層限流
4.5 節流
參考資料
05 降級特技
5.1 降級備緩
5.2 自動開關降級
5.3 人工開關降級
5.4 讀服務降級
5.5 寫服務降級
5.6 多級降級
5.7 設定中心
5.8 使用Hystrix 實現降級
5.9 使用Hystrix 實現熔斷
06 逾時與重試機制
6.1 簡介
6.2 代理層逾時與重試
6.3 Web 容器逾時
6.4 中介軟體用戶端逾時與重試
6.5 資料庫用戶端逾時
6.6 NoSQL 用戶端逾時
6.7 業務逾時
6.8 前端Ajax 逾時
6.9 歸納
6.10 參考資料.
07 回覆機制
7.1 交易復原
7.2 程式庫回覆
7.3 部署版本回覆
7.4 資料版本回覆
7.5 靜態資源版本回覆
08 壓測與備緩
8.1系統壓測
8.2 系統最佳化和災難恢復
8.3 應急備緩
第3 部分 高平行處理
09 應用級快取
9.1 快取簡介
9.2 快取命中率
9.3 快取回收策略
9.4 Java 快取類型
9.5 應用級快取範例
9.6 快取使用模式實作
9.7 效能測試
參考資料
10 HTTP 快取
10.1 簡介
10.2 HTTP 快取
10.3 HttpClient 用戶端快取
10.4 Nginx HTTP 快取設定
10.5 Nginx 代理層快取
10.6 一些經驗
參考資料
11 多級快取
11.1 多級快取介紹
11.2 如何快取資料
11.3 分散式快取與應用負載平衡
11.4 熱點資料與更新快取
11.5 更新快取與最小性
11.6 快取當機與快速修復
12 連接池執行緒池詳解
12.1資料庫連接池
12.2 HttpClient 連接池
12.3 執行緒池
13 非同步平行處理實戰
13.1 同步阻塞呼叫
13.2 非同步Future
13.3 非同步Callback
13.4 非同步編排CompletableFuture
13.5 非同步Web 服務實現
13.6 請求快取
13.7 請求合併
14 如何擴充
14.1 單體應用垂直擴充
14.2 單體應用水平擴充
14.3 應用拆分
14.4 資料庫拆分
14.5 資料庫分資料庫分表範例
14.6 資料異質
14.7 工作系統擴充
15 佇列術
15.1 應用場景
15.2 緩衝佇列
15.3 工作佇列
15.4 訊息佇列
15.5 請求佇列
15.6 資料匯流排佇列
15.7 混合佇列
15.8 其他佇列
15.9 Disruptor+Redis 佇列
15.10 下單系統水平可擴充架構
15.11 基於Canal 實現資料異質
第4 部分 案例
16建置需求回應式億級商品詳情頁
16.1 商品詳情頁是什麼
16.2 商品詳情頁前端結構
16.3 我們的效能資料
16.4 單品頁流量特點
16.5 單品頁技術架構發展
16.6 詳情頁架構設計原則
16.7 遇到的一些地雷和問題
16.8 其他
17 京東商品詳情頁服務閉環實作
17.1 為什麼需要統一服務
17.2 整體架構
17.3 一些架構想法和歸納
17.4 引用Nginx 連線層
17.5 前端業務邏輯後置
17.6 前端介面伺服器端聚合
17.7 服務隔離
18 使用OpenResty 開發高性能Web 應用
18.1 OpenResty 簡介
18.2 以OpenResty 為基礎的常用架構模式
18.3 如何使用OpenResty 開發Web 應用
18.4 以OpenResty 為基礎的常用功能歸納
18.5 一些問題
19 應用資料靜態化架構高性能單頁Web 應用
19.1 整體架構
19.2 資料和範本動態化
19.3 多版本機制
19.4 例外問題
20使用OpenResty 開發Web 服務
20.1 架構
20.2 單DB 架構
20.3 實現
21使用OpenResty 開發廠商品詳情頁
21.1 技術選型
21.2 核心流程
21.3 專案架設
21.4 資料儲存實現
21.5 動態服務實現
21.6 前端展示實現
第1 部分 概述
01 交易型系統設計的一些原則
1.1 高平行處理原則
1.2 高可用原則
1.3 業務設計原則
1.4 歸納
第2 部分 高可用
02 負載平衡與反向代理
2.1 upstream 設定
2.2 負載平衡演算法
2.3 失敗重試
2.4 健康檢查
2.5 其他設定
2.6 長連接
2.7 HTTP 反向代理範例
2.8 HTTP 動態負載平衡
2.9 Nginx 四層負載平衡
參考資料
03 隔離術
3.1 執行緒隔離
3.2 處理程序隔離
3.3 叢集隔離
3.4 機房隔離
3.5 讀寫隔離
3.6 動靜隔離
3.7 爬蟲隔離
3.8 熱點隔離
3.9 資源隔離
3.10 使用Hystrix 實現隔離
3.11...