《大型網站系統與Java中間件開發實踐》由電子工業出版社於2014年4月24日出版,作者是曾憲傑。
基本介紹
- 書名:大型網站系統與Java中間件開發實踐
- 作者:曾憲傑
- ISBN:9787121227615
- 頁數:360
- 定價:65.00
- 出版社:電子工業出版社
- 出版時間:2014-4-24
- 裝幀:平裝
內容簡介,作者簡介,目錄,
內容簡介
本書圍繞大型網站和支撐大型網站架構的 Java 中間件的實踐展開介紹。從分散式系統的知識切入,讓讀者對分散式系統有基本的了解;然後介紹大型網站隨著數據量、訪問量增長而發生的架構變遷;接著講述構建 Java 中間件的相關知識;之後的幾章都是根據筆者的經驗來介紹支撐大型網站架構的 Java 中間件系統的設計和實踐。希望讀者通過本書可以了解大型網站架構變遷過程中的較為通用的問題和解法,並了解構建支撐大型網站的 Java 中間件的實踐經驗。
作者簡介
曾憲傑,淘寶花名華黎,現任淘寶技術部總監。2002年畢業於浙江大學計算機系。2007年加入淘寶網平台架構團隊,負責構建淘寶自主的訊息中間件系統,同期主導了淘寶數據層的創建,這兩個產品也是淘寶中間件中較為重要的兩個。2010年下半年起開始負責整個淘寶中間件團隊,幫助團隊成為業內知名的Java技術團隊。2012年開始從中間件走向套用系統的研發工作,2013年初負責新組建的淘寶技術部。熟悉C++和Java,在多執行緒、並發、網路通信及支撐大型網站的中間件領域有較多經驗,對新技術有濃厚的興趣。致力於帶領團隊在無線、數據、業務 平台和組件化開發方面取得突破。與林昊合著有《OSGi原理與最佳實踐》一書。
目錄
第1章 分散式系統介紹 1
1.1 初識分散式系統 1
1.1.1 分散式系統的定義 1
1.1.2 分散式系統的意義 3
1.2 分散式系統的基礎知識 5
1.2.1 組成計算機的5要素 5
1.2.2 執行緒與進程的執行模式 6
1.2.3 網路通信基礎知識 13
1.2.4 如何把套用從單機擴展到分散式 18
1.2.5 分散式系統的難點 31
第2章 大型網站及其架構演進過程 35
2.1 什麼是大型網站 35
2.2 大型網站的架構演進 37
2.2.1 用Java技術和單機來構建的網站 37
2.2.2 從一個單機的交易網站說起 38
2.2.3 單機負載告警,資料庫與套用分離 40
2.2.4 套用伺服器負載告警,如何讓套用伺服器走向集群 41
2.2.5 數據讀壓力變大,讀寫分離吧 50
2.2.6 彌補關係型資料庫的不足,引入分散式存儲系統 56
2.2.7 讀寫分離後,資料庫又遇到瓶頸 58
2.2.8 資料庫問題解決後,套用面對的新挑戰 60
2.2.9 初識訊息中間件 63
2.2.10 總結 64
第3章 構建Java中間件 67
3.1 Java中間件的定義 67
3.2 構建Java中間件的基礎知識 68
3.2.1 跨平台的Java運行環境——JVM 69
3.2.2 垃圾回收與記憶體堆布局 70
3.2.3 Java並發編程的類、接口和方法 72
3.2.4 動態代理 89
3.2.5 反射 91
3.2.6 網路通信實現選擇 93
3.3 分散式系統中的Java中間件 94
第4章 服務框架 97
4.1 網站功能持續豐富後的困境與應對 97
4.2 服務框架的設計與實現 100
4.2.1 套用從集中式走向分散式所遇到的問題 100
4.2.2 透過示例看服務框架原型 101
4.2.3 服務調用端的設計與實現 107
4.2.4 服務提供端的設計與實現 132
4.2.5 服務升級 137
4.3 實戰中的最佳化 138
4.4 為服務化護航的服務治理 142
4.5 服務框架與ESB的對比 146
4.6 總結 147
第5章 數據訪問層 149
5.1 資料庫從單機到分散式的挑戰和應對 149
5.1.1 從套用使用單機資料庫開始 149
5.1.2 資料庫垂直/水平拆分的困難 150
5.1.3 單機變為多機後,事務如何處理 152
5.1.4 多機的Sequence問題與處理 165
5.1.5 應對多機的數據查詢 168
5.2 數據訪問層的設計與實現 174
5.2.1 如何對外提供數據訪問層的功能 174
5.2.2 按照數據層流程的順序看數據層設計 177
5.2.3 獨立部署的數據訪問層實現方式 192
5.2.4 讀寫分離的挑戰和應對 194
5.3 總結 200
第6章 訊息中間件 203
6.1 訊息中間件的價值 203
6.1.1 訊息中間件的定義 203
6.1.2 透過示例看訊息中間件對套用的解耦 204
6.2 網際網路時代的訊息中間件 208
6.2.1 如何解決訊息傳送一致性 209
6.2.2 如何解決訊息中間件與使用者的強依賴問題 218
6.2.3 訊息模型對訊息接收的影響 222
6.2.4 訊息訂閱者訂閱訊息的方式 229
6.2.5 保證訊息可靠性的做法 230
6.2.6 訂閱者視角的訊息重複的產生和應對 245
6.2.7 訊息投遞的其他屬性支持 249
6.2.8 保證順序的訊息佇列的設計 252
6.2.9 Push和Pull方式的對比 257
第7章 軟負載中心與集中配置管理 259
7.1 初識軟負載中心 259
7.2 軟負載中心的結構 261
7.3 內容聚合功能的設計 263
7.4 解決服務上下線的感知 267
7.5 軟負載中心的數據分發的特點和設計 269
7.5.1 數據分發與訊息訂閱的區別 269
7.5.2 提升數據分發性能需要注意的問題 271
7.6 針對服務化的特性支持 272
7.6.1 軟負載數據分組 272
7.6.2 提供自動感知以外的上下線開關 273
7.6.3 維護管理路由規則 273
7.7 從單機到集群 274
7.7.1 數據統一管理方案 275
7.7.2 數據對等管理方案 276
7.8 集中配置管理中心 280
7.8.1 客戶端實現和容災策略 282
7.8.2 服務端實現和容災策略 284
7.8.3 資料庫策略 285
第8章 構建大型網站的其他要素 287
8.1 加速靜態內容訪問速度的CDN 287
8.2 大型網站的存儲支持 291
8.2.1 分散式檔案系統 292
8.2.2 NoSQL 294
8.2.3 快取系統 298
8.3 搜尋系統 301
8.3.1 爬蟲問題 302
8.3.2 倒排索引 302
8.3.3 查詢預處理 304
8.3.4 相關度計算 304
8.4 數據計算支撐 304
8.5 發布系統 307
8.6 套用監控系統 310
8.7 依賴管理系統 312
8.8 多機房問題分析 315
8.9 系統容量規劃 317
8.10 內部私有雲 319
後記321
1.1 初識分散式系統 1
1.1.1 分散式系統的定義 1
1.1.2 分散式系統的意義 3
1.2 分散式系統的基礎知識 5
1.2.1 組成計算機的5要素 5
1.2.2 執行緒與進程的執行模式 6
1.2.3 網路通信基礎知識 13
1.2.4 如何把套用從單機擴展到分散式 18
1.2.5 分散式系統的難點 31
第2章 大型網站及其架構演進過程 35
2.1 什麼是大型網站 35
2.2 大型網站的架構演進 37
2.2.1 用Java技術和單機來構建的網站 37
2.2.2 從一個單機的交易網站說起 38
2.2.3 單機負載告警,資料庫與套用分離 40
2.2.4 套用伺服器負載告警,如何讓套用伺服器走向集群 41
2.2.5 數據讀壓力變大,讀寫分離吧 50
2.2.6 彌補關係型資料庫的不足,引入分散式存儲系統 56
2.2.7 讀寫分離後,資料庫又遇到瓶頸 58
2.2.8 資料庫問題解決後,套用面對的新挑戰 60
2.2.9 初識訊息中間件 63
2.2.10 總結 64
第3章 構建Java中間件 67
3.1 Java中間件的定義 67
3.2 構建Java中間件的基礎知識 68
3.2.1 跨平台的Java運行環境——JVM 69
3.2.2 垃圾回收與記憶體堆布局 70
3.2.3 Java並發編程的類、接口和方法 72
3.2.4 動態代理 89
3.2.5 反射 91
3.2.6 網路通信實現選擇 93
3.3 分散式系統中的Java中間件 94
第4章 服務框架 97
4.1 網站功能持續豐富後的困境與應對 97
4.2 服務框架的設計與實現 100
4.2.1 套用從集中式走向分散式所遇到的問題 100
4.2.2 透過示例看服務框架原型 101
4.2.3 服務調用端的設計與實現 107
4.2.4 服務提供端的設計與實現 132
4.2.5 服務升級 137
4.3 實戰中的最佳化 138
4.4 為服務化護航的服務治理 142
4.5 服務框架與ESB的對比 146
4.6 總結 147
第5章 數據訪問層 149
5.1 資料庫從單機到分散式的挑戰和應對 149
5.1.1 從套用使用單機資料庫開始 149
5.1.2 資料庫垂直/水平拆分的困難 150
5.1.3 單機變為多機後,事務如何處理 152
5.1.4 多機的Sequence問題與處理 165
5.1.5 應對多機的數據查詢 168
5.2 數據訪問層的設計與實現 174
5.2.1 如何對外提供數據訪問層的功能 174
5.2.2 按照數據層流程的順序看數據層設計 177
5.2.3 獨立部署的數據訪問層實現方式 192
5.2.4 讀寫分離的挑戰和應對 194
5.3 總結 200
第6章 訊息中間件 203
6.1 訊息中間件的價值 203
6.1.1 訊息中間件的定義 203
6.1.2 透過示例看訊息中間件對套用的解耦 204
6.2 網際網路時代的訊息中間件 208
6.2.1 如何解決訊息傳送一致性 209
6.2.2 如何解決訊息中間件與使用者的強依賴問題 218
6.2.3 訊息模型對訊息接收的影響 222
6.2.4 訊息訂閱者訂閱訊息的方式 229
6.2.5 保證訊息可靠性的做法 230
6.2.6 訂閱者視角的訊息重複的產生和應對 245
6.2.7 訊息投遞的其他屬性支持 249
6.2.8 保證順序的訊息佇列的設計 252
6.2.9 Push和Pull方式的對比 257
第7章 軟負載中心與集中配置管理 259
7.1 初識軟負載中心 259
7.2 軟負載中心的結構 261
7.3 內容聚合功能的設計 263
7.4 解決服務上下線的感知 267
7.5 軟負載中心的數據分發的特點和設計 269
7.5.1 數據分發與訊息訂閱的區別 269
7.5.2 提升數據分發性能需要注意的問題 271
7.6 針對服務化的特性支持 272
7.6.1 軟負載數據分組 272
7.6.2 提供自動感知以外的上下線開關 273
7.6.3 維護管理路由規則 273
7.7 從單機到集群 274
7.7.1 數據統一管理方案 275
7.7.2 數據對等管理方案 276
7.8 集中配置管理中心 280
7.8.1 客戶端實現和容災策略 282
7.8.2 服務端實現和容災策略 284
7.8.3 資料庫策略 285
第8章 構建大型網站的其他要素 287
8.1 加速靜態內容訪問速度的CDN 287
8.2 大型網站的存儲支持 291
8.2.1 分散式檔案系統 292
8.2.2 NoSQL 294
8.2.3 快取系統 298
8.3 搜尋系統 301
8.3.1 爬蟲問題 302
8.3.2 倒排索引 302
8.3.3 查詢預處理 304
8.3.4 相關度計算 304
8.4 數據計算支撐 304
8.5 發布系統 307
8.6 套用監控系統 310
8.7 依賴管理系統 312
8.8 多機房問題分析 315
8.9 系統容量規劃 317
8.10 內部私有雲 319
後記321