第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
· · · · · · (
收起)
本書圍繞大型網站和支撐大型網站架構的 Java 中間件的實踐展開介紹。從分布式係統的知識切入,讓讀者對分布式係統有基本的瞭解;然後介紹大型網站隨著數據量、訪問量增長而發生的架構變遷;接著講述構建 Java 中間件的相關知識;之後的幾章都是根據筆者的經驗來介紹支撐大型網站架構的 Java 中間件係統的設計和實踐。希望讀者通過本書可以瞭解大型網站架構變遷過程中的較為通用的問題和解法,並瞭解構建支撐大型網站的 Java 中間件的實踐經驗。對於有一定網站開發、設計經驗,並想瞭解大型網站架構和支撐這種架構的係統的開發、測試等的相關工程人員,本書有很大的參考意義;對於沒有網站開發設計經驗的人員,通過本書也能宏觀瞭解大型網站的架構及相關問題的解決思路和方案。