在淘寶網高速發展和架構變遷中積累的寶貴經驗,網站開發、架構人員不可不讀。
名人推薦:
要用Java構建一個大流量且有複雜處理流程的網站,中介軟體技術是必要的。本書透過解決實際問題一步步地帶著你細數用 Java 構建一個大型網站的各種技術細節和注意事項。這是一本系統得可以讓你少走很多冤枉路的實戰型技術書。
~~陳皓( @左耳朵耗子) 阿里巴巴集團資深技術專家
本書詳細闡述解決大型網站架構問題時會採用的方案:服務框架、資料訪問層、訊息中介軟體、配置管理等,對為什麼要做、如何做、如何權衡得失等進行非常細緻的介紹,是一本不可多得的好書。雖然內容是基於Java的實現,但在架構層面,對使用任何語言的架構師和開發者都具有重要的參考價值。
~~ 洪強寧(@hongqn) 豆瓣網首席架構師
本書作者是淘寶Java應用架構從集中式到分散式的實際參與者,並帶領構建淘寶中介軟體。本書詳細說明大型Java網站必備的三利器:服務框架、訊息中介軟體、資料訪問層,具體設計和實現方法,其中很多是淘寶在架構演進過程中的實戰經驗和血淚教訓。書中內容既有助於開闊視野,大量寶貴的實戰經驗更可以給需要做類似產品的讀者帶來幫助。
~~ 林昊 阿里巴巴集團資深技術專家
適用:網站開發、設計者,大數據、大型網站架構系統開發、測試等的工程師。
作者簡介:
曾憲傑,淘寶花名華黎,現任淘寶技術部總監。
2007年加入淘寶網平台架構團隊,負責構建淘寶自主的訊息中介軟體系統,同期主導了淘寶資料層的創建,這兩個產品也是淘寶中介軟體中較為重要的。2010年負責整個淘寶中介軟體團隊,幫助團隊成為業內知名的Java技術團隊。2012年從中介軟體走向應用系統的研發工作,2013年負責新組建的淘寶技術部。
熟悉C++和Java,在多執行緒、併發、網路通訊及支撐大型網站的中介軟體領域有較多經驗,對新技術有濃厚的興趣,致力於帶領團隊在無線、資料、業務平台和元件開發方面取得突破。
各界推薦
名人推薦:
推薦序
從事網際網路系統開發的人員大多希望成為資深的架構師或領域專家。但大部分人員由於本身工作環境及條件的限制,缺少大型系統實作經驗,或對核心的案例缺乏真實的了解,因此很難有機會了解分散式設計中的關鍵問題及應對方案。如何才能找到有效的方法並早日成為資深系統架構師呢?
本書介紹了大型網站分散式領域的各種問題,並以Java 語言為主。這對希望提升架構能力的技術人員來說,一方面有助於他們了解理論層面系統,掌握大型系統的全貌;另一方面,由於作者具有淘寶平台豐富的架構及中介軟體開發經驗,因而書中的要點都是大型網站在實際執行中的精華經驗,不管你是使用一個已有的分散式開放原始碼解決方案,還是自行開發分散式元件,了解這些關鍵點都會幫助你快速深入地駕馭分散式領域的核心架構。
書中內容盡是實戰經驗,是作者在分散式系統的建置、拆分、服務化、部署、實戰過程中所經歷的教訓、累積的經驗。還有很多效能最佳化分析、多種方案選擇時的tradeoff 及實戰中的方案。方案選擇無所謂最佳,只有最適合,本書不僅列出方案選擇的方法,更列出方案選擇的原因。適合希望提升架構能力的技術人員閱讀,對於正在從事大數據、高平行處理、中介軟體使用或研發的第一線開發人員也很有參考價值。
楊衛華(@TimYang)
新浪網技術 總監
名人推薦:推薦序
從事網際網路系統開發的人員大多希望成為資深的架構師或領域專家。但大部分人員由於本身工作環境及條件的限制,缺少大型系統實作經驗,或對核心的案例缺乏真實的了解,因此很難有機會了解分散式設計中的關鍵問題及應對方案。如何才能找到有效的方法並早日成為資深系統架構師呢?
本書介紹了大型網站分散式領域的各種問題,並以Java 語言為主。這對希望提升架構能力的技術人員來說,一方面有助於他們了解理論層面系統,掌握大型系統的全貌;另一方面,由於作者具有淘寶平台豐富的架構及中介軟體開發經驗,因而書中的要點...
目錄
前言
Chapter 01 分散式系統介紹
1.1 初識分散式系統
1.1.1 分散式系統的定義
1.1.2 分散式系統的意義
1.2 分散式系統的基礎知識
1.2.1 組成電腦的5 要素
1.2.2 執行緒與處理程序的執行模式
1.2.3 網路通訊基礎知識
1.2.4 如何把應用從單機擴充到分散式
1.2.5 分散式系統的困難
Chapter 02 大型網站及其架構演進過程
2.1 什麼是大型網站
2.2 大型網站的架構演進
2.2.1 用Java 技術和單機來建置的網站
2.2.2 從一個單機的交易網站說起
2.2.3 單機負載警告,資料庫與應用分離
2.2.4 應用伺服器負載警告,如何讓應用伺服器走向叢集
2.2.5 資料讀取壓力變大,讀寫分離吧
2.2.6 彌補關聯式資料庫的不足,引用分散式儲存系統
2.2.7 讀寫分離後,資料庫又遇到瓶頸
2.2.8 資料庫問題解決後,應用面對的新挑戰
2.2.9 初識訊息中介軟體
2.2.10 歸納
Chapter 03 建置Java 中介軟體
3.1 Java 中介軟體的定義
3.2 建置Java 中介軟體的基礎知識
3.2.1 跨平台的Java 執行環境——JVM
3.2.2 垃圾回收與記憶體堆積分配
3.2.3 Java 平行處理程式設計的類別、介面和方法
3.2.4 動態代理
3.2.5 反射
3.2.6 網路通訊實現選擇
3.3 分散式系統中的Java 中介軟體
Chapter 04 服務架構
4.1 網站功能持續豐富後的困境與應對
4.2 服務架構的設計與實現
4.2.1 應用從集中式走向分散式所遇到的問題
4.2.2 透過範例看服務架構原型
4.2.3 服務呼叫端的設計與實現
4.2.4 服務提供端的設計與實現
4.2.5 服務升級
4.3 實戰中的最佳化
4.4 為服務化護航的服務治理
4.5 服務架構與ESB 的比較
4.6 歸納
Chapter 05 資料存取層
5.1 資料庫從單機到分散式的挑戰和應對
5.1.1 從應用使用單機資料庫開始
5.1.2 資料庫垂直/ 水平拆分的困難
5.1.3 單機變為多機後,交易如何處理
5.1.4 多機的Sequence 問題與處理
5.1.5 應對多機的資料查詢
5.2 資料存取層的設計與實現
5.2.1 如何對外提供資料存取層的功能
5.2.2 按照資料層流程的順序看資料層設計
5.2.3 獨立部署的資料存取層實現方式
5.2.4 讀寫分離的挑戰和應對
5.3 歸納
Chapter 06 訊息中介軟體
6.1 訊息中介軟體的價值
6.1.1 訊息中介軟體的定義
6.1.2 透過範例看訊息中介軟體對應用的解耦
6.2 網際網路時代的訊息中介軟體
6.2.1 如何解決訊息發送一致性
6.2.2 如何解決訊息中介軟體與使用者的強依賴問題
6.2.3 訊息模型對訊息接收的影響
6.2.4 訊息訂閱者訂閱訊息的方式
6.2.5 確保訊息可用性的做法
6.2.6 訂閱者角度的訊息重複的產生和應對
6.2.7 訊息投遞的其他屬性支援
6.2.8 確保順序的訊息佇列的設計
6.2.9 Push 和Pull 方式的比較
Chapter 07 軟負載中心與集中設定管理
7.1 初識軟負載中心
7.2 軟負載中心的結構
7.3 內容聚合功能的設計
7.4 解決服務上下線的感測
7.5 軟負載中心的資料分發的特點和設計
7.5.1 資料分發與訊息訂閱的區別
7.5.2 提升資料分發效能需要注意的問題
7.6 針對服務化的特性支援
7.6.1 軟負載資料分組
7.6.2 提供自動感測以外的上下線開關
7.6.3 維護管理路由規則
7.7 從單機到叢集
7.7.1 資料統一管理方案
7.7.2 資料對等管理方案
7.8 集中設定管理中心
7.8.1 用戶端實現和災難恢復策略
7.8.2 服務端實現和災難恢復策略
7.8.3 資料庫策略
Chapter 08 建置大型網站的其他要素
8.1 加速靜態內容存取速度的CDN
8.2 大型網站的儲存支援
8.2.1 分散式檔案系統
8.2.2 NoSQL
8.2.3 快取系統
8.3 搜索系統
8.3.1 爬蟲問題
8.3.2 倒排索引
8.3.3 查詢前置處理
8.3.4 相關度計算
8.4 資料計算支撐
8.5 發佈系統
8.6 應用監控系統
8.7 依賴管理系統
8.8 多機房問題分析
8.9 系統容量規劃
8.10 內部私有雲
後記
前言
Chapter 01 分散式系統介紹
1.1 初識分散式系統
1.1.1 分散式系統的定義
1.1.2 分散式系統的意義
1.2 分散式系統的基礎知識
1.2.1 組成電腦的5 要素
1.2.2 執行緒與處理程序的執行模式
1.2.3 網路通訊基礎知識
1.2.4 如何把應用從單機擴充到分散式
1.2.5 分散式系統的困難
Chapter 02 大型網站及其架構演進過程
2.1 什麼是大型網站
2.2 大型網站的架構演進
2.2.1 用Java 技術和單機來建置的網站
2.2.2 從一個單機的交易網站說起
2.2.3 單機負載警告,資料庫與應用分離
2.2.4 應用伺服器負載警告,如何讓應用...