《大型網站技術架構》總結---架構演化

趁着放假,終於把《大型網站技術架構核心原理與案例分析》這本書看完了。這本書給了我對於網站架構的全新認識,整本書寫的比較淺顯易懂,讓入門的人比較容易理解。裏面介紹了很多技術概念。向反向代理和CDN等等。我寫兩篇文章,是看完之後的總結。

這本書的第一章就寫了大型網站架構演化,寫明瞭一個小網站是如何一步步的演化發展成一個大網站。

大型網站的特點:高併發,大流量;高可用;海量數據;用戶分佈廣泛,網絡情況複雜;需求變化快,發佈頻發;漸進式發展;安全環境惡劣。

一.開始階段的網站架構

       這就是最初的小型網站,可能只有一臺服務器,也用可能是自己的電腦。使用LAMP(Linux+Apache+MySQL+PHP)開發。使用的都是開源免費的軟件。一個小型網站就搭建成功了,像應用程序,數據庫和文件都放在一臺服務器上。如下圖:

二.應用服務和數據服務分離

      隨着網站發展,一臺服務器不能滿足要求。越來越多的用戶使得網站性能編程,存儲空間不足。這時應該讓應用程序和數據分離,分別存放在不同的服務器上。應用程序服務器需要更強大的CPU,數據庫服務器需要快速磁盤檢索和數據緩存,文件服務器需要更大的硬盤。如下圖:

三.使用緩存改善性能

     隨着用戶增多,數據庫的壓力越來越大,每一次對數據庫的操作都可能影響到整個網站的性能。網站的特點也符合二八定律,80%的業務訪問集中在20%的數據上,因此我們可以對數據進行處理,將經常用到的數據緩存在內存中,這樣減少數據庫的訪問壓力。使用緩存可以用兩種:緩存在本地或者專門的服務器上。分佈式緩存採用集羣的方式,部署大內存的服務器作爲專門的緩存服務器,在理論上做到內存容量不受限制。如下圖:

四.使用應用服務器集羣

  在網站高峯期,應用服務器成爲整個網站的瓶頸,使用集羣是網站處理高併發,海量數據的常用手段。當一臺服務器的處理能力不足時,這時應該增加一臺服務器分擔原有服務器的訪問及存儲壓力。通過不斷的增加服務器改善系統性能,實現系統的可伸縮性。通過負載均衡將用戶的請求分發到服務器集羣的一臺服務器上。如下圖:

五.數據庫讀寫分離

      使用緩存後,絕大多數的數據讀訪問操作都可以不通過數據庫來完成。但是,小部分讀操作和全部的寫操作任需要訪問數據庫。在網站規模達到一定程度後,數據庫因負載壓力過高而成爲瓶頸。目前大部分數據庫都提供主從熱備份功能,通過配置兩臺數據庫主從關係,將一臺數據庫的數據更系同步到另一臺服務器上。這可以實現數據庫的讀寫分離,如下:

六.使用反向代理和CDN加速網站響應

      爲了提供更好的用戶體驗,網站需要加速網站訪問速度。主要有使用CDN和反向代理。它們的基本原理都是緩存,區別在於CDN部署在網絡提供商的機房,使用戶在訪問網站時,可以從距自己最近的網絡提供商機房獲取數據;而方向代理則部署在網站的中心機房,當用戶請求到達中心機房後,首先訪問的是反向代理服務器,如果反向代理服務器中緩存着用戶請求的資源,就直接返回給用戶。如圖:

七.使用分佈式文件系統和分佈式數據庫

      任何強大的單一服務器都滿足不了大型網站持續增長的業務需求。數據庫經過讀寫分離後,仍不能滿足需求。這時要使用分佈式數據庫,文件系統也是一樣。分佈式數據庫是網站數據庫拆分的最後手段,包括業務分庫和單表拆分。如下圖:

八.使用NoSQL和搜索引擎

      隨着業務的複雜,對數據存儲和檢索的需求也越來越複雜,網站需要採用一些非關係型數據庫如NoSQL和非數據庫查詢技術如搜索引擎。如圖:

九.業務拆分

      大型網站爲了應對日益複雜的業務場景,通過分而治之的手段將網站的業務拆分,分成不同的產品線,歸不同的團隊負責。如圖:

十.分佈式服務

     隨着業務拆分越來越小,存儲系統越來越大,整體複雜度程指數級增加,部署維護越來越困難。每一個應用系統可能會執行相同的操作,比如用戶管理等。將這些公用的業務提取出來,獨立部署,由這些可複用的業務連接數據庫,提供公用業務服務,如下圖:

經過上面十條的演變,基本大多數的技術問題得以解決。這十點改進讓我理解了網站架構的演變過程,增強了對於網站架構的直觀認識,雖然我沒有進去過機房內部。網站技術的發展是要隨着業務發展而進步的。上面有很多概念性的內容,如分層,緩存,CDN,分佈式等等。後面一篇文章再來具體說說這些技術。



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