轉至http://www.cnblogs.com/jkswjw/p/6377109.htmlhtml
本文是對《大型網站架構設計》(李智慧 著)一書的梳理,相似文字版的「思惟導圖」前端
全文主要圍繞「性能,可用性,伸縮性,擴展性,安全」這五個要素算法
性能,可用性,伸縮性這幾個要素基本都涉及到應用服務器,緩存服務器,存儲服務器這幾個方面數據庫
三個緯度:演化、模式、要素後端
五個要素: 性能,可用性,伸縮性,擴展性,安全瀏覽器
圖例可參考 大型網站架構演化歷程(http://www.hollischuang.com/archives/728):緩存
初始階段的網站架構:一臺服務器,上面同時擁有應用程序,數據庫,文件,等全部資源。例如 LAMP 架構安全
應用和數據服務分離:三臺服務器(硬件資源各不相同),分別是應用服務器,文件服務器和數據庫服務器性能優化
使用緩存改善網站性能:分爲兩種,緩存在應用服務器上的本地緩存和緩存在專門的分佈式緩存服務器的遠程緩存服務器
使用應用服務器集羣改善網站併發處理能力:經過負載均衡調度服務器來將訪問請求分發到應用服務器集羣中的任何一臺機器
數據庫讀寫分離:數據庫採用主從熱備,應用服務器在寫數據時訪問主數據庫,主數據庫經過主從複製機制將數據更新同步到從數據庫。應用服務器使用專門的數據訪問模塊從而對應用透明
使用反向代理和 CDN 加速網站響應:這二者基本原理都是緩存。反向代理部署在網站的中心機房,CDN 部署在網絡提供商的機房
使用分佈式文件系統和分佈式數據庫系統:數據庫拆分的最後手段,更經常使用的是業務分庫
使用 NoSQL 和搜索引擎:對可伸縮的分佈式有更好的支持
業務拆分:將整個網站業務拆分紅不一樣的應用,每一個應用獨立部署維護,應用之間經過超連接創建聯繫/消息隊列進行數據分發/訪問同一數據存儲系統
分佈式服務:公共業務提取出來獨立部署
演化的價值觀
大型網站架構的核心價值是隨網站所需靈活應對
驅動大型網站技術發展的主要力量是網站的業務發展
誤區
一味追隨大公司的解決方案
爲了技術而技術
企圖用技術解決全部問題
模式的關鍵在於模式的可重複性
分層:橫向切分
分割:縱向切分
分佈式:分層和分割的主要目的是爲了切分後的模塊便於分佈式部署。經常使用方案:
分佈式應用和服務
分佈式靜態資源
分佈式數據和存儲
分佈式計算
分佈式配置,分佈式鎖,分佈式文件,等等
集羣:多臺服務器部署相同的應用構成一個集羣,經過負載均衡設備共同對外提供服務
緩存:將數據放距離計算最近的位置加快處理速度,改善性能第一手段,能夠加快訪問速度,減少後端負載壓力。使用緩存 兩個前提條件 :1.數據訪問熱點不均衡;2.數據某時段內有效,不會很快過時
CDN
反向代理
本地緩存
分佈式緩存
異步:旨在系統解耦。異步架構是典型的消費者生產者模式,特性以下:
提升系統可用性
加快網站訪問速度
消除併發訪問高峯
冗餘:實現高可用。數據庫的冷備份和熱備份
自動化:包括髮布過程自動化,自動化代碼管理,自動化測試,自動化安全檢測,自動化部署,自動化監控,自動化報警,自動化失效轉移,自動化失效恢復,自動化降級,自動化分配資源
安全:密碼,手機校驗碼,加密,驗證碼,過濾,風險控制
架構是「最高層次的規劃,難以改變的規定」。主要關注五個要素:
性能
可用性(Availability)
伸縮性(Scalability)
擴展性(Extensibility)
安全性
下面依次對這五個要素進行概括
性能的測試指標主要有:
響應時間:指應用執行一個操做須要的時間
併發數:指系統可以同時處理請求的數目
吞吐量:指單位時間內系統處理的請求數量
性能計數器:描述服務器或者操做系統性能的一些數據指標
性能測試方法:
性能測試
負載測試
壓力測試
穩定性測試
性能優化,根據網站分層架構,能夠分爲三大類:
Web 前端性能優化
保護網站安全
經過配置緩存功能加速 Web 請求
實現負載均衡
減小 http 請求
使用瀏覽器緩存
啓用壓縮
CSS 放在頁面最上面,JavaScript 放在頁面最下面
減小 Cookie 傳輸
瀏覽器訪問優化
CDN 加速:本質是一個緩存,通常緩存靜態資源
反向代理
應用服務器性能優化:主要手段有 緩存、集羣、異步
多線程(設計爲無狀態,使用局部對象,併發訪問資源使用鎖)
資源複用(單例,對象池)
數據結構
垃圾回收
分佈式緩存(網站性能優化第必定律:優化考慮使用緩存優化性能)
異步操做(消息隊列,削峯做用)
使用集羣
代碼優化
存儲服務器性能優化
機械硬盤 vs. 固態硬盤
B+ 樹 vs. LSM 樹
RAID vs. HDFS
高可用的網站架構:目的是保證服務器硬件故障時服務依然可用、數據依然保存並可以被訪問,主要手段數據和服務的冗餘備份及失效轉移
高可用的應用:顯著特色是應用的無狀態性
Session 複製
Session 綁定
利用 Cookie 記錄 Session
Session 服務器
經過負載均衡進行無狀態服務的失效轉移
應用服務器集羣的 Session 管理
高可用的服務:無狀態的服務,可以使用相似負載均衡的失效轉移策略,此外還有以下策略
分級管理
超時設置
異步調用
服務降級
冪等性設計
高可用的數據:主要手段是數據備份和失效轉移機制
失效確認
訪問轉移
數據恢復
冷備:缺點是不能保證數據最終一致和數據可用性
熱備:分爲異步熱備和同步熱備
數據一致性(Consisitency)
數據可用性(Availibility)
分區耐受性(Partition Tolerance)
CAP 原理
數據備份
失效轉移:由如下三部分組成
高可用網站的軟件質量保證
主幹開發、分支發佈
分支開發、主幹發佈
網站發佈
自動化測試
預發佈驗證
代碼控制
自動化發佈
灰度發佈
網站運行監控
警報系統
失效轉移
自動優雅降級
用戶行爲日誌採集(服務器端和客戶端)
服務器性能監控
運行數據報告
監控數據採集
監控管理
大型網站的「大型」是指:
用戶層面:大量用戶及大量訪問
功能方面:功能龐雜,產品衆多
技術層面:網站須要部署大量的服務器
伸縮性的分爲以下幾個方面
網站架構的伸縮性設計
縱向分離(分層後分離)
橫向分離(業務分割後分離)
不一樣功能進行物理分離實現伸縮
單一功能經過集羣規模實現伸縮
應用服務器集羣的伸縮性設計
輪詢(Round Robin, RR)
加權輪詢(Weighted Round Robin, WRR)
隨機(Random)
最少連接(Least Connections)
源地址散列(Source Hashing)
HTTP 重定向負載均衡
DNS 域名解析負載均衡
反向代理負載均衡(在 HTTP 協議層面,應用層負載均衡)
IP 負載均衡(在內核進程完成數據分發)
數據鏈路層負載均衡(數據鏈路層修改 mac 地址,三角傳輸模式,LVS)
負載均衡算法
分佈式緩存集羣的伸縮性設計
Memcached 客戶端(包括 API,路由算法,服務器列表,通訊模塊)
Memcached 服務器集羣
Memcached 分佈式緩存集羣的訪問模型
Memcached 分佈式緩存集羣的伸縮性挑戰
分佈式緩存的一致性 Hash 算法(一致性 Hash 環,虛擬層)
數據存儲服務集羣的伸縮性設計
關係數據庫集羣的伸縮性設計
NoSQL 數據庫的伸縮性設計
系統架構設計層面的「開閉原則」
構建可擴展的網站架構
利用分佈式消息隊列下降耦合性
事件驅動架構(Event Driven Architecture)
分佈式消息隊列
利用分佈式服務打造可複用的業務平臺
Web Service 與企業級分佈式服務
大型網站分佈式服務的特色
分佈式服務框架設計(Thrift, Dubbo)
可擴展的數據結構(如 ColumnFamily 設計)
利用開放平臺建設網站生態圈
XSS 攻擊和 SQL 注入攻擊是構成網站應用攻擊最主要的兩種手段,此外還包括 CSRF,Session 劫持等手段。
攻擊與防護
Error Code
HTML 註釋
文件上傳
路徑遍歷
表單 Token
驗證碼
Referer Check
避免被猜到數據庫表結構信息
消毒
參數綁定
SQL 注入攻擊
OS 注入攻擊
消毒(即對某些 html 危險字符轉義)
HttpOnly
反射型
持久型
XSS 攻擊:跨站點腳本攻擊(Cross Site Script)
XSS 防護手段
注入攻擊
注入防護
CSRF 攻擊:跨站點請求僞造(Cross Site Request Forgery)
CSRF 防護:主要手段是識別請求者身份
其餘攻擊和漏洞
Web 應用防火牆(ModSecurity)
網站安全漏洞掃描
信息加密技術及密鑰安全管理
把密鑰和算法放在一個獨立的服務器上
將加解密算法放在應用系統中,密鑰放在獨立服務器
信息傳輸:公鑰加密,私鑰解密
數字簽名:私鑰加密,公鑰解密
不可逆,非明文
可加鹽(salt)增長安全性
輸入的微小變化會致使輸出徹底不一樣
單向散列加密:不一樣輸入長度的信息經過散列計算獲得固定長度的輸出
對稱加密:加密和解密使用同一個密鑰
非對稱加密
密鑰安全管理:信息安全傳輸是靠密鑰保證的,改善手段有:
信息過濾與反垃圾
文本匹配
分類算法
黑名單