1.2 大型網站架構演化發展歷程

mfsh發表於2017-04-26

大型網站的技術挑戰主要來自於龐大的使用者量,高併發的訪問和海量的資料
1. 初始階段的網站構架
大型網站都是從小型網站發展而來,網站構架也是一樣,是從小型網站構架逐步演化而來,只需要一臺伺服器就綽綽有餘
2. 應用服務和資料服務分離
隨著網站業務的發展,一臺伺服器逐漸不能滿足需求,越來越多的使用者訪問導致效能越來越差,越來越多的資料導致儲存空間不足,這時就需要將應用和資料分離,如:應用和資料分離後整個網站使用三臺伺服器,應用伺服器、檔案伺服器和資料庫伺服器,分離後不同特性的伺服器承擔不同的服務角色,網站處理併發和儲存資料的能力得到了很大改善。
3. 使用快取改善網站效能
網站訪問特點和現實世界的財富分配一樣遵循二八定律:80%的業務訪問集中在20%的資料上,購物時買家大部分的焦點都集中在少部分評價良好的商品上,百度搜尋的關鍵詞也集中在少部分熱詞上。
既然大部分的業務集中在一小部分資料上,那麼把這一小部分資料快取在記憶體中可以減少一部分資料庫的壓力,提高網站的訪問速度。
4. 使用應用伺服器叢集改善網站的併發處理能力
使用叢集時網站解決高併發、海量資料問題的常用手段,當一臺伺服器的處理能力、儲存空間不足時,不要企圖去換更強大的伺服器,更恰當的做法時增加一臺伺服器,分擔原有的伺服器的訪問及儲存壓力。
對於網站構架而言,只要能通過增加一臺伺服器的方式改善負載壓力,就可以以同樣的方式持續增加伺服器,不斷改善系統效能,實現系統的可伸縮性。
5. 資料庫讀寫分離
網站在使用快取後,使絕大部分資料讀操作都可以不通過資料庫就可以完成,但是還有一部分的讀操作和全部的寫操作都需要訪問資料庫,目前大部分主流資料庫都提供主從功能,可以將一臺資料伺服器的資料更新同步到另一臺伺服器上,網站利用資料庫的這一功能實現資料庫的讀寫分離,改善資料庫的負載壓力。
應用伺服器在寫資料的時候,訪問主資料庫,主資料庫通過主從複製機制將資料更新到從資料庫,這樣當應用伺服器讀取資料時可以通過從資料庫獲得資料。
6. 使用反向代理和CDN加速網站響應
隨著網站業務不斷髮展,使用者規模越來越大,網路情況複雜等因素,不同地區訪問網站時速度差別極大,為提供更好的使用者體驗,需要加速網站的訪問速度。
CDN和反向代理的原理基本都是快取
CDN部署在網路供應商的機房,使使用者在請求網站服務時,可以從距離自己更近的機房獲取資料
反向代理部署在網站的中心機房,當使用者請求達到中心機房後,首先訪問的伺服器是反向代理伺服器,如果反向代理伺服器中快取著使用者請求的資源,就將其直接返回給使用者。
使用反向代理和CDN加速網站響應,都是儘早將資料返回給使用者,一方面加快使用者訪問速度,另一方面減輕後端伺服器壓力。
7. 使用分散式檔案系統和分散式資料庫系統
任何強大的單一伺服器都滿足不了大型網站持續增長的業務需求,資料庫讀寫分離後,從一臺伺服器拆分成兩臺甚至伺服器,但是隨著網站業務的發展仍不能滿足需求。
分散式資料庫是網站資料庫拆分的最後手段,只有在單表資料庫規模非常龐大的時候才使用。網站更常用的資料庫拆分手段是業務分庫,將不同業務的資料庫部署在不同的物理伺服器上。
8. 使用NoSQL和搜尋引擎
隨著網站業務越來越複雜,對資料儲存和檢索的需求越來越複雜,網站需採用一些非關係型資料庫技術如NoSQL和非資料庫查詢技術如搜尋引擎。
NoSQL和搜尋引擎都是源自網際網路的技術手段,可對伸縮的分散式特性具有更好的支援,應用伺服器則通過一個統一資料訪問模組訪問各種資料,減輕應用程式管理諸多資料來源的麻煩
9. 業務拆分
大型網站為了應對日益都咋的業務場景,通過使用分而治之的手段將整個網站業務分成不同的產品線,如大型購物網站就會將首頁、買家、買家等模組拆分成不同的產品線
10. 分散式服務
隨著業務拆分越來越小,儲存系統越來越龐大,應用系統整體的複雜度呈指數增長,部署維護越來越困難
既然每一個應用系統都需要執行許多相同的業務操作,比如使用者管理、商品管理等,可以將這些共同的業務提取出來,獨立部署。而應用系統只需要管理使用者介面。

相關文章