擴展性(Extensibility) - 指對現有系統影響最小的狀況下,系統功能可持續擴展或提高的能力。表如今系統基礎設施穩定不須要常常變動,應用之間較少依賴和耦合,對需求變動能夠敏捷響應。它是系統架構設計層面的開閉原則(對擴展開放、對修改關閉),架構設計考慮將來功能擴展,當系統增長新功能時,不須要對現有系統的結構和代碼進行修改。數據庫
伸縮性(Scalability) - 指系統可以經過增長減小自身資源規模的方式增減本身計算處理事務的能力。若是這種增減是成比例的,就被稱做線性伸縮性。在網站架構中 ,一般指利用集羣的方式增長服務器數量、提升系統的總體事務吞吐能力。服務器
低耦合的系統更容易擴展、複用。數據結構
設計網站可擴展架構的核心思想是模塊化,並在此基礎上,下降模塊間的耦合性,提升模塊的複用性。架構
分層和分割不只能夠進行架構伸縮,也是模塊化設計的重要手段,利用分層和分割的方式將軟件分割爲若干個低耦合的獨立的組件模塊,這些組件模塊以消息傳遞及依賴調用的方式聚合成一個完整的系統。負載均衡
在大型網站中,這些模塊經過分佈式部署的方式,獨立的模塊部署在獨立的服務器上,從物理上分離模塊間的耦合關係,進一步下降耦合性提升複用性。分佈式
事件驅動架構經過在低耦合的模塊間傳輸事件消息,以保持模塊的鬆散耦合,並藉助事件消息的通訊完成模塊間合做。典型的事件驅動架構就是操做系統中常見的生產者消費者模式。在大型網站中,最多見的實現手段就是分佈式消息隊列。模塊化
消息生產者應用程序經過遠程訪問接口將消息推送給消息隊列服務器,消息隊列服務器將消息寫入本地內存隊列後當即返回成功響應給消息生產者。消息隊列服務器根據消息訂閱列表查找訂閱該消息的消息消費者應用程序,將消息隊列中的消息按照先進先出(FIFO)的原則將消息經過遠程通訊接口發送給消息消費者程序。網站
在伸縮性方面,因爲消息隊列服務器上的數據能夠看做是即時處理的,所以相似於無狀態的服務器,伸縮性設計比較簡單。將新服務器加入分佈式消息隊列集羣中,通知生產者服務器更改消息隊列服務器列表便可。操作系統
在可用性方面,爲了不消費者進程處理緩慢,分佈式消息隊列服務器內存空間不足形成的問題,若是內存隊列已滿,會將消息寫入磁盤,消息推送模塊在將內存隊列消息處理完成之後,將磁盤內容加載到內存隊列繼續處理。架構設計
分佈式服務則經過接口分解系統耦合性,不一樣子系統經過相同的接口描述進行服務調用。
大型網站分佈式服務的需求與特色:
傳統的關係型數據庫爲了保證關係運算的正確性,在設計數據庫表結構的時候,就須要指定表的 schema ——字段名稱,數據類型等,並要遵循特定的設計範式。這些規範帶來一個問題:難以面對需求變動帶來的挑戰,因此有人經過預先設計一些冗餘字段來應對。
許多 NoSql 數據庫使用 ColumnFamily 設計來設計可擴展的數據結構。