7 隨需應變:網站的可擴展架構
擴展性:指對現有系統影響最小的情況下,系統功能可持續擴展或提升的能力。
伸縮性:指系統能夠通過增加(減少)自身資源規模的方式增強(減少)自己計算處理事務的能力。
7.1 構建可擴展的網站架構
設計網站可擴展架構的核心思想是模塊化,並在此基礎上,降低模塊間的耦合性,提高模塊的複用性。
模塊分佈式部署以後具體聚合方式主要由分佈式消息隊列和分佈式服務。
7.2 利用分佈式消息隊列降低系統耦合性
7.2.1 事件驅動架構
通過在低耦合的模塊之間傳輸事件消息,以保持模塊的鬆散耦合,並藉助時間消息的通信完成模塊間合作,典型的EDA架構就是操作系統中常見的生產者消費者模式。最常用的是分佈式消息隊列。
7.2.2 分佈式消息隊列
7.3 利用分佈式服務打造可複用的業務平臺
如果說分佈式消息隊列通過消息對象分解系統耦合性,不同子系統處理同一個消息;那麼分佈式服務則通過接口分解系統耦合性,不同子系統通過相同接口描述進行服務調用。
巨無霸應用系統問題;
- 編譯部署困難
- 代碼分支管理困難
- 數據庫連接耗盡
- 新增業務困難
解決方案就是拆分,將模塊獨立部署,降低系統耦合性。拆分開分爲:橫向拆分和縱向拆分兩種。
7.3.1 Web Service與企業級分佈式服務
缺點:
- 臃腫的註冊與發現機制
- 低效的XML序列化手段
- 開銷相對較高的HTTP遠程通信
- 複雜的部署與維護手段
7.3.2 大型網站分佈式服務的需求與特點
- 負載均衡
- 失效轉移
- 高效的遠程通信
- 整合異構系統
- 對應用最少侵入
- 版本管理
- 實時監控
7.3.3 分佈式服務框架設計
7.4 可擴展的數據結構
例如:NoSQL中的列族
7.5 利用開放平臺建設網站生態圈
利用自身龐大的用戶羣吸引第三方開發者。
- API接口:RESTful、WebService、RPC等各種形式
- 協議轉換:將各種API輸入轉換成內部服務可以識別的形式,並將內部服務的返回封裝成API的格式
- 安全
- 審計
- 路由:映射,將開放平臺的各種訪問路由映射到具體的內部服務。
- 流程:將一組離散的服務組織成一個上下文相關的新服務,隱藏服務細節,提供統一接口供開發者調用