網站架構的伸縮性設計

網站開發初期,咱們習慣性把全部代碼都寫到一個項目中。算法

前臺、後臺、緩存、數據庫、靜態資源... 等等。sql

網站系統物理分離數據庫

慢慢的系統會原來越大,很顯然須要面對大量用戶的高併發訪問和存儲海量數據。緩存

不少用戶的請求,不可能在一臺服務器上完成。服務器

不少緩存數據,數據庫數據,也不可能在一臺服務器上完成。架構

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

以下圖。負載均衡


物理分離實現服務器伸縮

原理高併發

咱們經過多臺服務器組裝一個總體共同提供服務,經過不斷地向集羣中加入服務器,來緩解不斷上升的
用戶併發訪問壓力和不斷增加的數據存儲需求。性能

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

  • 是否容易向集羣中添加新的服務器。

  • 當加入新的服務器,是否能夠提供和原來的服務器無差異的服務。

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

應用服務器集羣

只要服務器上不保存數據,全部的服務器都是對等的,經過負載均衡設備就能夠向集羣中增長服務器。

關係型數據庫集羣(MYSQL)

關係型數據庫的集羣伸縮性方案必須在數據庫以外實現,經過路由分區等手段將部署有多個數據的服務器組成一個集羣。

例如:Mysql 等。

非關係型數據庫集羣(NOSQL)

非關係型數據庫先天就是爲海量數據庫準備的,所以對伸縮性的支持很是好。

例如:Redis、Memcache 等等。

緩存服務器集羣

加入新的服務器可能會致使緩存路由失效,進而致使集羣中大部分緩存數據都沒法訪問。

部署前須要改進緩存路由算法保證緩存數據的可訪問性。

靜態資源服務器集羣

好比 CSS,JS,Img 等資源進行部署到服務器集羣,下降流量並提升頁面呈現速度。

網站的縱向分離

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

以下圖。


縱向分離部署實現系統伸縮性

網站的橫向分離

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

以下圖。


橫向分離部署實現系統伸縮性

單一功能經過集羣規模進行伸縮。

將不一樣功能分離部署能夠實現必定程度的伸縮性,可是隨着網站訪問量的逐步增長,即便分離到最新粒度的獨立部署
單一服務器也不能知足業務規模的要求。

所以,必須使用服務器集羣,即將相同服務部署在多臺服務器上構成一個集羣總體對外服務。

好比:搜索功能。

若是一臺服務器能夠提供每秒1000次的請求服務,若是網站高峯期,每秒搜索訪問量爲10000次。

那麼,就須要你部署10臺服務器構成一個集羣。

同理,緩存服務器也會出現這種狀況。

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

總結

集羣伸縮性,能夠分爲應用服務器集羣伸縮性和數據服務器集羣伸縮性。

這兩種集羣因爲對數據狀態管理的不一樣,技術實現也有很大的區別。

你們,能夠根據每一種具體的架構設計進行深究。

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


Thanks ~


IT小圈兒
相關文章
相關標籤/搜索