網站的可擴展架構

擴展性:指對現有系統影響最小的情況下,系統功能可持續擴展或提升的能力。

伸縮性:指系統能夠通過增加(減少)自身資源規模的方式增強(減少)自己的計算處理事務的能力。

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

模塊分佈式部署以後具體聚合方式主要有:分佈式消息隊列分佈式服務


利用分佈式消息隊列降低系統耦合性

事件驅動架構(EDA)

事件驅動架構:通過在低耦合的模塊之間傳輸事件消息,以保持模塊的鬆散耦合,並藉助事件消息的通信完成模塊間合作。典型的EDA架構就是生產者-消費者模式。

消息接收者在對消息進行過濾、處理、包裝後,構造成一個新的消息類型,將消息繼續發送出去,等待其他消息接收者訂閱處理該消息。——基於事件驅動的業務架構。

消息發送者不需要等待消息接收者處理數據就可以返回,系統具有更好的響應延遲;在訪問高峯期,消息可以暫存在消息隊列中等待消息接收者根據自身負載能力控制消息處理速度,減輕數據庫等後端存儲的負載壓力。

分佈式消息隊列

分佈式消息隊列將隊列部署到獨立的服務器上,應用程序可以通過遠程訪問結構使用分佈式消息隊列,進行消息存取操作,實現分佈式的異步調用。

消息生產者應用程序通過遠程訪問接口將消息推送到消息隊列服務器,消息隊列服務器將消息寫入本地內存隊列後立即返回成功響應給消息生產者。消息隊列服務器根據消息訂閱列表查找訂閱該消息的消息消費者應用程序,將消息隊列中的消息按照先進先出的原則將消息通過遠程通信接口發送給消息消費者程序。

爲了避免消息隊列服務器宕機造成消息丟失,會將消息成功發送到消息隊列的消息存儲在消息生產者服務器,等消息真正被消息消費者服務器處理後才刪除消息。消息隊列服務器宕機後,生產者服務器會選擇分佈式消息隊列服務器集羣中其他的服務器發佈消息。

補充:目前有名的分佈式消息隊列產品有Apache ActiveMQ



利用分佈式服務打造可複用的業務平臺

分佈式消息隊列通過消息對象分解系統耦合性,不同子系統處理同一個消息;分佈式服務通過接口分解系統耦合性,不同子系統通過相同的接口描述進行服務調用。

解決方案——拆分,將模塊獨立部署,降低系統耦合性。分爲:縱向拆分橫向拆分

縱向拆分:講一個大應用拆分成很多小應用,如果新增業務較爲獨立,就直接將其設計部署爲一個獨立的Web應用系統。

橫向拆分:將複用的業務拆分出來,獨立部署爲分佈式服務,新增業務只需要調用這些分佈式業務。

Web Service與企業級分佈式服務

服務提供者通過WSDL(Web服務描述語言)向註冊中心描述自身提供的服務接口屬性,註冊中心使用UDDI(統一描述、發現和集成)發佈服務提供者提供的服務,服務請求者從註冊中心檢索到服務信息後,通過SOAP(簡單對象訪問協議)和服務提供者通信,使用相關服務。

缺點:

1、臃腫的註冊和發現機制

2、低效的XML序列化手段

3、開銷相對較高的HTTP遠程通信

4、複雜的部署與維護手段

分佈式服務框架設計

大型網站需要更簡單高效的分佈式服務框架構建其SOA(面向服務的體系結構)。Facebook利用Thrift(一個開源的遠程服務調用框架)管理其分佈式服務,服務的註冊、發現以及調用;阿里巴巴使用分佈式開源框架Dubbo。

Dubbo架構

服務消費者程序通過服務接口使用服務,服務接口通過代理加載具體服務,具體服務可以是本地的代碼模塊,也可以是遠程服務。

服務框架客戶端模塊通過服務註冊中心加載服務提供者列表(服務提供者啓動後自動向服務註冊中心註冊自己可提供的服務接口列表),查找需要的服務接口,並根據配置的負載均衡策略將服務調用請求發送到某臺服務提供者服務器。

Dubbo的遠程服務通信模塊支持多種通信協議和數據序列化協議,使用NIO通信框架,具有較高的網絡通信性能。


可擴展的數據結構

一種無需修改修改表結構就可以新增字段的方案:NoSQL數據庫使用ColumnFamily(列族),使用支持ColumnFamily結構的NoSQL數據庫,創建表時,只需要指定ColumnFamily的名字,無需指定字段,可以在數據寫入時再指定,通過這種方式,數據表可以包含數百萬的字段,使得應用程序的數據結構可以隨意擴展。查詢時,可以通過指定任意字段名稱和值進行查詢。


【參考文獻】大型網站技術架構核心原理與案例分析,李智慧,電子工業出版社

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章