《大型網站技術架構》讀書筆記7 架構-網站的可擴充套件架構
阿新 • • 發佈:2021-09-07
網站的可擴充套件架構
- 網站的擴充套件性架構設計:就是在對現有系統影響最小的情況下,系統功能可持續擴充套件及提升的能力。
- 擴充套件性:表現在系統基礎設施穩定不需要經常變更,應用之間較少依賴和耦合,對需求變更可以敏捷響應。它是系統架構設計層面的開閉原則(對擴充套件開放,對修改關閉),架構設計考慮未來功能擴充套件,當系統增加新功能時,不需要對現有系統的結構和程式碼進行修改。
構建可擴充套件的網站架構
- 開發低耦合系統是軟體設計的終極目標之一
- 軟體架構師最大的價值在於具有將一個大系統切分成N個抵耦合的子模組的能力。這些子模組包含橫向的業務模組,也包含縱向的基礎技術模組。
- 軟體設計中最有挑戰的部分,如何分解系統的各個模組、如何定義各個模組的介面、如何複用組合不同的模組構造一個完整的系統。
- 設計網站可擴充套件架構的核心思想是模組化,並在此基礎上,降低模組間的耦合性,提高模組的複用性。
- 利用分層和分割的方式將軟體分割為若干個低耦合的獨立的元件模組,這些元件模組以訊息傳遞及依賴呼叫的方式聚合成一個完整的系統。
- 在大型網站中,這些模組通過分散式部署的方式,獨立的模組部署在獨立的伺服器(叢集)上,從物理上分離模組之間的耦合關係,進一步降低耦合性提高複用性。
- 模組分散式部署以後具體聚合方式主要有分散式訊息佇列和分散式服務。
利用分散式訊息佇列降低系統耦合性
- 事件驅動架構EDA(Event Driven Architecture):通過在低耦合的模組之間傳輸事件訊息,以保持模組的鬆散耦合,並藉助事件訊息的通訊完成模組間合作。
- 最常用的是分散式訊息佇列,利用釋出-訂閱模式工作。
利用分散式服務打造可複用的業務平臺
- 分散式服務通過介面分解系統耦合性,不同子系統通過相同的介面描述進行服務呼叫。
- 巨無霸應用系統解決方案就是拆分,將模組獨立部署,降低系統耦合性。拆分可以分為縱向拆分和橫向拆分兩種。
- 縱向拆分:將一個大應用拆分為多個小應用,如果新增業務較為獨立,那麼就直接將其設計部署為一個獨立的Web應用系統。
- 橫向拆分:將複用的業務拆分出來,獨立部署為分散式服務,新增業務只需要呼叫這些分散式服務,不需要依賴具體的模組程式碼,即可快速搭建一個應用系統,而模組內業務邏輯變化的時候,只要介面保持一致就不會影響業務程式和其他模組。
- Facebook利用Thrift(一個開源的遠端服務呼叫框架)管理其分散式服務,服務的註冊、發現及呼叫都通過Thrift完成,但對於一個大型網站可以使用的分散式服務框架,僅有Thrift還遠遠不夠,遺憾的是,Facebook沒有開源其基於Thrift的分散式服務框架。
- 目前國內有較多成功實施案例的開源分散式服務框架是阿里巴巴的Dubbo。
- 對應用最少侵入:分散式服務框架需要支援即使用了