【讀書筆記】大型網站技術架構

關於大型網站

大型網站是相當於企業級應用來說的,特點有

  • 高併發,大流量
  • 高可用
  • 海量數據
  • 用戶分佈廣泛,網絡情況複雜
  • 安全環境惡劣
  • 需求快速變更,發佈頻繁
  • 漸進式發展

核心要素

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

  • 性能
  • 可用性(Availability)
  • 伸縮性(Scalability)
  • 擴展性(Extensibility)
  • 安全性

大型網站追求的性能指標

可用性 availability

在服務器宕機時,服務和應用是否依舊可用。網站使用的商用服務器硬件的設計目標本身並不保證高可用性。必須在系統設計層面予以考慮。

伸縮性 scalability

定義:往集羣中加入服務器的手段,緩解併發訪問壓力的難易程度

擴展性 extensibility

滿足功能需求的難易程度。一般使用事件驅動的架構或分佈式服務實現。

安全性 security


大型網站的演化發展歷程

任何大型網站都是從小網站進化出來的:

階段 1

應用程序、文件、數據庫都在同一臺服務器上
階段一

階段 2

應用和文件、數據分離。使用三臺專職服務器:

  • 文件服務器:執行大量業務邏輯,需要CPU優化的硬件

  • 數據庫服務器:磁盤讀寫和緩存讀寫,需要快速的硬盤和內存

  • 文件服務器:大硬盤
    階段二

階段 3

數據庫成爲瓶頸。加入對最hot的20%的數據緩存:

  • 應用服務器上的本地緩存(大小受限)

  • 專門的分佈式緩存服務器集羣上的遠程緩存
    階段三

階段 4

應用服務器成爲瓶頸。將應用服務器擴展爲集羣。
此時的問題:

  • Session管理:4種方式
    • 複製:服務器之間同步所有session。資源利用率太低。
    • 綁定:利用load balancer的源地址Hash,確保同一IP的請求被分發到同一服務器。可用性目標很難達到,一旦某臺服務器宕機,它維護的所有session就會丟失
    • Cookie記錄:不少網站採用。但受限cookie的大小,並且如果用戶關閉瀏覽器的cookie功能,session就將無法工作。
    • 專用session服務器:將應用服務器分爲有狀態和無狀態部分。有狀態的部分用專門的session服務器來維護。一般來說redis是一個很好的選擇。
      階段四

階段 5

對數據看的寫操作和未命中緩存的讀操作,在用戶達到一定規模後使得數據庫再次成爲瓶頸。這時啓用主從備份功能:

1.寫數據直接寫到主數據庫
2.主數據庫通過主從備份機制把寫數據更新到從數據庫
3.讀操作讀取從數據庫
階段五

階段 6

隨着網站用戶羣擴散,特定地區的用戶訪問網站會遇到性能問題。此時開始對前端性能進行優化,啓用CDN和反向代理
階段六

階段 7

單機數據庫和文件系統不能滿足性能和高可用性需求,啓用分佈式數據庫和分佈式文件服務器:

  • 分佈式存儲系統的三類故障:

    • 瞬時鼓掌:網絡中斷、服務器GC等,可重試後自行恢復
    • 臨時故障:交換機宕機、網卡鬆動、內存損壞、CPU過熱等,需要人工干預,持續幾十分鐘到幾個小時
    • 永久故障:硬盤損壞
  • 使用備份和冗餘

  • 服務器宕機下的失效轉移:確認失效 -> 訪問轉移 -> 數據恢復

  • CAP原理:可用性、某種程度上的數據一致性、伸縮性之間的權衡

    • 強一致:各個副本數據總是一致的,對更新和讀操作的響應也是一致的
    • 用戶一致:各個副本的數據可能是不一致的,但是用戶一旦訪問數據,就會通過糾錯和校驗機制確保用戶得到的數據是一致正確的
    • 最終一致:各個副本的數據可能是不一致的,用戶得到的數據也可能是不一致的(同一個用戶連續訪問,或者多個用戶同時訪問,結果不同)。但是系統經過一段時間的自我恢復和修正,數據最終達到一致。

階段七

階段 8

網站業務越來越複雜,對搜索和存儲的需求也越來越複雜。此時引入NoSQL和非數據庫查詢技術,如搜索引擎。
階段八

階段 9

業務場景複雜度與日俱增,此時開始採取分而治之的手段把網站業務拆分成不同的產品線。技術上網站被拆分成多個獨立維護的應用。應用之間通過如消息隊列等手段通信。

階段九

階段 10

隨着業務拆分越來越小,應用系統的整體複雜程度急劇上升,部署和維護越來越困難。此時採取分佈式服務架構,把公共的可複用業務提取出來獨立部署

階段10

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章