『大型網站技術架構』(五):可擴展架構

『大型網站技術架構』(五):可擴展架構

擴展性和伸縮性:

  • 擴展性(Extensibility): 指對現有系統影響最小的情況下,系統功能可持續擴展或提升的能力。目標是當系統新增功能時,不需要對現有系統的結構和代碼進行修改。
  • 伸縮性(Scalability):指系統能夠通過增加/減少自身資源規模的方式增強/減少自己計算處理事務的能力。目標是利用集羣的方式增加服務器數量,提高系統的整體事務吞吐能力,實現線性伸縮性。

一、構建可擴展的網站架構

終極目標:系統間低耦合。如何分解系統的各個模塊、如何定義各個模塊接口、如何複用組合不同的模塊構造一個完整的系統。

核心思想:模塊化,並在此基礎上降低模塊間耦合性,提高模塊複用性。

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

分佈式消息隊列通過消息對象分解系統耦合性,不同子系統處理同一個消息。

事件驅動架構

定義:事件驅動架構(Event Driven Architecture)通過在低耦合的模塊之間傳輸事件消息,以保持模塊的鬆散耦合,並藉助事件消息的通信完成模塊間合作。

典型的EDA架構比如生產者消費者模式。利用分佈式消息隊列的發佈-訂閱模式工作。生產者只需生產消息到隊列,消費者從隊列獲取消息進行處理。新增業務,只要對某類消息感興趣,即可訂閱該消息,對原有系統和業務沒有任何影響。

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

分佈式服務通過接口分解系統耦合性,不同子系統通過相同的接口描述進行服務調用。

巨無霸系統帶來的問題:

  • 編譯、部署困難
  • 代碼分支管理困難:多個團隊共同維護一份代碼。
  • 數據庫連接容易耗盡:數據庫連接數與應用數量成正比。
  • 新增業務困難:老人不敢碰,新人不能接。

解決方法:拆分、模塊獨立部署

  • 縱向拆分:將大應用拆分爲多個小應用。
  • 橫向拆分:將複用業務拆分出來,獨立部署爲分佈式服務,新增業務只需調用這些分佈式服務,不需要依賴具體的模塊代碼。

Web Service與企業級分佈式服務

Web Service: 服務提供者通過WSDL描述服務(接口),客戶端通過WSDL生成客戶端調用代碼,通過SOAP協議與服務提供者通信,傳輸層協議可以是HTTP、SMTP、TCP等。

缺點:

  • 臃腫的註冊與發現機制
  • 低效的XML序列化手段
  • 開銷相對較高的HTTP遠程通信
  • 複雜的部署與維護手段

大型網站分佈式服務的需求

  • 服務註冊與發現
  • 負載均衡:支持服務請求者使用可配置的負載均衡算法訪問服務。
  • 失效轉移
  • 高效的遠程通信
  • 整合異構系統
  • 對應用最小侵入:適應服務架構的進化和反覆(分佈式或集中式部署)。
  • 版本管理:支持服務接口的多版本。
  • 實時監控

分佈式服務框架設計

  • Thrift(遠程服務調用框架):Facebook用它管理其分佈式服務(註冊、發現和調用),但是未開源基於Thrift的分佈式服務框架。
  • Dubbo:阿里開源的分佈式服務框架,較爲成熟。

四、可擴展的數據結構

NoSQL: 寬列存儲模型、ColumnFamily(列族)設計、面向列族的稀疏矩陣存儲格式

五、利用開放平臺建設網站生態圈

開放平臺架構:

  • API接口:RESTful、Web Service、RPC等。
  • 協議轉換:將API輸入轉成內部服務可識別的形式,將內部服務返回值封裝成API格式。
  • 安全:身份識別、權限控制。
  • 審計:監控、計費。
  • 路由:將開放平臺訪問路由映射到具體的內部服務。
  • 流程:將一組離散的服務組織成一個上下文相關的新服務,隱藏服務細節,提供統一接口。

--EOF--

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