大型網(wǎng)站軟件特點(diǎn)
- 高并發(fā)
- 高并發(fā)用戶,大流量訪問
- 高可用
- 系統(tǒng)24小時不間斷服務(wù)
- 海量數(shù)據(jù)
- 存儲/管理海量數(shù)據(jù)
- 網(wǎng)絡(luò)復(fù)雜
- 服務(wù)用戶范圍廣,網(wǎng)絡(luò)情況千差萬別
- 安全環(huán)境惡劣
- 互聯(lián)網(wǎng)的開放性,導(dǎo)致網(wǎng)站更易受到攻擊
大型網(wǎng)站架構(gòu)發(fā)展歷程
- 單機(jī)架構(gòu)
應(yīng)用程序/數(shù)據(jù)庫/文件等資源都部署在一臺服務(wù)器上
初始階段的網(wǎng)站架構(gòu).png
- 應(yīng)用服務(wù)和數(shù)據(jù)服務(wù)分離
應(yīng)用服務(wù)器/文件服務(wù)器/數(shù)據(jù)服務(wù)器分離
應(yīng)用服務(wù)和數(shù)據(jù)服務(wù)分離.png
- 緩存改善網(wǎng)站性能
- 本地緩存: 訪問速度快,受應(yīng)用服務(wù)器內(nèi)存限制,緩存數(shù)據(jù)有限
分布式緩存: 使用集群方式,理論上不受內(nèi)存容量限制的緩存服務(wù)
網(wǎng)站使用緩存.png
- 應(yīng)用服務(wù)器集群
通過負(fù)載均衡服務(wù)器,將用戶訪問請求分發(fā)到應(yīng)用服務(wù)器集群中任何一臺,若出現(xiàn)更多用戶,就在集群中加入更多應(yīng)用服務(wù)器,使應(yīng)用服務(wù)器的負(fù)載不再成為網(wǎng)站瓶頸
應(yīng)用服務(wù)器集群部署.png
- 數(shù)據(jù)庫讀寫分離
數(shù)據(jù)庫主從熱備功能實現(xiàn)數(shù)據(jù)庫讀寫分離
數(shù)據(jù)庫讀寫分離.png
- 使用反向代理和CDN加速網(wǎng)站響應(yīng)
- 反向代理: 基本原理是緩存,部署在網(wǎng)站的中心機(jī)房,用戶請求到達(dá)中心機(jī)房后,首先訪問反向代理服務(wù)器,若反向代理服務(wù)器緩存著用戶請求的資源,就將其直接返回給用戶
CDN: 基本原理是緩存,部署在網(wǎng)絡(luò)提供商的機(jī)房,用戶請求網(wǎng)站服務(wù)時,可從距離最近的網(wǎng)絡(luò)提供商機(jī)房獲取數(shù)據(jù)
網(wǎng)站使用反向代理和CDN加速訪問.png
- 使用分布式文件系統(tǒng)和分布式數(shù)據(jù)庫系統(tǒng)
業(yè)務(wù)分庫: 將不同業(yè)務(wù)數(shù)據(jù)庫部署在不同的物理機(jī)上(分庫分表)
使用分布式文件和分布式數(shù)據(jù)庫系統(tǒng).png
- 使用NoSQL和搜索引擎
通過統(tǒng)一數(shù)據(jù)模塊訪問各種數(shù)據(jù)(聚合)
使用NoSQL系統(tǒng)和搜索引擎.png
- 業(yè)務(wù)拆分
分而治之: 將網(wǎng)站拆分成不同應(yīng)用,每個應(yīng)用獨(dú)立部署維護(hù)
應(yīng)用拆分.png
- 分布式服務(wù)
抽象復(fù)用服務(wù),搭建共用業(yè)務(wù)服務(wù)(基礎(chǔ)服務(wù))
分布式服務(wù).png
網(wǎng)站架構(gòu)設(shè)計誤區(qū)
- 一味追隨大公司的解決方案
- 因地制宜,不可一味盲從
- 為了技術(shù)而技術(shù)
- 脫離業(yè)務(wù)發(fā)展實際,一味追求新技術(shù)
- 企圖用技術(shù)解決所有問題
- 技術(shù)是用來解決業(yè)務(wù)問題的,而業(yè)務(wù)問題也可以通過業(yè)務(wù)手段解決
網(wǎng)站架構(gòu)模式
- 分層
- 概念: 將系統(tǒng)橫向緯度切分為幾個部分,每個部分負(fù)責(zé)相對單一的職責(zé),然后通過上層對下層的依賴和調(diào)用組成一個完成的系統(tǒng)(如網(wǎng)絡(luò)七層協(xié)議)
- 挑戰(zhàn): 合理規(guī)劃層次邊界及接口,嚴(yán)格遵循分層架構(gòu)約束,禁止跨層次調(diào)用(應(yīng)用層直接調(diào)用數(shù)據(jù)層)及逆向調(diào)用(數(shù)據(jù)層調(diào)用服務(wù)層或服務(wù)層調(diào)用應(yīng)用層)
優(yōu)點(diǎn): 清晰的邏輯結(jié)構(gòu)便于開發(fā)維護(hù),各層之間具有一定獨(dú)立性,只要維持調(diào)用接口不變,各層可根據(jù)具體問題獨(dú)立演化發(fā)展而不需要其他層做出相應(yīng)調(diào)整(擴(kuò)展性)
網(wǎng)站分層架構(gòu).jpg
- 分割
- 概念: 將系統(tǒng)縱向緯度切分,按不同業(yè)務(wù)進(jìn)行分割(如:訂單/庫存/支付/搜索),也可更小粒度分割
- 優(yōu)點(diǎn): 便于開發(fā)維護(hù),不同模塊分布式部署,提高網(wǎng)站并發(fā)處理能力和功能擴(kuò)展能力
- 分布式
- 分布式挑戰(zhàn)
# 網(wǎng)絡(luò): 分布式意味著服務(wù)調(diào)用必須通過網(wǎng)絡(luò),這可能對性能造成嚴(yán)重影響
# 服務(wù)器宕機(jī)概率: 服務(wù)器越多,宕機(jī)幾率越大,使網(wǎng)站可用性降低
# 數(shù)據(jù)一致性: 分布式環(huán)境中保持?jǐn)?shù)據(jù)一致性非常困難,分布式事務(wù)也難以保證
# 可維護(hù)性: 分布式網(wǎng)站依賴錯綜復(fù)雜,開發(fā)管理維護(hù)困難
- 分布式方案
# 分布式應(yīng)用和服務(wù): 將分層和分割后的模塊分布式部署,改善網(wǎng)站性能/并發(fā)性,加快開發(fā)和發(fā)布速度,減少數(shù)據(jù)庫連接資源消耗,使不同應(yīng)用復(fù)用共用服務(wù),便于業(yè)務(wù)功能擴(kuò)展
# 分布式靜態(tài)資源: 靜態(tài)資源分布式部署減輕應(yīng)用服務(wù)器負(fù)載壓力;使用獨(dú)立域名加快瀏覽器并發(fā)加載的速度.(即常說的動靜分離)
# 分布式數(shù)據(jù)和存儲: 大型網(wǎng)站需要處理以P為單位的海量數(shù)據(jù),單臺計算機(jī)無法提供如此大的存儲空間,需要分布式存儲;除對傳統(tǒng)關(guān)系數(shù)據(jù)庫進(jìn)行分布式部署外,為網(wǎng)站應(yīng)用而生的NoSQL產(chǎn)品幾乎都是分布式的
# 分布式文件系統(tǒng): 支持云存儲
# 分布式計算: 實時計算與非實時計算,如搜索引擎的索引構(gòu)建/數(shù)據(jù)倉庫的數(shù)據(jù)分析統(tǒng)計(如MapReduce及Storm)
# 分布式配置: 支持網(wǎng)站線上服務(wù)器配置實時更新(攜程的開源分布式配置中心Apollo)
# 分布式鎖: 實現(xiàn)并發(fā)和協(xié)同
- 集群
- 概念: 多臺服務(wù)器相同應(yīng)用構(gòu)成一個集群,通過負(fù)載均衡服務(wù)器共同對外提供服務(wù)
- 優(yōu)點(diǎn): 提供更好并發(fā)特性,如:有更多用戶訪問時,只需向集群中加入新機(jī)器即可;提高系統(tǒng)可用性,如:某臺服務(wù)器發(fā)生故障,負(fù)載均衡服務(wù)器或系統(tǒng)的失效轉(zhuǎn)移機(jī)制將請求轉(zhuǎn)發(fā)到集群中其他服務(wù)器上,使服務(wù)器故障不影響用戶使用
- 緩存
- CDN: 即內(nèi)容分發(fā)網(wǎng)絡(luò),部署在離用戶最近的網(wǎng)絡(luò)服務(wù)商,用戶的請求先到達(dá)網(wǎng)絡(luò)服務(wù)商,在這里緩存網(wǎng)站的一些靜態(tài)資源,可就近最快速度返回給用戶,如視頻和門戶網(wǎng)站將訪問量大的熱點(diǎn)內(nèi)容緩存在CDN
- 反向代理: 用戶請求到達(dá)網(wǎng)站的數(shù)據(jù)中心時,最先訪問反向代理服務(wù)器,這里緩存網(wǎng)站的靜態(tài)資源,無需將請求轉(zhuǎn)發(fā)給應(yīng)用服務(wù)器即可返回給用戶
- 本地緩存: 應(yīng)用服務(wù)器本地緩存熱點(diǎn)數(shù)據(jù)(如Google的Guava或JDK的Caffeine)
- 分布式緩存: 將數(shù)據(jù)緩存在專門的分布式緩存集群中,應(yīng)用通過網(wǎng)絡(luò)通信訪問緩存數(shù)據(jù)(如Redis)
- 異步
- 分類: 單機(jī)架構(gòu)中內(nèi)部通過多線程方式實現(xiàn)異步;分布式系統(tǒng)中通過分布式消息隊列實現(xiàn)異步
- 優(yōu)點(diǎn): 提高系統(tǒng)可用性;加快網(wǎng)站響應(yīng)速度;消除并發(fā)訪問高峰
- 冗余
- 冷備份: 數(shù)據(jù)庫定期備份,存檔保存
- 熱備份: 數(shù)據(jù)庫主從復(fù)制,實時同步
- 災(zāi)備數(shù)據(jù)中心: 抵抗地震/海嘯的那個不可抗力導(dǎo)致的網(wǎng)站癱瘓,需進(jìn)行災(zāi)備
- 自動化
- 自動化代碼管理
- 自動化測試
- 自動化安全檢測
- 自動化部署
- 自動化監(jiān)控
- 自動化報警
- 自動化失效轉(zhuǎn)移
- 自動化失效恢復(fù)
- 自動化降級
- 自動化分配資源
- 安全
- 網(wǎng)絡(luò)通信加密
- 垃圾及敏感信息過濾
- 風(fēng)控
系統(tǒng)層次
- 基礎(chǔ)服務(wù)層
- 提供數(shù)據(jù)庫/緩存/存儲/搜索等數(shù)據(jù)服務(wù)
- 平臺服務(wù)/應(yīng)用服務(wù)層
- 通過依賴調(diào)用和共享基礎(chǔ)數(shù)據(jù)構(gòu)成
- API/業(yè)務(wù)層
- 客戶端和第三方應(yīng)用
大型網(wǎng)站核心架構(gòu)要素
- 性能
- 衡量網(wǎng)站性能有一系列指標(biāo),重要的有響應(yīng)時間/TPS/系統(tǒng)性能計數(shù)器等
- 可用性
- 衡量一個系統(tǒng)架構(gòu)設(shè)計是否滿足高可用的目標(biāo),就是假設(shè)系統(tǒng)中任何一臺或多臺服務(wù)器宕機(jī),以及出現(xiàn)各種不可預(yù)期的問題時,系統(tǒng)整體是否依然可用
- 伸縮性
- 所謂伸縮性是指通過不斷向集群中加入服務(wù)器的手段來緩解不斷上升的用戶并發(fā)訪問壓力和不斷增長的數(shù)據(jù)存儲需求
- 衡量架構(gòu)伸縮性的主要標(biāo)準(zhǔn)就是是否可以用多臺服務(wù)器構(gòu)建集群;是否容易向集群中添加新的服務(wù)器;加入新的服務(wù)器后是否可以提供和原來的服務(wù)器無差別的服務(wù);集群中可容納的總的服務(wù)器數(shù)量是否有限制
- 擴(kuò)展性
- 衡量標(biāo)準(zhǔn): 衡量網(wǎng)站架構(gòu)擴(kuò)展性好壞的主要標(biāo)準(zhǔn)就是在網(wǎng)站增加新的業(yè)務(wù)時,是否可以實現(xiàn)對現(xiàn)有業(yè)務(wù)透明無影響,不需要任何改動或很少改動既有業(yè)務(wù)就可以上線新業(yè)務(wù)
- 主要手段
# 事件驅(qū)動架構(gòu): 利用消息隊列實現(xiàn)
# 分布式服務(wù): 將業(yè)務(wù)和可復(fù)用服務(wù)分離,通過分布式服務(wù)框架調(diào)用
- 安全性
- 保護(hù)網(wǎng)站不受惡意訪問和攻擊,保護(hù)網(wǎng)站重要數(shù)據(jù)不被竊取
- 衡量網(wǎng)站安全架構(gòu)的標(biāo)準(zhǔn)就是針對現(xiàn)存和潛在的各種攻擊與竊密手段,是否有可靠的應(yīng)對策略










