技術更新快,而本書出版時間略早,部分新技術沒有提到,但是不影響整體,值得一讀。
這是一本關於網站架構的書,闡述網站技術架構最基本的驅動力,基礎的架構設計原理,以及構架方案選擇的價值觀。
第1篇,從演化、模式、要素三個維度描述網站整體架構。(對第二篇的總結概述)
第2篇,從效能、可用性、伸縮性、擴充套件性、安全五要素方面詳細描述網站架構核心原理,其中重要的負載均衡、非同步處理、分散式快取等技術方案又在不同章節多角度描述。
第3篇,通過幾個具體案例再一次從整體和區域性描述網站架構方法。
第4篇,從架構師做事的角度回顧網站技術架構。
第1篇 概述
1 大型網站架構演化 2
1.1 大型網站軟體系統的特點 3
高併發、大流量、高可用、海量資料、...漸進式發展。
1.2 大型網站架構演化發展歷程 4
1.2.1 初始階段的網站架構 4
1.2.2 應用服務和資料服務分離 4
側重點:
應用程式:CPU
資料庫伺服器:磁碟記憶體
檔案伺服器:硬碟
1.2.3 使用快取改善網站效能 5
二八定律:80%的業務訪問集中在20%的資料上
快取分為:1.本地快取(應用伺服器上),2.遠端快取(分散式快取伺服器上)
1.2.4 使用應用伺服器叢集改善網站的併發處理能力 6
使用叢集是解決網站高併發、海量資料問題的常用手段。
1.2.5 資料庫讀寫分離 7
配置兩個資料庫主從關係。
1.2.6 使用反向代理和CDN加速網站響應 8
CND:部署在網路提供商的機房,使使用者在請求網站服務時,可以從距自己最近的機房獲取資料。
反向代理:部署在網站的中心機房,當使用者請求到達中心機房後,首先訪問反向代理伺服器,如果快取著使用者請求的資源,將直接返回給使用者。
分散式資料庫是網站資料庫拆分的最後手段,只有單表的資料量非常龐大時使用。網站更常用的資料庫拆分手段是業務分庫,將不同業務的資料部署在不同的伺服器上。
1.2.8 使用NoSQL和搜尋引擎 10
或者HBase
1.2.9 業務拆分 11
為了應對日益複雜的業務場景,使用分而治之的手段將整個網站業務分成不同的產品線,如交易網站:首頁、店鋪、買家、賣家、訂單。
具體到技術上,也會根據產品線劃分,拆分成許多應用,獨立部署維護。通過超連結建立關係(導航欄地址指向不同應用)。
1.2.10 分散式服務 11
將入“使用者管理”等公用的業務提取出來,獨立部署。
1.3 大型網站架構演化的價值觀 13
網站的價值在於它能為使用者提供什麼價值,在於網站能做什麼,而不在於它是怎麼做的,所以在網站還很小的時候就去追求網站的架構是舍木逐末,得不償失的。小型網站最需要做的就是為使用者提供好的服務來創造價值,得到使用者的認可,活下去,野蠻生長。
1.3.1 大型網站架構技術的核心價值是隨網站所需靈活應對 13
伴隨小型網站業務的逐步發展,演變成大型網站。
1.3.2 驅動大型網站技術發展的主要力量是網站的業務發展 13
創新的業務發展模式對網站架構逐步提出高更的要求,才使得網站架構得以發展成熟。是業務成就了技術,事業成就了人,而不是相反。
1.4 網站架構設計誤區 14
1.4.1 一味追隨大公司的解決方案 14
值得學習借鑑,但不要盲從,失去堅持自我的勇氣。
1.4.2 為了技術而技術 14
網站架構是為業務存在的,除此毫無意義。
1.4.3 企圖用技術解決所有問題 14
技術是用來解決業務問題的,而業務的問題,也可以通過業務的手段解決。
如:12306改成分時段售票。
1.5 小結 15
2 大型網站架構模式 16
模式的關鍵在於可重複性,通過模式的學習,掌握網站架構的一般思路和解決方案。
2.1 網站架構模式 16
2.1.1 分層 17
好處:便於分工合作開發和維護。
挑戰:合理規劃層次和介面。
2.1.2 分割 18
將不同功能的模組分割開來,包裝成高內聚低耦合的模組單元,一方面有助於開發維護,另一方面提高併發處理能力和擴充套件能力。
2.1.3 分散式 18
更多機器:CPU、記憶體、儲存資源更多
問題:網路、機器當機、資料一致性、依賴性錯綜複雜
不要為了分散式而分散式,常用分散式:應用和服務、靜態資源、資料和儲存、計算(後臺業務處理)、配置、鎖、檔案系統等。
2.1.4 叢集 19
多機器通過負載均衡,提供系統可用性
2.1.5 快取 20
改善效能的第一手段:CND、反向代理、本地快取、分散式快取。
前提:1.資料訪問熱點不均衡,2.資料不會很快過期(髒讀)
2.1.6 非同步 20
典型生產者消費者模式。
好處:提高系統可用性、加快網站相應速度、消除併發訪問高峰。
注意:可能對使用者體驗、業務流程造成影響。
2.1.7 冗餘 21
資料冗餘備份,實現高可用。
資料庫冷備份:定期備份存檔。
資料庫熱備份:主從分離。
2.1.8 自動化 22
無人值守網站可以正常執行,一切自動化是網站的理想狀態;自動化架構主要集中在釋出維護方面。包括:
釋出過程、程式碼管理、測試、安全檢測、部署、監控、報警、失效移交、失效恢復、降級(關閉不重要的服務)、資源分配
2.1.9 安全 23
網際網路的開發特性使其面對巨大安全挑戰:
1.密碼+手機碼身份驗證
2.交易等敏感資料加密
3.驗證碼識別機器人
4.XSS攻擊、SQL隱碼攻擊等進行編碼轉移
5.敏感資訊過濾
6.對轉賬等重要操作風險管控
2.2 架構模式在新浪微博的應用 23
2.3 小結 25
3 大型網站核心架構要素 26
軟體架構:有關軟體整體結構與元件得抽象描述,用於指導大型軟體系統各個方面得設計。
除系統功能需求外,需要關注以下5個要素。
3.1 效能 27
效能是一個網站的重要指標。從使用者瀏覽器到資料庫,響應請求的所有環節都可以效能優化。
1.瀏覽器:快取、頁面壓縮、合理佈局、減少cookie傳輸
2.CND
3.伺服器端:快取
4.非同步:訊息佇列
5.叢集
6.程式碼:多執行緒、改善記憶體管理
7.資料庫:索引、快取、SQL優化
3.2 可用性 28
衡量標準是假設一臺以上當機,是否可用。主要手段是冗餘(備份)
3.3 伸縮性 29
是否可以用多臺伺服器構成叢集,是否容易向叢集中新增新機器,新機器是否可以提供無差別的服務,可容納的總伺服器數是否有限制。
3.4 擴充套件性 30
關注功能需求。快速響應需求變更。
標準:增加新業務產品時,是否可以對現有產品透明無影響。
手段:事件驅動架構(訊息佇列)、分散式服務(業務和可複用服務分離)
3.5 安全性 30
針對各種攻擊與盜密手段,是否有可靠的應對策略。
3.6 小結 31
本章是第2篇 架構的歸納和總結。