網站架構的伸縮性設計

新亮筆記發表於2016-10-31

網站開發初期,我們習慣性把所有程式碼都寫到一個專案中。

前臺、後臺、快取、資料庫、靜態資源... 等等。

網站系統物理分離

慢慢的系統會原來越大,很顯然需要面對大量使用者的高併發訪問和儲存海量資料。

很多使用者的請求,不可能在一臺伺服器上完成。

很多快取資料,資料庫資料,也不可能在一臺伺服器上完成。

這是,網站的伸縮性架構就變得尤為重要。

如下圖。


網站架構的伸縮性設計
物理分離實現伺服器伸縮

原理

我們通過多臺伺服器組裝一個整體共同提供服務,通過不斷地向叢集中加入伺服器,來緩解不斷上升的
使用者併發訪問壓力和不斷增長的資料儲存需求。

衡量架構伸縮性的主要標準:

  • 是否容易向叢集中新增新的伺服器。

  • 當加入新的伺服器,是否可以提供和原來的伺服器無差別的服務。

  • 叢集中可容納的總的伺服器數量是否有限制。

應用伺服器叢集

只要伺服器上不儲存資料,所有的伺服器都是對等的,通過負載均衡裝置就可以向叢集中增加伺服器。

關係型資料庫叢集(MYSQL)

關係型資料庫的叢集伸縮性方案必須在資料庫之外實現,通過路由分割槽等手段將部署有多個資料的伺服器組成一個叢集。

例如:Mysql 等。

非關係型資料庫叢集(NOSQL)

非關係型資料庫先天就是為海量資料庫準備的,因此對伸縮性的支援非常好。

例如:Redis、Memcache 等等。

快取伺服器叢集

加入新的伺服器可能會導致快取路由失效,進而導致叢集中大部分快取資料都無法訪問。

部署前需要改進快取路由演算法保證快取資料的可訪問性。

靜態資源伺服器叢集

比如 CSS,JS,Img 等資源進行部署到伺服器叢集,降低流量並提高頁面呈現速度。

網站的縱向分離

將業務處理流程上的不同部分進行分離部署,實現系統伸縮性。

如下圖。


網站架構的伸縮性設計
縱向分離部署實現系統伸縮性

網站的橫向分離

將不同業務模組進行分離部署,實現系統伸縮性。

如下圖。


網站架構的伸縮性設計
橫向分離部署實現系統伸縮性

單一功能通過叢集規模進行伸縮。

將不同功能分離部署可以實現一定程度的伸縮性,但是隨著網站訪問量的逐步增加,即使分離到最新粒度的獨立部署
單一伺服器也不能滿足業務規模的要求。

因此,必須使用伺服器叢集,即將相同服務部署在多臺伺服器上構成一個叢集整體對外服務。

比如:搜尋功能。

如果一臺伺服器可以提供每秒1000次的請求服務,如果網站高峰期,每秒搜尋訪問量為10000次。

那麼,就需要你部署10臺伺服器構成一個叢集。

同理,快取伺服器也會出現這種情況。

事實上,計算一個服務的叢集規模,需要同時考慮其對可用性、效能的影響及關聯服務叢集的影響。

總結

叢集伸縮性,可以分為應用伺服器叢集伸縮性和資料伺服器叢集伸縮性。

這兩種叢集由於對資料狀態管理的不同,技術實現也有很大的區別。

大家,可以根據每一種具體的架構設計進行深究。

文章借鑑於書籍《大型網站技術架構》。


Thanks ~


網站架構的伸縮性設計
IT小圈兒

相關文章