大型分布式網站架構設計與實踐
基本內容
書名:大型分布式網站架構設計與實踐
類別:分布式、架構、互聯網、計算機、設計模式、服務器、網站
出版時間:2014年9月1日
定價:79 元
作者:陳康賢
出版社:電子工業出版社
頁數:460 頁
ISBN:9787121238857
內容簡介
《大型分布式網站架構設計與實踐》主要介紹了大型分布式網站架構所涉及的一些技術細節,包括SOA架構的實現、互聯網安全架構、構建分布式網站所依賴的基礎設施、系統穩定性保障和海量數據分析等內容;深入地講述了大型分布式網站架構設計的核心原理,並通過一些架構設計的典型案例,幫助讀者了解大型分布式網站設計的一些常見場景及遇到的問題。
作者結合自己在阿里巴巴及淘寶網的實際工作經歷展開論述。《大型分布式網站架構設計與實踐》既可供初學者學習,幫助讀者了解大型分布式網站的架構,以及解決問題的思路和方法,也可供業界同行參考,給日常工作帶來啟發。
作者簡介
陳康賢,淘寶花名龍隆,淘寶技術部資深研發工程師,長期在在淘寶分布式環境下耳濡目染,在分布式系統架構設計、高並發系統設計、系統穩定性保障等領域積累了較為豐富的實踐經驗。曾在程序員上發表過《漫談基於http協議的SOA架構》《淺析HTTP平台的安全穩定性架構》兩篇文章,對基於HTTP協議的SOA架構有深入研究,在排查解決線上問題和故障方面有豐富的實踐經驗,擅於利用數據分析解決實際問題,對新技術有濃厚的興趣。
名家推薦
2008年,TB網隨着訪問量/數據量的巨增,以及開發人員的增長,原有的架構體系已經無法支撐,於是在那一年TB網將系統改造為了一個大型分布式的網站。作者目前就職於阿里集團,清晰地看到了目前TB這個大型分布式網站的架構體系,這個架構體系其實是非常多方面的技術的融合,要掌握好最重要的首先是看清全貌,但這也是最難的。本書向大家展示了一個大型分布式網站需要的技術的全貌。
——阿里巴巴集團資深技術專家 林昊(畢玄)
筆者通過大量的實踐來分析分布式網站設計過程中常見的難題並逐步給予解答,通過本書可以對分布式網站設計進行一個系統性學習,值得一閱!
——聚划算技術部高級技術專家 劉國華(索尼)
當下有規模的網站,都採用分布式的架構實現。那麼網站如何做到分布式,以及有哪些基礎的分布式系統,都是我們的架構師和開發人員想去了解的,而相關的安全問題,以及穩定性、性能、應用的線上問題定位分析等方面的問題也很重要,本書能夠比較全面地給讀者帶來這些相關知識的一個全貌,能夠讓從業人員對於這些知識有一個比較全面的了解。而康賢也是一個一直奮戰在一線的技術人員,親身經歷的總結會顯得更加實戰和珍貴。
——TB技術部總監 曾憲傑(華黎)
目錄
第1章 面向服務的體系架構(SOA) 1
本章主要介紹和解決以下問題,這些也是全書的基礎:
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.2HTTP請求與響應 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.3SQL注入攻擊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
序言
在大型網站架構的演變過程中,集中式的架構設計出於對系統的可擴展性、可維護性以及成本等多方面因素的考慮,逐漸被放棄,轉而採用分布式的架構設計。分布式架構的核心思想是採用大量廉價的PC Server,構建一個低成本、高可用、高可擴展、高吞吐的集群系統,以支撐海量的用戶訪問和數據存儲,理論上具備無限的擴展能力。分布式系統的設計,是一門複雜的學問,它涉及到通信協議、遠程調用,服務治理,系統安全、存儲、搜索、監控、穩定性保障、性能優化、數據分析、數據挖掘等各個領域,對任何一個領域的深入挖掘,都能夠編寫一本篇幅不亞於本書的專門書籍。本書結合作者在阿里巴巴及TB網的實際工作經歷,重點介紹大型分布式系統的架構設計,同時,為避免過度專注於理論而使得內容顯得空洞,作者穿插介紹了很多實踐的案例,儘量讓每一個關鍵的技術點都落到實處,相信能夠幫助讀者更好地理解本書的內容。
內容大綱
全書共5章,章與章之間幾乎是相互獨立的,沒有必然的前後依賴關係,因此,讀者可以從任何一個感興趣的專題開始閱讀,但是,每一章的各個小節之間的內容是相互關聯的,因此,最好按照原文的先後順序閱讀。
第1章主要介紹企業內部SOA(Service Oriented Architecture,即面向服務的體系結構)架構的實現,包括HTTP協議的工作原理,基於TCP協議和基於HTTP協議的RPC實現,如何實現服務的路由和負載均衡,HTTP服務網關的架構。
第2章主要介紹如何保障互聯網通信的安全性,包括一些常見攻擊手段的介紹;常見的安全算法,如數字摘要、對稱加密、非對稱加密、數字簽名、數字證書的原理和使用;常用通信認證方式,包括摘要認證、簽名認證,以及基於HTTPS協議的安全通信;另外還介紹了通過OAuth協議的授權過程。
第3章介紹一些分布式系統所依賴的基礎設施,包括分布式緩存,持久化存儲。持久化存儲又涵蓋了傳統的關係型數據庫MmySQL,以及近年來開始流行NOSQL數據庫如HBase、Redis,消息系統及垂直化搜索引擎等。
第4章介紹如何保障系統運行的穩定性,包括在線日誌分析、集群監控、流量控制、性能優化,以及常用的Java應用故障排查工具和典型案例。
第5章介紹如何對海量數據進行分析,包括數據的採集、離線數據分析、流式數據分析、不同數據源間的數據同步和數據報表等。
本書並不假設讀者在Java領域有很深的技術水平,但是,結合作者本人的工作經驗和使用習慣,書中的大部分案例代碼均採用Java來編寫,並且運行在Linux環境之上,因此,讀者最好對Java環境下的編程有一定的了解,並且熟悉Linux環境下的基本操作,以便能夠更加順利地閱讀本書。[1]
參考文獻
- ↑ 大型分布式網站架構設計與實踐.docx道客巴巴網,2020-09-01