擴展性(Extensibility)-指對現有系統影響最小的情況下,系統功能可持續擴展或者提升的能力,表現在系統基礎設施穩定不需要經常變更,應用之間較少依賴和耦合,對需求變更可以敏捷響應。它是系統架構設計層面的開閉原則(對擴展開放,對修改關閉),架構設計考慮未來功能擴展,當系統增加新功能時,不需要對現有系統的結構和代碼進行修改。
1、構建可擴展性的網站架構
低耦合的系統更容易擴展、復用。
設計網站可擴展架構的核心思想時模塊化,並在此基礎上,降低模塊間的耦合性,提高模塊的復用性。
分層和分割不僅可以進行架構伸縮,也是模塊化設計的重要手段,利用分層和分割的方式將軟件分割為若干個低耦合的獨立的組件模塊,這些組件模塊以消息傳遞及依賴調用的方式聚合成一個完整的系統。
在大型網站中,這些模塊通過分布式部署的方式,獨立的模塊部署在獨立的服務器上,從物理上分離模塊間的耦合關系,進一步降低耦合性提高復用性。
2、利用分布式消息隊列降低系統耦合性
2.1 事件驅動架構
事件驅動架構通過在低耦合的模塊間傳輸事件消息,以保持模塊的松散耦合,並借助事件消息的通信完成模塊間的合作。典型的事件驅動架構就是操作系統中常見的生產者消費者模式。在大型網站中,最常見的實現手段就是分布式消息隊列。
2.2 分布式消息隊列
消息生產者應用程序通過遠程訪問接口將消息推送給消息隊列服務器,消息隊列服務器將消息寫入本地內存隊列后立即返回成功響應給消息生產者。消息隊列服務器根據消息訂閱列表查找訂閱該消息的消息消費者應用程序,將消息隊列中的消息按照先進先出(FIFO)的原則將消息通過遠程通信接口發送給消息消費者程序。
在伸縮性方面,由於消息隊列服務器上的數據可以看作是及時處理的,因此類似於無狀態的服務器,伸縮性設計比較簡單。將新服務器加入分布式消息隊列急群中,通知生產者服務器更改消息隊列服務器列表即可。
在可用性方面,為了避免消費者進程處理緩慢,分布式消息隊列服務器內存空間不足造成的問題,如果內存隊列已滿,會將消息寫入磁盤,消息推送模塊在將內存隊列消息處理完成后,將磁盤內容加載到內存隊列繼續處理。
3、利用分布式服務打造可復用的業務平台
分布式服務則通過接口分解系統耦合性,不用子系統通過相同的接口描述進行服務調用。
大型網站分布式服務的需求與特點:
負載均衡
失效轉移
高效的遠程通信
整合異構系統
對應用最少侵入
版本管理
實時監控
4、可擴展的數據結構
傳統的關系型數據庫為了保證關系運算的正確性,在設計數據庫結構的時候,就需要指定表的schema——字段名稱、數據類型等,並要遵循特定的設計范式,這些規范帶來一個問題:難以面對需求變更帶來的挑戰,所以有人通過預先設計一些冗余字段來應對。
許多NoSql數據庫使用 ColumnFamily設計來設計可擴展的數據結構。
好了,就先說這么多吧。吃飯了~