大型分散式網站架構設計與實踐pdf
本章主要介紹和解決以下問題,這些也是全書的基礎:
HTTP協議的工作方式與HTTP網路協議棧的結構。
如何實現基於HTTP協議和TCP協議的RPC呼叫,它們之間有何差別,分別適應何種場景。
如何實現服務的動態註冊和路由,以及軟負載均衡的實現。
1.1 基於TCP協議的RPC 3
1.1.1 RPC名詞解釋 3
1.1.2 物件的序列化 4
1.1.3 基於TCP協議實現RPC 6
1.2 基於HTTP協議的RPC 9
1.2.1 HTTP協議棧 9
1.2.2 HTTP請求與響應 15
1.2.3 通過HttpClient傳送HTTP請求 16
1.2.4 使用HTTP協議的優勢 17
1.2.5 JSON和XML 18
1.2.6 RESTful和RPC 20
1.2.7 基於HTTP協議的RPC的實現 22
1.3 服務的路由和負載均衡 30
1.3.1 服務化的演變 30
1.3.2 負載均衡演算法 33
1.3.3 動態配置規則 39
1.3.4 ZooKeeper介紹與環境搭建 40
1.3.5 ZooKeeper API使用簡介 43
1.3.6 zkClient的使用 47
1.3.7 路由和負載均衡的實現 50
1.4 HTTP服務閘道器 54
第2章 分散式系統基礎設施 58
本章主要介紹和解決如下問題:
分散式快取memcache的使用及分散式策略,包括Hash演算法的選擇。
常見的分散式系統儲存解決方案,包括MySQL的分散式擴充套件、HBase的API及使用場景、Redis的使用等。
如何使用分散式訊息系統ActiveMQ來降低系統之間的耦合度,以及進行應用間的通訊。
垂直化的搜尋引擎在分散式系統中的使用,包括搜尋引擎的基本原理、Lucene詳細的使用介紹,以及基於Lucene的開源搜尋引擎工具Solr的使用。
2.1 分散式快取 60
2.1.1 memcache簡介及安裝 60
2.1.2 memcache API與分散式 64
2.1.3 分散式session 69
2.2 持久化儲存 71
2.2.1 MySQL擴充套件 72
2.2.2 HBase 80
2.2.3 Redis 91
2.3 訊息系統 95
2.3.1 ActiveMQ & JMS 96
2.4 垂直化搜尋引擎 104
2.4.1 Lucene簡介 105
2.4.2 Lucene的使用 108
2.4.3 Solr 119
2.5 其他基礎設施 125
第3章 網際網路安全架構 126
本章主要介紹和解決如下問題:
常見的Web攻擊手段和防禦方法,如XSS、CRSF、SQL注入等。
常見的一些安全演算法,如數字摘要、對稱加密、非對稱加密、數字簽名、數字證書等。
如何採用摘要認證方式防止資訊篡改、通過數字簽名驗證通訊雙方的合法性,以及通過HTTPS協議保障通訊過程中資料不被第三方監聽和截獲。
在開放平臺體系下,OAuth協議如何保障ISV對資料的訪問是經過授權的合法行為。
3.1 常見的Web攻擊手段 128
3.1.1 XSS攻擊 128
3.1.2 CRSF攻擊 130
3.1.3 SQL注入攻擊 133
3.1.4 檔案上傳漏洞 139
3.1.5 DDoS攻擊 146
3.1.6 其他攻擊手段 149
3.2 常用的安全演算法 149
3.2.1 數字摘要 149
3.2.2 對稱加密演算法 155
3.2.3 非對稱加密演算法 158
3.2.4 數字簽名 162
3.2.5 數字證書 166
3.3 摘要認證 185
3.3.1 為什麼需要認證 185
3.3.2 摘要認證的原理 187
3.3.3 摘要認證的實現 188
3.4 簽名認證 192
3.4.1 簽名認證的原理 192
3.4.2 簽名認證的實現 193
3.5 HTTPS協議 200
3.5.1 HTTPS協議原理 200
3.5.2 SSL/TLS 201
3.5.3 部署HTTPS Web 208
3.6 OAuth協議 215
3.6.1 OAuth的介紹 215
3.6.2 OAuth授權過程 216
第4章 系統穩定性 218
本章主要介紹和解決如下問題:
常用的線上日誌分析命令的使用和日誌分析指令碼的編寫,如cat、grep、wc、less等命令的使用,以及awk、shell指令碼的編寫。
如何進行叢集的監控,包括監控指標的定義、心跳檢測、容量評估等。
如何保障高併發系統的穩定執行,如採用流量控制、依賴管理、服務分級、開關等策略,以及介紹如何設計高併發系統。
如何優化應用的效能,包括前端優化、Java程式優化、資料庫查詢優化等。
如何進行Java應用故障的線上排查,包括一系列排查工具的使用,以及一些實際案例的介紹等。
4.1 線上日誌分析 220
4.1.1 日誌分析常用命令 220
4.1.2 日誌分析指令碼 230
4.2 叢集監控 239
4.2.1 監控指標 239
4.2.2 心跳檢測 247
4.2.3 容量評估及應用水位 252
4.3 流量控制 255
4.3.1 流量控制實施 255
4.3.2 服務穩定性 260
4.3.3 高併發系統設計 265
4.4 效能優化 277
4.4.1 如何尋找效能瓶頸 277
4.4.2 效能測試工具 285
4.4.3 效能優化措施 292
4.5 Java應用故障的排查 314
4.5.1 常用的工具 314
4.5.2 典型案例分析 331
第5章 資料分析 337
本章主要介紹和解決如下問題:
分散式系統中日誌收集系統的架構。
如何通過Storm進行實時的流式資料分析。
如何通過Hadoop進行離線資料分析,通過Hive建立資料倉庫。
如何將關係型資料庫中儲存的資料匯入HDFS,以及從HDFS中將資料匯入關係型資料庫。
如何將分析好的資料通過圖形展示給使用者。
5.1 日誌收集 339
5.1.1 inotify機制 339
5.1.2 ActiveMQ-CPP 343
5.1.3 架構和儲存 359
5.1.4 Chukwa 362
5.2 離線資料分析 369
5.2.1 Hadoop專案簡介 370
5.2.2 Hadoop環境搭建 374
5.2.3 MapReduce編寫 384
5.2.4 Hive使用 389
5.3 流式資料分析 403
5.3.1 Storm的介紹 404
5.3.2 安裝部署Storm 407
5.3.3 Storm的使用 418
5.4 資料同步 422
5.4.1 離線資料同步 423
5.4.2 實時資料同步 429
5.5 資料報表 431
5.5.1 資料報表能提供什麼 431
5.5.2 報表工具Highcharts 432
參考文獻 445