大型互聯網軟件系統的特點
- 高並發,大流量
- 高可用
- 海量數據
- 用戶分布廣泛,網絡情況復雜
- 安全環境惡劣
- 需求快速變更,發布頻繁
- 漸進式發展
大型網站架構演化發展歷程
- 初始階段:應用、數據庫、文件等所有資源都在一台服務器
- 應用服務和數據服務分離
- 使用緩存改善網站性能:本地緩存和遠程緩存
- 使用應用服務器集群改善網站的並發處理能力
- 數據庫讀寫分離
- 使用反向代理和CDN加速網站響應
- 使用分布式文件系統和分布式數據庫系統
- 使用NoSQL和搜索引擎
- 業務拆分
- 分布式服務
網站架構模式
- 分層
應用層,服務層,數據層
- 分割
按業務拆分,邏輯或物理部署上也都可以獨立。
- 分布式
分布式應用和服務,分布式靜態資源,分布式數據和存儲,分布式計算,分布式配置,分布式鎖,分布式文件
- 集群
多台服務器部署相同應用構成一個集群,通過負載均衡設備共同對外提供服務
- 緩存
CDN,反向代理,本地緩存,分布式緩存
- 異步
一個業務操作分成多個階段,每個階段之間通過共享數據的方式異步進行寫作。
特性:提高系統可用性,加快網站響應速度,消除並發訪問高峰
- 冗余
服務器冗余運行,數據冗余備份:當某台服務器宕機時,可以將其上的服務和數據訪問轉移到其他服務器上
- 自動化
發布過程自動化、自動化代碼管理、自動化測試、自動化安全測試、自動化部署、自動化監控、自動化報警、自動化失效恢復、自動化降級、自動化分配資源
- 安全
常見安全攻擊:XSS攻擊、SQL注入、CSRF攻擊等
大型網站核心架構要素
- 性能
相關指標:響應時間、並發數、吞吐量、性能計數器(描述服務器或操作系統性能的一些數據指標)
- 可用性
可用性指標
故障分類及權重
- 伸縮性
通過不斷向集群中加入服務器的手段來緩解不斷上升的用戶並發訪問壓力和不斷增長的數據存儲需求
- 擴展性
在網站新增業務產品時,是否可以實現對現有產品透明無影響,不需要任何改動或很少改動既有業務功能就可以上線新產品
- 安全性
衡量網站安全機構的標准:針對現在和潛在的各種攻擊與竊密手段,是否有可靠的應對策略。
性能測試方法
- 性能測試
以系統升級初期規划的性能指標為預期目標,對系統不斷施加壓力,驗證系統在資源科接受范圍內,是否能達到性能瓶頸。
- 負載測試
對系統不斷地增加並發請求以施加壓力,直到系統的某項或多項性能指標達到安全臨界值。
- 壓力測試
超過安全負載的情況下,對系統繼續施加壓力,直到系統崩潰或不能再處理任何請求。
- 穩定性測試
被測試系統在特定硬件、軟件、網絡環境下,給系統加載一定業務壓力,使系統運行一段較長時間,以驗證系統是否穩定。
WEB前端性能優化
- 瀏覽器訪問優化
手段:減少http請求,使用瀏覽器緩存,啟用壓縮,CSS放在頁面最上面、JavaScript放在頁面最下面,減少Cookie傳輸
- CND加速
一般緩存靜態資源,如圖片、文件、CSS、Script腳本、靜態網頁等
- 反向代理
作用:保護網站安全、配置緩存加速Web請求、通過負載均衡構建集群提高系統處理能力,改善高並發性能。
應用服務器優化
- 分布式緩存
網站性能優化第一定律:優先考慮使用緩存優化性能
- 異步操作
消息隊列調用異步化--任何可以晚點做的事情都應該晚點再做。
- 使用集群
避免單一服務器因負載壓力過大而響應緩慢
- 代碼優化
重點關注:多線程(將對象設計未無狀態對象、使用局部對象、並發訪問資源時使用鎖)、資源復用、數據結構、垃圾回收等
- 存儲性能優化
機械硬盤vs.固態硬盤、B+樹vs.LSM樹、RAIDvs.HDFS