羅列了大型網(wǎng)站架構涉及到的概念熙宇,附上了簡單說明
前言
- 本文是對《大型網(wǎng)站架構設計》(李智慧 著)一書的梳理陆馁,類似文字版的“思維導圖”
- 全文主要圍繞“性能球及,可用性粒竖,伸縮性,擴展性几于,安全”這五個要素
- 性能蕊苗,可用性,伸縮性這幾個要素基本都涉及到應用服務器沿彭,緩存服務器朽砰,存儲服務器這幾個方面
概述
- 三個緯度:演化、模式喉刘、要素
- 五個要素: 性能瞧柔,可用性,伸縮性睦裳,擴展性造锅,安全
演化歷程
圖例可參考 大型網(wǎng)站架構演化歷程:
- 初始階段的網(wǎng)站架構:一臺服務器,上面同時擁有應用程序廉邑,數(shù)據(jù)庫备绽,文件,等所有資源鬓催。例如 LAMP 架構
- 應用和數(shù)據(jù)服務分離:三臺服務器(硬件資源各不相同)肺素,分別是應用服務器,文件服務器和數(shù)據(jù)庫服務器
- 使用緩存改善網(wǎng)站性能:分為兩種宇驾,緩存在應用服務器上的本地緩存和緩存在專門的分布式緩存服務器的遠程緩存
- 使用應用服務器集群改善網(wǎng)站并發(fā)處理能力:通過負載均衡調度服務器來將訪問請求分發(fā)到應用服務器集群中的任何一臺機器
- 數(shù)據(jù)庫讀寫分離:數(shù)據(jù)庫采用主從熱備倍靡,應用服務器在寫數(shù)據(jù)時訪問主數(shù)據(jù)庫,主數(shù)據(jù)庫通過主從復制機制將數(shù)據(jù)更新同步到從數(shù)據(jù)庫课舍。應用服務器使用專門的數(shù)據(jù)訪問模塊從而對應用透明
- 使用反向代理和 CDN 加速網(wǎng)站響應:這兩者基本原理都是緩存塌西。反向代理部署在網(wǎng)站的中心機房,CDN 部署在網(wǎng)絡提供商的機房
- 使用分布式文件系統(tǒng)和分布式數(shù)據(jù)庫系統(tǒng):數(shù)據(jù)庫拆分的最后手段筝尾,更常用的是業(yè)務分庫
- 使用 NoSQL 和搜索引擎:對可伸縮的分布式有更好的支持
- 業(yè)務拆分:將整個網(wǎng)站業(yè)務拆分成不同的應用捡需,每個應用獨立部署維護,應用之間通過超鏈接建立聯(lián)系/消息隊列進行數(shù)據(jù)分發(fā)/訪問同一數(shù)據(jù)存儲系統(tǒng)
-
分布式服務:公共業(yè)務提取出來獨立部署
演化的價值觀
- 大型網(wǎng)站架構的核心價值是隨網(wǎng)站所需靈活應對
- 驅動大型網(wǎng)站技術發(fā)展的主要力量是網(wǎng)站的業(yè)務發(fā)展
誤區(qū)
- 一味追隨大公司的解決方案
- 為了技術而技術
- 企圖用技術解決所有問題
架構模式
模式的關鍵在于模式的可重復性
分層:橫向切分
分割:縱向切分
-
分布式:分層和分割的主要目的是為了切分后的模塊便于分布式部署筹淫。常用方案:分布式應用和服務
- 分布式靜態(tài)資源
- 分布式數(shù)據(jù)和存儲
- 分布式計算
- 分布式配置站辉,分布式鎖,分布式文件损姜,等等
集群:多臺服務器部署相同的應用構成一個集群饰剥,通過負載均衡設備共同對外提供服務
-
緩存:將數(shù)據(jù)放距離計算最近的位置加快處理速度,改善性能第一手段摧阅,可以加快訪問速度汰蓉,減小后端負載壓力。使用緩存 兩個前提條件 :1.數(shù)據(jù)訪問熱點不均衡棒卷;2.數(shù)據(jù)某時段內(nèi)有效顾孽,不會很快過期
- CDN
- 反向代理
- 本地緩存
- 分布式緩存
-
異步:旨在系統(tǒng)解耦祝钢。異步架構是典型的消費者生產(chǎn)者模式,特性如下:
- 提高系統(tǒng)可用性
- 加快網(wǎng)站訪問速度
- 消除并發(fā)訪問高峰
冗余:實現(xiàn)高可用若厚。數(shù)據(jù)庫的冷備份和熱備份
自動化:包括發(fā)布過程自動化太颤,自動化代碼管理,自動化測試盹沈,自動化安全檢測龄章,自動化部署,自動化監(jiān)控乞封,自動化報警做裙,自動化失效轉移,自動化失效恢復肃晚,自動化降級锚贱,自動化分配資源
安全:密碼,手機校驗碼关串,加密拧廊,驗證碼,過濾晋修,風險控制
核心要素
架構是“最高層次的規(guī)劃吧碾,難以改變的規(guī)定”。主要關注五個要素:
- 性能
- 可用性(Availability)
- 伸縮性(Scalability)
- 擴展性(Extensibility)
- 安全性
架構
下面依次對這五個要素進行歸納
高性能
性能的測試指標主要有:
- 響應時間:指應用執(zhí)行一個操作需要的時間
- 并發(fā)數(shù):指系統(tǒng)能夠同時處理請求的數(shù)目
- 吞吐量:指單位時間內(nèi)系統(tǒng)處理的請求數(shù)量
- 性能計數(shù)器:描述服務器或者操作系統(tǒng)性能的一些數(shù)據(jù)指標
性能測試方法:
- 性能測試
- 負載測試
- 壓力測試
-
穩(wěn)定性測試
性能優(yōu)化,根據(jù)網(wǎng)站分層架構墓卦,可以分為三大類:
-
Web 前端性能優(yōu)化
-
瀏覽器訪問優(yōu)化減少 http 請求
- 使用瀏覽器緩存
- 啟用壓縮
- CSS 放在頁面最上面倦春,JavaScript 放在頁面最下面
- 減少 Cookie 傳輸
CDN 加速:本質是一個緩存,一般緩存靜態(tài)資源
-
反向代理
- 保護網(wǎng)站安全
- 通過配置緩存功能加速 Web 請求
- 實現(xiàn)負載均衡
-
-
應用服務器性能優(yōu)化:主要手段有 緩存落剪、集群睁本、異步
- 分布式緩存(網(wǎng)站性能優(yōu)化第一定律:優(yōu)化考慮使用緩存優(yōu)化性能)
- 異步操作(消息隊列,削峰作用)
- 使用集群
- 代碼優(yōu)化
- 多線程(設計為無狀態(tài)忠怖,使用局部對象呢堰,并發(fā)訪問資源使用鎖)
- 資源復用(單例,對象池)
- 數(shù)據(jù)結構
- 垃圾回收
-
存儲服務器性能優(yōu)化
- 機械硬盤 vs. 固態(tài)硬盤
- B+ 樹 vs. LSM 樹
- RAID vs. HDFS
高可用
高可用的網(wǎng)站架構:目的是保證服務器硬件故障時服務依然可用凡泣、數(shù)據(jù)依然保存并能夠被訪問枉疼,主要手段數(shù)據(jù)和服務的冗余備份及失效轉移
-
高可用的應用:顯著特點是應用的無狀態(tài)性
- 通過負載均衡進行無狀態(tài)服務的失效轉移
- 應用服務器集群的 Session 管理
- Session 復制
- Session 綁定
- 利用 Cookie 記錄 Session
- Session 服務器
-
高可用的服務:無狀態(tài)的服務,可使用類似負載均衡的失效轉移策略问麸,此外還有如下策略
- 分級管理
- 超時設置
- 異步調用
- 服務降級
- 冪等性設計
-
高可用的數(shù)據(jù):主要手段是數(shù)據(jù)備份和失效轉移機制
-
CAP 原理
- 數(shù)據(jù)一致性(Consisitency)
- 數(shù)據(jù)可用性(Availibility)
- 分區(qū)耐受性(Partition Tolerance)
-
數(shù)據(jù)備份
- 冷備:缺點是不能保證數(shù)據(jù)最終一致和數(shù)據(jù)可用性
- 熱備:分為異步熱備和同步熱備
-
失效轉移:由以下三部分組成
- 失效確認
- 訪問轉移
- 數(shù)據(jù)恢復
-
-
高可用網(wǎng)站的軟件質量保證
- 網(wǎng)站發(fā)布
- 自動化測試
- 預發(fā)布驗證
- 代碼控制
- 主干開發(fā)往衷、分支發(fā)布
- 分支開發(fā)钞翔、主干發(fā)布
- 自動化發(fā)布
- 灰度發(fā)布
-
網(wǎng)站運行監(jiān)控
- 監(jiān)控數(shù)據(jù)采集
- 用戶行為日志采集(服務器端和客戶端)
- 服務器性能監(jiān)控
- 運行數(shù)據(jù)報告
- 監(jiān)控管理
- 警報系統(tǒng)
- 失效轉移
- 自動優(yōu)雅降級
- 監(jiān)控數(shù)據(jù)采集
伸縮性
大型網(wǎng)站的“大型”是指:
- 用戶層面:大量用戶及大量訪問
- 功能方面:功能龐雜严卖,產(chǎn)品眾多
- 技術層面:網(wǎng)站需要部署大量的服務器
伸縮性的分為如下幾個方面
- 網(wǎng)站架構的伸縮性設計
-
不同功能進行物理分離實現(xiàn)伸縮
- 縱向分離(分層后分離)
- 橫向分離(業(yè)務分割后分離)
單一功能通過集群規(guī)模實現(xiàn)伸縮
-
-
應用服務器集群的伸縮性設計
- HTTP 重定向負載均衡
- DNS 域名解析負載均衡
- 反向代理負載均衡(在 HTTP 協(xié)議層面,應用層負載均衡)
- IP 負載均衡(在內(nèi)核進程完成數(shù)據(jù)分發(fā))
- 數(shù)據(jù)鏈路層負載均衡(數(shù)據(jù)鏈路層修改 mac 地址布轿,三角傳輸模式哮笆,LVS)
- 負載均衡算法
- 輪詢(Round Robin, RR)
- 加權輪詢(Weighted Round Robin, WRR)
- 隨機(Random)
- 最少鏈接(Least Connections)
- 源地址散列(Source Hashing)
-
分布式緩存集群的伸縮性設計
-
Memcached 分布式緩存集群的訪問模型
- Memcached 客戶端(包括 API来颤,路由算法,服務器列表稠肘,通信模塊)
- Memcached 服務器集群
Memcached 分布式緩存集群的伸縮性挑戰(zhàn)
分布式緩存的一致性 Hash 算法(一致性 Hash 環(huán)福铅,虛擬層)
-
-
數(shù)據(jù)存儲服務集群的伸縮性設計
- 關系數(shù)據(jù)庫集群的伸縮性設計
- NoSQL 數(shù)據(jù)庫的伸縮性設計
可擴展
系統(tǒng)架構設計層面的“開閉原則”
構建可擴展的網(wǎng)站架構
-
利用分布式消息隊列降低耦合性
- 事件驅動架構(Event Driven Architecture)
- 分布式消息隊列
-
利用分布式服務打造可復用的業(yè)務平臺
- Web Service 與企業(yè)級分布式服務
- 大型網(wǎng)站分布式服務的特點
- 分布式服務框架設計(Thrift, Dubbo)
可擴展的數(shù)據(jù)結構(如 ColumnFamily 設計)
利用開放平臺建設網(wǎng)站生態(tài)圈
網(wǎng)站的安全架構
XSS 攻擊和 SQL 注入攻擊是構成網(wǎng)站應用攻擊最主要的兩種手段,此外還包括 CSRF,Session 劫持等手段项阴。
-
攻擊與防御
-
XSS 攻擊:跨站點腳本攻擊(Cross Site Script)
- 反射型
- 持久型
-
XSS 防御手段
- 消毒(即對某些 html 危險字符轉義)
- HttpOnly
-
注入攻擊
- SQL 注入攻擊
- OS 注入攻擊
-
注入防御
- 避免被猜到數(shù)據(jù)庫表結構信息
- 消毒
- 參數(shù)綁定
CSRF 攻擊:跨站點請求偽造(Cross Site Request Forgery)
-
CSRF 防御:主要手段是識別請求者身份
- 表單 Token
- 驗證碼
- Referer Check
-
其他攻擊和漏洞Error Code
- HTML 注釋
- 文件上傳
- 路徑遍歷
Web 應用防火墻(ModSecurity)
網(wǎng)站安全漏洞掃描
-
-
信息加密技術及密鑰安全管理
-
單向散列加密:不同輸入長度的信息通過散列計算得到固定長度的輸出
- 不可逆滑黔,非明文
- 可加鹽(salt)增加安全性
- 輸入的微小變化會導致輸出完全不同
對稱加密:加密和解密使用同一個密鑰
-
非對稱加密
- 信息傳輸:公鑰加密,私鑰解密
- 數(shù)字簽名:私鑰加密环揽,公鑰解密
-
密鑰安全管理:信息安全傳輸是靠密鑰保證的略荡,改善手段有:
- 把密鑰和算法放在一個獨立的服務器上
- 將加解密算法放在應用系統(tǒng)中,密鑰放在獨立服務器
-
-
信息過濾與反垃圾文本匹配
- 分類算法
- 黑名單