網站的可擴性展架構

lihong發表於2019-04-30

擴充套件性(Extensibility) - 指對現有系統影響最小的情況下,系統功能可持續擴充套件或提升的能力。表現在系統基礎設施穩定不需要經常變更,應用之間較少依賴和耦合,對需求變更可以敏捷響應。它是系統架構設計層面的開閉原則(對擴充套件開放、對修改關閉),架構設計考慮未來功能擴充套件,當系統增加新功能時,不需要對現有系統的結構和程式碼進行修改。

伸縮性(Scalability) - 指系統能夠通過增加減少自身資源規模的方式增減自己計算處理事務的能力。如果這種增減是成比例的,就被稱作線性伸縮性。在網站架構中 ,通常指利用叢集的方式增加伺服器數量、提高系統的整體事務吞吐能力。

1. 構建可擴充套件的網站架構

低耦合的系統更容易擴充套件、複用。

設計網站可擴充套件架構的核心思想是模組化,並在此基礎上,降低模組間的耦合性,提高模組的複用性。

分層和分割不僅可以進行架構伸縮,也是模組化設計的重要手段,利用分層和分割的方式將軟體分割為若干個低耦合的獨立的元件模組,這些元件模組以訊息傳遞及依賴呼叫的方式聚合成一個完整的系統。

在大型網站中,這些模組通過分散式部署的方式,獨立的模組部署在獨立的伺服器上,從物理上分離模組間的耦合關係,進一步降低耦合性提高複用性。

2. 利用分散式訊息佇列降低系統耦合性

2.1. 事件驅動架構

事件驅動架構通過在低耦合的模組間傳輸事件訊息,以保持模組的鬆散耦合,並藉助事件訊息的通訊完成模組間合作。典型的事件驅動架構就是作業系統中常見的生產者消費者模式。在大型網站中,最常見的實現手段就是分散式訊息佇列。

2.2. 分散式訊息佇列

訊息生產者應用程式通過遠端訪問介面將訊息推送給訊息佇列伺服器,訊息佇列伺服器將訊息寫入本地記憶體佇列後立即返回成功響應給訊息生產者。訊息佇列伺服器根據訊息訂閱列表查詢訂閱該訊息的訊息消費者應用程式,將訊息佇列中的訊息按照先進先出(FIFO)的原則將訊息通過遠端通訊介面傳送給訊息消費者程式。

網站的可擴性展架構

在伸縮性方面,由於訊息佇列伺服器上的資料可以看作是即時處理的,因此類似於無狀態的伺服器,伸縮性設計比較簡單。將新伺服器加入分散式訊息佇列叢集中,通知生產者伺服器更改訊息佇列伺服器列表即可。

在可用性方面,為了避免消費者程式處理緩慢,分散式訊息佇列伺服器記憶體空間不足造成的問題,如果記憶體佇列已滿,會將訊息寫入磁碟,訊息推送模組在將記憶體佇列訊息處理完成以後,將磁碟內容載入到記憶體佇列繼續處理。

3. 利用分散式服務打造可複用的業務平臺

分散式服務則通過介面分解系統耦合性,不同子系統通過相同的介面描述進行服務呼叫。

大型網站分散式服務的需求與特點:

  • 負載均衡
  • 失效轉移
  • 高效的遠端通訊
  • 整合異構系統
  • 對應用最少侵入
  • 版本管理
  • 實時監控

4. 可擴充套件的資料結構

傳統的關係型資料庫為了保證關係運算的正確性,在設計資料庫表結構的時候,就需要指定表的 schema ——欄位名稱,資料型別等,並要遵循特定的設計正規化。這些規範帶來一個問題:難以面對需求變更帶來的挑戰,所以有人通過預先設計一些冗餘欄位來應對。

許多 NoSql 資料庫使用 ColumnFamily 設計來設計可擴充套件的資料結構。


相關文章