大型網站架構演化
網站架構設計的目標
高可用、高性能、易擴展、可伸縮、安全。
網站的價值在於它能爲用戶提供什麼價值,在於網站能做什麼,不在於網站怎麼做的。
不是所有的問題都可以通過技術來解決。
有的時候調整業務也是很好的一種方式。
技術是用來解決業務問題的,業務的問題也可以嘗試通過業務的手段去解決。
網站架構演化發展歷程
初始階段
應用服務和數據服務分離
一臺服務器逐漸不能滿足需求,越來越多的用戶訪問導致性能越來越差,越來越多的數據導致存儲空間不足。
將存儲和應用服務器分開。
緩存
80% 的業務訪問集中在 20% 的數據上。
緩存又可以有兩種方案:
- 緩存在應用服務器的本地緩存;
- 訪問速度較快,但是收到內存限制。
- 專門的分佈式緩存服務器;
- 理論上不受內存容量限制。
應用服務器集羣
使用集羣是網站解決高併發、海量數據問題的常用手段。
數據庫讀寫分離
網站使用緩存後,絕大部分數據讀操作訪問都可以不通過數據庫就能完成,但是仍有一部分讀操作(緩存訪問不命中、緩存過期)和全部的寫操作需要訪問數據庫,在網站的用戶達到一定規模後,數據庫因爲負載壓力過高而成爲網站的瓶頸。
大部分主流數據庫提供主從熱備功能,配置主從關係,將數據同步,利用這一功能進行讀寫分離,改善數據庫負載壓力。
反向代理和 CDN 加速
CDN 和 反向代理的基本原理都是緩存。
CDN 部署在網絡提供商的機房,用戶在請求網站服務時,可以從距離自己最近的網絡提供商機房獲取數據;
反向代理部署在網站的中心機房,當用戶請求到達中心機房後,首先訪問的服務器是反向代理服務器,如果反向代理服務器中緩存着用戶請求的資源,就將其直接返回給用戶。
分佈式文件系統和分佈式數據庫
文件服務器正常,文件太多放不下了。
分佈式數據庫是網站數據庫拆分的最後手段,只有在單表數據規模非常大的時候才使用。
不到不得已時,網站常用的數據庫拆分手段是業務分庫,不同業務使用不同數據庫部署在不同的機器上。
NoSQL 和搜索引擎
網站業務愈加複雜,對數據存儲和檢索的需求也越來越複雜,網站需要使用一些菲關係數據庫技術如 NoSQL 和非數據庫查詢技術如搜索引擎。
業務拆分
縱向拆分。
服務拆分
橫向拆分。
提供一些統一的常用的相同的業務操作。
業務部門、基礎服務器部門、數據部門等等。
EOF