前言
- 本文是對《大型網(wǎng)站架構(gòu)設(shè)計》(李智慧 著)一書的梳理芍耘,類似文字版的“思維導(dǎo)圖”
- 全文主要圍繞“性能,可用性戴涝,伸縮性滋戳,擴展性,安全”這五個要素
- 性能啥刻,可用性奸鸯,伸縮性這幾個要素基本都涉及到應(yīng)用服務(wù)器,緩存服務(wù)器可帽,存儲服務(wù)器這幾個方面
概述
- 三個緯度:演化娄涩、模式、要素
- 五個要素: 性能映跟,可用性蓄拣,伸縮性,擴展性努隙,安全
演化歷程
- 初始階段的網(wǎng)站架構(gòu):一臺服務(wù)器球恤,上面同時擁有應(yīng)用程序、數(shù)據(jù)庫荸镊、文件等所有資源咽斧。
- 應(yīng)用和數(shù)據(jù)服務(wù)分離:三臺服務(wù)器(硬件資源各不相同),分表是應(yīng)用服務(wù)器躬存、數(shù)據(jù)庫服務(wù)器收厨。和文件服務(wù)器。
- 使用緩存改善網(wǎng)站性能:分為兩種优构,緩存在應(yīng)用服務(wù)器上的本地緩存和緩存在專門的分布式緩存服務(wù)器的遠程緩存。
- 使用應(yīng)用服務(wù)器集群改善網(wǎng)站并發(fā)處理能力:通過負載均衡調(diào)度服務(wù)器來將訪問請求分發(fā)到應(yīng)用服務(wù)器集群中的任何一臺機器雁竞。
- 數(shù)據(jù)庫讀寫分離:數(shù)據(jù)庫采用主從熱備钦椭,應(yīng)用服務(wù)器在寫數(shù)據(jù)時訪問主數(shù)據(jù)庫拧额,主數(shù)據(jù)庫通過主從復(fù)制機制將數(shù)據(jù)更新同步到從數(shù)據(jù)庫。應(yīng)用服務(wù)器使用專門的數(shù)據(jù)訪問模塊從而對應(yīng)用透明彪腔。
- 使用反向代理和CDN加速網(wǎng)站響應(yīng):這兩者基本原理都是緩存侥锦。反向代理部署在網(wǎng)站的中心機房,CDN部署在網(wǎng)絡(luò)提供商的機房德挣。
- 使用分布式文件系統(tǒng)和分布式數(shù)據(jù)庫系統(tǒng):數(shù)據(jù)庫拆分的最后手段恭垦,更常用的是業(yè)務(wù)分庫。
- 使用NoSQL和搜索引擎:對可伸縮的分布式有更好的支持格嗅。
- 業(yè)務(wù)拆分:將整個網(wǎng)站業(yè)務(wù)拆分成不同的應(yīng)用番挺,每個應(yīng)用獨立部署維護,應(yīng)用之間通過超鏈接建立聯(lián)系屯掖、消息隊列進行數(shù)據(jù)分發(fā)玄柏、訪問同一數(shù)據(jù)存儲系統(tǒng)。
- 分布式服務(wù):公共業(yè)務(wù)提取出來獨立部署贴铜。

演化的價值觀
- 大型網(wǎng)站架構(gòu)的核心價值是隨網(wǎng)站所需靈活應(yīng)對
- 驅(qū)動大型網(wǎng)站技術(shù)發(fā)展的主要力量是網(wǎng)站的業(yè)務(wù)發(fā)展
誤區(qū)
- 一味追隨大公司的解決方案
- 為了技術(shù)而技術(shù)
- 企圖用技術(shù)解決所有問題
架構(gòu)模式
模式的關(guān)鍵在于模式的可復(fù)用性
- 分層:橫向切分
- 分割:縱向切分
- 分布式:分層和分割的主要目的是為了切分后的模塊便于分布式部署粪摘。常用方案:
- 分布式應(yīng)用和服務(wù)
- 分布式靜態(tài)資源
- 分布式數(shù)據(jù)和存儲
- 分布式計算
- 分布式配置,分布式鎖绍坝,分布式文件徘意,等等
集群:多臺服務(wù)器部署相同的應(yīng)用構(gòu)成一個集群,通過負載均衡設(shè)備共同對外提供服務(wù)
-
緩存:將數(shù)據(jù)放距離計算最近的位置加快處理速度轩褐,改善性能第一手段椎咧,可以加快訪問速度,減小后端負載壓力灾挨。使用緩存 兩個前提條件 :1.數(shù)據(jù)訪問熱點不均衡邑退;2.數(shù)據(jù)某時段內(nèi)有效,不會很快過期
- CDN
- 反向代理
- 本地緩存
- 分布式緩存
-
異步:旨在系統(tǒng)解耦劳澄。異步架構(gòu)是典型的消費者生產(chǎn)者模式地技,特性如下:
- 提高系統(tǒng)可用性
- 加快網(wǎng)站訪問速度
- 消除并發(fā)訪問高峰
冗余:實現(xiàn)高可用。數(shù)據(jù)庫的冷備份和熱備份
自動化:包括發(fā)布過程自動化秒拔,自動化代碼管理莫矗,自動化測試,自動化安全檢測砂缩,自動化部署作谚,自動化監(jiān)控,自動化報警庵芭,自動化失效轉(zhuǎn)移妹懒,自動化失效恢復(fù),自動化降級双吆,自動化分配資源
安全:密碼眨唬,手機校驗碼会前,加密,驗證碼匾竿,過濾瓦宜,風(fēng)險控制
核心要素
架構(gòu)是“最高層次的規(guī)劃,難以改變的規(guī)定”岭妖。主要關(guān)注五個要素:
- 性能
- 可用性(Availability)
- 伸縮性(Scalability)
- 擴展性(Extensibility)
- 安全性
架構(gòu)
下面依次對這五個要素進行歸納
高性能
性能的測試指標(biāo)主要有:
- 響應(yīng)時間:指應(yīng)用執(zhí)行一個操作需要的時間
- 并發(fā)數(shù):指系統(tǒng)能夠同時處理請求的數(shù)目
- 吞吐量:指單位時間內(nèi)系統(tǒng)處理的請求數(shù)量
- 性能計數(shù)器:描述服務(wù)器或者操作系統(tǒng)性能的一些數(shù)據(jù)指標(biāo)
性能測試方法:
- 性能測試
- 負載測試
- 壓力測試
- 穩(wěn)定性測試
性能優(yōu)化,根據(jù)網(wǎng)站分層架構(gòu)临庇,可以分為三大類:
-
Web 前端性能優(yōu)化
- 瀏覽器訪問優(yōu)化
- 減少 http 請求
- 使用瀏覽器緩存
- 啟用壓縮
- CSS 放在頁面最上面,JavaScript 放在頁面最下面
- 減少 Cookie 傳輸
- CDN 加速:本質(zhì)是一個緩存昵慌,一般緩存靜態(tài)資源
- 反向代理
- 保護網(wǎng)站安全
- 通過配置緩存功能加速 Web 請求
- 實現(xiàn)負載均衡
- 瀏覽器訪問優(yōu)化
-
應(yīng)用服務(wù)器性能優(yōu)化:主要手段有 緩存假夺、集群、異步
- 分布式緩存(網(wǎng)站性能優(yōu)化第一定律:優(yōu)化考慮使用緩存優(yōu)化性能)
- 異步操作(消息隊列废离,削峰作用)
- 使用集群
- 代碼優(yōu)化
- 多線程(設(shè)計為無狀態(tài)侄泽,使用局部對象,并發(fā)訪問資源使用鎖)
- 資源復(fù)用(單例蜻韭,對象池)
- 數(shù)據(jù)結(jié)構(gòu)
- 垃圾回收
-
存儲服務(wù)器性能優(yōu)化
- 機械硬盤 vs. 固態(tài)硬盤
- B+ 樹 vs. LSM 樹
- RAID vs. HDFS
高可用
高可用的網(wǎng)站架構(gòu):目的是保證服務(wù)器硬件故障時服務(wù)依然可用悼尾、數(shù)據(jù)依然保存并能夠被訪問,主要手段數(shù)據(jù)和服務(wù)的冗余備份及失效轉(zhuǎn)移
-
高可用的應(yīng)用:顯著特點是應(yīng)用的無狀態(tài)性
- 通過負載均衡進行無狀態(tài)服務(wù)的失效轉(zhuǎn)移
- 應(yīng)用服務(wù)器集群的 Session 管理
- Session 復(fù)制
- Session 綁定
- 利用 Cookie 記錄 Session
- Session 服務(wù)器
-
高可用的服務(wù):無狀態(tài)的服務(wù)肖方,可使用類似負載均衡的失效轉(zhuǎn)移策略闺魏,此外還有如下策略
- 分級管理
- 超時設(shè)置
- 異步調(diào)用
- 服務(wù)降級
- 冪等性設(shè)計
-
高可用的數(shù)據(jù):主要手段是數(shù)據(jù)備份和失效轉(zhuǎn)移機制
- CAP 原理
- 數(shù)據(jù)一致性(Consisitency)
- 數(shù)據(jù)可用性(Availibility)
- 分區(qū)耐受性(Partition Tolerance)
- 數(shù)據(jù)備份
- 冷備:缺點是不能保證數(shù)據(jù)最終一致和數(shù)據(jù)可用性
- 熱備:分為異步熱備和同步熱備
- 失效轉(zhuǎn)移:由以下三部分組成
- 失效確認
- 訪問轉(zhuǎn)移
- 數(shù)據(jù)恢復(fù)
- CAP 原理
-
高可用網(wǎng)站的軟件質(zhì)量保證
- 網(wǎng)站發(fā)布
- 自動化測試
- 預(yù)發(fā)布驗證
- 代碼控制
- 主干開發(fā)、分支發(fā)布
- 分支開發(fā)俯画、主干發(fā)布
- 自動化發(fā)布
- 灰度發(fā)布
-
網(wǎng)站運行監(jiān)控
- 監(jiān)控數(shù)據(jù)采集
- 用戶行為日志采集(服務(wù)器端和客戶端)
- 服務(wù)器性能監(jiān)控
- 運行數(shù)據(jù)報告
- 監(jiān)控管理
- 警報系統(tǒng)
- 失效轉(zhuǎn)移
- 自動優(yōu)雅降級
- 監(jiān)控數(shù)據(jù)采集
伸縮性
大型網(wǎng)站的“大型”是指:
- 用戶層面:大量用戶及大量訪問
- 功能方面:功能龐雜析桥,產(chǎn)品眾多
- 技術(shù)層面:網(wǎng)站需要部署大量的服務(wù)器
伸縮性的分為如下幾個方面
-
網(wǎng)站架構(gòu)的伸縮性設(shè)計
- 不同功能進行物理分離實現(xiàn)伸縮
- 縱向分離(分層后分離)
- 橫向分離(業(yè)務(wù)分割后分離)
- 單一功能通過集群規(guī)模實現(xiàn)伸縮
- 不同功能進行物理分離實現(xiàn)伸縮
-
應(yīng)用服務(wù)器集群的伸縮性設(shè)計
- HTTP 重定向負載均衡
- DNS 域名解析負載均衡
- 反向代理負載均衡(在 HTTP 協(xié)議層面,應(yīng)用層負載均衡)
- IP 負載均衡(在內(nèi)核進程完成數(shù)據(jù)分發(fā))
- 數(shù)據(jù)鏈路層負載均衡(數(shù)據(jù)鏈路層修改 mac 地址艰垂,三角傳輸模式泡仗,LVS)
- 負載均衡算法
- 輪詢(Round Robin, RR)
- 加權(quán)輪詢(Weighted Round Robin, WRR)
- 隨機(Random)
- 最少鏈接(Least Connections)
- 源地址散列(Source Hashing)
-
分布式緩存集群的伸縮性設(shè)計
- Memcached 分布式緩存集群的訪問模型
- Memcached 客戶端(包括 API,路由算法猜憎,服務(wù)器列表娩怎,通信模塊)
- Memcached 服務(wù)器集群
- Memcached 分布式緩存集群的伸縮性挑戰(zhàn)
- 分布式緩存的一致性 Hash 算法(一致性 Hash 環(huán),虛擬層)
- Memcached 分布式緩存集群的訪問模型
- 數(shù)據(jù)存儲服務(wù)集群的伸縮性設(shè)計
- 關(guān)系數(shù)據(jù)庫集群的伸縮性設(shè)計
- NoSQL 數(shù)據(jù)庫的伸縮性設(shè)計
可擴展
系統(tǒng)架構(gòu)設(shè)計層面的“開閉原則”
- 構(gòu)建可擴展的網(wǎng)站架構(gòu)
- 利用分布式消息隊列降低耦合性
- 事件驅(qū)動架構(gòu)(Event Driven Architecture)
- 分布式消息隊列
- 利用分布式服務(wù)打造可復(fù)用的業(yè)務(wù)平臺
- Web Service 與企業(yè)級分布式服務(wù)
- 大型網(wǎng)站分布式服務(wù)的特點
- 分布式服務(wù)框架設(shè)計(Thrift, Dubbo)
- 可擴展的數(shù)據(jù)結(jié)構(gòu)(如 ColumnFamily 設(shè)計)
- 利用開放平臺建設(shè)網(wǎng)站生態(tài)圈
安全
XSS 攻擊和 SQL 注入攻擊是構(gòu)成網(wǎng)站應(yīng)用攻擊最主要的兩種手段胰柑,此外還包括 CSRF,Session 劫持等手段截亦。
-
攻擊與防御
- XSS 攻擊:跨站點腳本攻擊(Cross Site Script)
- 反射型
- 持久型
- XSS 防御手段
- 消毒(即對某些 html 危險字符轉(zhuǎn)義)
- HttpOnly
- 注入攻擊
- SQL 注入攻擊
- OS 注入攻擊
- 注入防御
- 避免被猜到數(shù)據(jù)庫表結(jié)構(gòu)信息
- 消毒
- 參數(shù)綁定
- CSRF 攻擊:跨站點請求偽造(Cross Site Request Forgery)
- CSRF 防御:主要手段是識別請求者身份
- 表單 Token
- 驗證碼
- Referer Check
- 其他攻擊和漏洞
- Error Code
- HTML 注釋
- 文件上傳
- 路徑遍歷
- Web 應(yīng)用防火墻(ModSecurity)
- 網(wǎng)站安全漏洞掃描
- XSS 攻擊:跨站點腳本攻擊(Cross Site Script)
-
信息加密技術(shù)及密鑰安全管理
- 單向散列加密:不同輸入長度的信息通過散列計算得到固定長度的輸出
- 不可逆,非明文
- 可加鹽(salt)增加安全性
- 輸入的微小變化會導(dǎo)致輸出完全不同
- 對稱加密:加密和解密使用同一個密鑰
- 非對稱加密
- 信息傳輸:公鑰加密柬讨,私鑰解密
- 數(shù)字簽名:私鑰加密崩瓤,公鑰解密
- 密鑰安全管理:信息安全傳輸是靠密鑰保證的,改善手段有:
- 把密鑰和算法放在一個獨立的服務(wù)器上
- 將加解密算法放在應(yīng)用系統(tǒng)中踩官,密鑰放在獨立服務(wù)器
- 單向散列加密:不同輸入長度的信息通過散列計算得到固定長度的輸出
-
信息過濾與反垃圾
- 文本匹配
- 分類算法
- 黑名單