大型網站技術架構-入門梳理

brianway.github.io發表於2017-02-03

  羅列了大型網站架構涉及到的概念,附上了簡單說明

 前言

  • 本文是對《大型網站架構設計》(李智慧 著)一書的梳理,類似文字版的“思維導圖”
  • 全文主要圍繞“效能,可用性,伸縮性,擴充套件性,安全”這五個要素
  • 效能,可用性,伸縮性這幾個要素基本都涉及到應用伺服器,快取伺服器,儲存伺服器這幾個方面

 概述

  • 三個緯度:演化、模式、要素
  • 五個要素: 效能,可用性,伸縮性,擴充套件性,安全

  演化歷程

  圖例可參考 大型網站架構演化歷程

  1. 初始階段的網站架構:一臺伺服器,上面同時擁有應用程式,資料庫,檔案,等所有資源。例如 LAMP 架構
  2. 應用和資料服務分離:三臺伺服器(硬體資源各不相同),分別是應用伺服器,檔案伺服器和資料庫伺服器
  3. 使用快取改善網站效能:分為兩種,快取在應用伺服器上的本地快取和快取在專門的分散式快取伺服器的遠端快取
  4. 使用應用伺服器叢集改善網站併發處理能力:通過負載均衡排程伺服器來將訪問請求分發到應用伺服器叢集中的任何一臺機器
  5. 資料庫讀寫分離:資料庫採用主從熱備,應用伺服器在寫資料時訪問主資料庫,主資料庫通過主從複製機制將資料更新同步到從資料庫。應用伺服器使用專門的資料訪問模組從而對應用透明
  6. 使用反向代理和 CDN 加速網站響應:這兩者基本原理都是快取。反向代理部署在網站的中心機房,CDN 部署在網路提供商的機房
  7. 使用分散式檔案系統和分散式資料庫系統:資料庫拆分的最後手段,更常用的是業務分庫
  8. 使用 NoSQL 和搜尋引擎:對可伸縮的分散式有更好的支援
  9. 業務拆分:將整個網站業務拆分成不同的應用,每個應用獨立部署維護,應用之間通過超連結建立聯絡/訊息佇列進行資料分發/訪問同一資料儲存系統
  10. 分散式服務:公共業務提取出來獨立部署

架構演化-分散式服務

  演化的價值觀

  • 大型網站架構的核心價值是隨網站所需靈活應對
  • 驅動大型網站技術發展的主要力量是網站的業務發展

  誤區

  • 一味追隨大公司的解決方案
  • 為了技術而技術
  • 企圖用技術解決所有問題

  架構模式

  模式的關鍵在於模式的可重複性

  • 分層:橫向切分
  • 分割:縱向切分
  • 分散式:分層和分割的主要目的是為了切分後的模組便於分散式部署。常用方案:
    • 分散式應用和服務
    • 分散式靜態資源
    • 分散式資料和儲存
    • 分散式計算
    • 分散式配置,分散式鎖,分散式檔案,等等
  • 叢集:多臺伺服器部署相同的應用構成一個叢集,通過負載均衡裝置共同對外提供服務
  • 快取:將資料放距離計算最近的位置加快處理速度,改善效能第一手段,可以加快訪問速度,減小後端負載壓力。使用快取 兩個前提條件 :1.資料訪問熱點不均衡;2.資料某時段內有效,不會很快過期
    • CDN
    • 反向代理
    • 本地快取
    • 分散式快取
  • 非同步:旨在系統解耦。非同步架構是典型的消費者生產者模式,特性如下:
    • 提高系統可用性
    • 加快網站訪問速度
    • 消除併發訪問高峰
  • 冗餘:實現高可用。資料庫的冷備份和熱備份
  • 自動化:包括髮布過程自動化,自動化程式碼管理,自動化測試,自動化安全檢測,自動化部署,自動化監控,自動化報警,自動化失效轉移,自動化失效恢復,自動化降級,自動化分配資源
  • 安全:密碼,手機校驗碼,加密,驗證碼,過濾,風險控制

  核心要素

  架構是“最高層次的規劃,難以改變的規定”。主要關注五個要素:

  • 效能
  • 可用性(Availability)
  • 伸縮性(Scalability)
  • 擴充套件性(Extensibility)
  • 安全性

 架構

  下面依次對這五個要素進行歸納

  高效能

  效能的測試指標主要有:

  • 響應時間:指應用執行一個操作需要的時間
  • 併發數:指系統能夠同時處理請求的數目
  • 吞吐量:指單位時間內系統處理的請求數量
  • 效能計數器:描述伺服器或者作業系統效能的一些資料指標

  效能測試方法:

  • 效能測試
  • 負載測試
  • 壓力測試
  • 穩定性測試

效能測試曲線

  效能優化,根據網站分層架構,可以分為三大類:

  • Web 前端效能優化
    • 瀏覽器訪問優化
      • 減少 http 請求
      • 使用瀏覽器快取
      • 啟用壓縮
      • CSS 放在頁面最上面,JavaScript 放在頁面最下面
      • 減少 Cookie 傳輸
    • CDN 加速:本質是一個快取,一般快取靜態資源
    • 反向代理
      • 保護網站安全
      • 通過配置快取功能加速 Web 請求
      • 實現負載均衡
  • 應用伺服器效能優化:主要手段有 快取、叢集、非同步
    • 分散式快取(網站效能優化第一定律:優化考慮使用快取優化效能)
    • 非同步操作(訊息佇列,削峰作用)
    • 使用叢集
    • 程式碼優化
      • 多執行緒(設計為無狀態,使用區域性物件,併發訪問資源使用鎖)
      • 資源複用(單例,物件池)
      • 資料結構
      • 垃圾回收
  • 儲存伺服器效能優化
    • 機械硬碟 vs. 固態硬碟
    • B+ 樹 vs. LSM 樹
    • RAID vs. HDFS

  高可用

  • 高可用的網站架構:目的是保證伺服器硬體故障時服務依然可用、資料依然儲存並能夠被訪問,主要手段資料和服務的冗餘備份及失效轉移
  • 高可用的應用:顯著特點是應用的無狀態性
    • 通過負載均衡進行無狀態服務的失效轉移
    • 應用伺服器叢集的 Session 管理
      • Session 複製
      • Session 繫結
      • 利用 Cookie 記錄 Session
      • Session 伺服器
  • 高可用的服務:無狀態的服務,可使用類似負載均衡的失效轉移策略,此外還有如下策略
    • 分級管理
    • 超時設定
    • 非同步呼叫
    • 服務降級
    • 冪等性設計
  • 高可用的資料:主要手段是資料備份和失效轉移機制
    • CAP 原理
      • 資料一致性(Consisitency)
      • 資料可用性(Availibility)
      • 分割槽耐受性(Partition Tolerance)
    • 資料備份
      • 冷備:缺點是不能保證資料最終一致和資料可用性
      • 熱備:分為非同步熱備和同步熱備
    • 失效轉移:由以下三部分組成
      • 失效確認
      • 訪問轉移
      • 資料恢復
  • 高可用網站的軟體質量保證
    • 網站釋出
    • 自動化測試
    • 預釋出驗證
    • 程式碼控制
      • 主幹開發、分支釋出
      • 分支開發、主幹釋出
    • 自動化釋出
    • 灰度釋出
  • 網站執行監控
    • 監控資料採集
      • 使用者行為日誌採集(伺服器端和客戶端)
      • 伺服器效能監控
      • 執行資料包告
    • 監控管理
      • 警報系統
      • 失效轉移
      • 自動優雅降級

  伸縮性

  大型網站的“大型”是指:

  • 使用者層面:大量使用者及大量訪問
  • 功能方面:功能龐雜,產品眾多
  • 技術層面:網站需要部署大量的伺服器

  伸縮性的分為如下幾個方面

  • 網站架構的伸縮性設計
    • 不同功能進行物理分離實現伸縮
      • 縱向分離(分層後分離)
      • 橫向分離(業務分割後分離)
    • 單一功能通過叢集規模實現伸縮
  • 應用伺服器叢集的伸縮性設計
    • HTTP 重定向負載均衡
    • DNS 域名解析負載均衡
    • 反向代理負載均衡(在 HTTP 協議層面,應用層負載均衡)
    • IP 負載均衡(在核心程式完成資料分發)
    • 資料鏈路層負載均衡(資料鏈路層修改 mac 地址,三角傳輸模式,LVS)
    • 負載均衡演算法
      • 輪詢(Round Robin, RR)
      • 加權輪詢(Weighted Round Robin, WRR)
      • 隨機(Random)
      • 最少連結(Least Connections)
      • 源地址雜湊(Source Hashing)
  • 分散式快取叢集的伸縮性設計
    • Memcached 分散式快取叢集的訪問模型
      • Memcached 客戶端(包括 API,路由演算法,伺服器列表,通訊模組)
      • Memcached 伺服器叢集
    • Memcached 分散式快取叢集的伸縮性挑戰
    • 分散式快取的一致性 Hash 演算法(一致性 Hash 環,虛擬層)
  • 資料儲存服務叢集的伸縮性設計
    • 關聯式資料庫叢集的伸縮性設計
    • NoSQL 資料庫的伸縮性設計

  可擴充套件

  系統架構設計層面的“開閉原則”

  • 構建可擴充套件的網站架構
  • 利用分散式訊息佇列降低耦合性
    • 事件驅動架構(Event Driven Architecture)
    • 分散式訊息佇列
  • 利用分散式服務打造可複用的業務平臺
    • Web Service 與企業級分散式服務
    • 大型網站分散式服務的特點
    • 分散式服務框架設計(Thrift, Dubbo)
  • 可擴充套件的資料結構(如 ColumnFamily 設計)
  • 利用開放平臺建設網站生態圈

  網站的安全架構

  XSS 攻擊和 SQL 注入攻擊是構成網站應用攻擊最主要的兩種手段,此外還包括 CSRF,Session 劫持等手段。

  • 攻擊與防禦
    • XSS 攻擊:跨站點指令碼攻擊(Cross Site Script)
      • 反射型
      • 持久型
    • XSS 防禦手段
      • 消毒(即對某些 html 危險字元轉義)
      • HttpOnly
    • 注入攻擊
      • SQL 注入攻擊
      • OS 注入攻擊
    • 注入防禦
      • 避免被猜到資料庫表結構資訊
      • 消毒
      • 引數繫結
    • CSRF 攻擊:跨站點請求偽造(Cross Site Request Forgery)
    • CSRF 防禦:主要手段是識別請求者身份
      • 表單 Token
      • 驗證碼
      • Referer Check
    • 其他攻擊和漏洞
      • Error Code
      • HTML 註釋
      • 檔案上傳
      • 路徑遍歷
    • Web 應用防火牆(ModSecurity)
    • 網站安全漏洞掃描
  • 資訊加密技術及金鑰安全管理
    • 單向雜湊加密:不同輸入長度的資訊通過雜湊計算得到固定長度的輸出
      • 不可逆,非明文
      • 可加鹽(salt)增加安全性
      • 輸入的微小變化會導致輸出完全不同
    • 對稱加密:加密和解密使用同一個金鑰
    • 非對稱加密
      • 資訊傳輸:公鑰加密,私鑰解密
      • 數字簽名:私鑰加密,公鑰解密
    • 金鑰安全管理:資訊保安傳輸是靠金鑰保證的,改善手段有:
      • 把金鑰和演算法放在一個獨立的伺服器上
      • 將加解密演算法放在應用系統中,金鑰放在獨立伺服器
  • 資訊過濾與反垃圾
    • 文字匹配
    • 分類演算法
    • 黑名單

相關文章