第一篇 概述
1 大型網站架構演化
動機:如何打造一個高可用、高性能、易擴展、可伸縮且安全的網站?如何讓網站隨應用所需靈活變動?
1.1 大型網站軟件系統的特點
a. 高併發,大流量
b. 高可用
c. 海量數據
d. 用戶分佈廣泛,網絡情況複雜
e. 安全環境惡劣
f. 需求快速變更,發佈頻繁
g. 漸進式發展(由小做大。好的互聯網產品都是慢慢運營出來的,而不是一開始就開發好的)
1.2 大型網站架構演化發展歷程
1.2.1 初始階段的網站架構
所有資源都在一臺服務器上——LAPM
1.2.2 應用服務和數據服務分離
整個網站使用三臺服務器:應用服務器、文件服務器和數據庫服務器
1.2.3 使用緩存改善網站性能
驅動力:大部分的業務訪問集中在一小部分數據上。
網站使用的緩存可以分爲兩種:緩存在服務器上的本地緩存和緩存在專門的分佈式緩存服務器上的遠程緩存。
1.2.4 使用應用服務器集羣改善網站的併發處理能力
應用服務器集羣——通過負載均衡調度服務器可將來自用戶瀏覽器的訪問請求分發到應用服務器集羣中的任何一臺服務器上。
1.2.5 數據庫讀寫分離
目前大部分的主流數據庫都提供主從熱備份功能,通過配置兩臺數據庫主從關係,可以將一臺數據庫服務器的數據更新同步到另一臺服務器上。
1.2.6 使用反向代理和CDN加速網站響應
爲了解決網站訪問的延遲,提升用戶體驗。
CDN和反向代理的基本原理都是緩存,區別在於CDN部署在網絡提供商的機房,使用戶在請求網站服務時,可以從距離自己最近的網絡提供商機房獲取數據;而反向代理則部署在網絡中心的機房,當用戶騎牛到達中心機房後,首先訪問的服務器是反向代理的服務器,如果反向代理的服務器中緩存着用戶請求的資源,就將其直接返回給用戶。
1.2.7 使用分佈式文件系統和分佈式數據庫系統
不到不得已時,網站更常用的數據庫拆分手段是業務分庫,將不同業務的數據庫部署在不同的物理服務器上。
1.2.8 使用NoSQL和搜索引擎
1.2.9 業務拆分
應用之間通過超鏈接建立關係,也可以通過消息隊列進行數據分發。
1.2.10 分佈式服務
通過可複用的業務連接數據庫,提供共用業務服務,而應用系統只需要管理用戶界面,通過分佈式服務調用共用業務服務完成具體業務操作。
1.3 大型網站架構演化的價值觀
1.3.1 大型網站架構技術的核心價值是隨着網站所需靈活應對
1.3.2 驅動大型網站技術發展的主要力量是網站的業務發展
是業務成就了技術,是事業成就了人,而不是相反。