天天看點

大型網站伺服器架構

一、伺服器叢集改善并發問題

使用叢集是網站解決高并發、海量資料問題的常用手段。當一台伺服器的處理能力、存儲空間不足時,不要企圖去更換更強大的伺服器,對大型網站而言,不管多麼強大的伺服器,都滿足不了網站持續增長的業務需求。這種情況下,更恰當的做法是增加一台伺服器分擔原有伺服器的通路及存儲壓力。 對網站架構而言,隻要能通過增加一台伺服器的方式改善負載壓力,就可以以同樣的方式持續增加伺服器不斷改善系統性能,進而實作系統的可伸縮性。應用伺服器實作叢集是網站可伸縮架構設計中較為簡單成熟的一種,如下圖所示:

大型網站伺服器架構

通過負載均衡排程伺服器,可以将來自使用者浏覽器的通路請求分發到應用伺服器叢集中的任何一台伺服器上,如果有更多使用者,就在叢集中加入更多的應用伺服器,使應用伺服器的壓力不再成為整個網站的瓶頸。

 二、資料庫讀寫分離

網站在使用緩存後,使對大部分資料讀操作通路都可以不通過資料庫就能完成,但是仍有一部分讀操作(緩存通路不命中、緩存過期)和全部的寫操作都需要通路資料庫,在網站的使用者達到一定規模後,資料庫因為負載壓力過高而成為網站的瓶頸。 目前大部分的主流資料庫都提供主從熱備功能,通過配置兩台資料庫主從關系,可以将一台資料庫伺服器的資料更新同步到另一台伺服器上。網站利用資料庫的這一功能,實作資料庫讀寫分離,進而改善資料庫負載壓力。如下圖所示:

大型網站伺服器架構

應用伺服器在寫資料的時候,通路主資料庫,主資料庫通過主從複制機制将資料更新同步到從資料庫,這樣當應用伺服器讀資料的時候,就可以通過從資料庫獲得資料。為了便于應用程式通路讀寫分離後的資料庫,通常在應用伺服器端使用專門的資料通路子產品,使資料庫讀寫分離對應用透明。

三、使用反向代理和CDN加速

随着網站業務不斷發展,使用者規模越來越大,由于中國複雜的網絡環境,不同地區的使用者通路網站時,速度差别也極大。有研究表明,網站通路延遲和使用者流失率正相關,網站通路越慢,使用者越容易失去耐心而離開。為了提供更好的使用者體驗,留住使用者,網站需要加速網站通路速度。主要手段有使用 CDN 和反向代理。如下圖所示:

大型網站伺服器架構
CDN 和反向代理的基本原理都是緩存。

CDN 部署在網絡提供商的機房,使使用者在請求網站服務時,可以從距離自己最近的網絡提供商機房擷取資料

反向代理則部署在網站的中心機房,當使用者請求到達中心機房後,首先通路的伺服器是反向代理伺服器,如果反向代理伺服器中緩存着使用者請求的資源,就将其直接傳回給使用者

使用 CDN 和反向代理的目的都是盡早傳回資料給使用者,一方面加快使用者通路速度,另一方面也減輕後端伺服器的負載壓力。

四、分布式資料庫

任何強大的單一伺服器都滿足不了大型網站持續增長的業務需求。資料庫經過讀寫分離後,從一台伺服器拆分成兩台伺服器,但是随着網站業務的發展依然不能滿足需求,這時需要使用分布式資料庫。檔案系統也一樣,需要使用分布式檔案系統。如下圖所示:

大型網站伺服器架構

分布式資料庫是網站資料庫拆分的最後手段,隻有在單表資料規模非常龐大的時候才使用。不到不得已時,網站更常用的資料庫拆分手段是業務分庫,将不同業務的資料部署在不同的實體伺服器上。

五、使用NoSql和搜尋引擎伺服器

随着網站業務越來越複雜,對資料存儲和檢索的需求也越來越複雜,網站需要采用一些非關系資料庫技術如 NoSQL 和非資料庫查詢技術如搜尋引擎。如下圖所示:

繼續閱讀