O'Reilly 提供了一份Software Architecture Patterns [Book] ,裡面描述了五個基本的軟體架構。這邊是 space-based architecture。
Space-Based
web-based business application 通常是以下流程:browser 發 request給 app server,最後存到 database server,這個方式在 user load 增加時,就發生 bottleneck,scaling application 會需要依序擴充 web server, app server, database server,db server 是最難擴充的部分。
在有大量 concurrent user 的 high-volume application,db 會是限制有多少 transaction 的重要因素,有多種 db cache 機制可協助解決。
space-based architecture 是用來解決 scalability 與 concurrency issues,也是有效應付變化且無法預測 concurrent user volumnes 的方案,以架構解決問題,會比擴充 database 或使用 db cache 好
space-based pattern 也稱為 cloud architecture 可減輕 application scaling 問題。此 pattern 是以 "tuple space" 命名,做法是 distributed shared memory。high scalability 是藉由移除 central database,改用 in-memory data grids。APP data 存放在記憶體,複製到所有 active processing units。processing unit 可動態根據 user load 啟動或關閉,達到 variable scalability。
多數的 application 尤其是 web application 適用這個 pattern,本架構有兩個元件: a processing unit, virtualized middleware
processing unit 包含 application components,也就是 web-based components,還有backend business logic,大型 application 可將功能切割到多個 processing unit 中,processing unit 裡面包含 application module,還有 in-memory data grid,及 optional asynchronous persistent store for failover。還有 replication engine 用在 virtualized middleware,處理 data change>
virtualized middleware 處理 housekeeping 及 communication,包含控制 data synchronization 及 request handling 的元件,還有 messaging grid, data grid, processing grid, deployment manager
Pattern Dynamics
重點是 virtualized middleware 及 processing unit 的 in-memory data grid。
以下是 processing unit 的相關元件關係
virtualized middleware 控制 architecture 並管理 requests, sessions, data replication, distributed request processing 及 processing unit deployment。裡面有四個主要元件: messaging grid, data grid, processing grid, deployment manager
Messaging Grid
負責處理 input request 及 session information
當request 進入 virtualized middleware,messaging grid 會決定指派到哪一個 active processing component,可以用 round-robin 或是 next-available algorithm
Data Grid
是本 pattern 最重要的元件
在 data change 時要處理 data-replication in each processing unit
因為 messaging grid 可將 request 轉送到任一個 processing unit,重點是所有 processing unit 都有相同的資料
上圖是 synchronous data replication between processing units,但實際上會是 parallel asynchronously,並在幾 ms 內完成
Processing Grid
optional component
管理 distributed request processing
當收到 processing unit 的 request (ex: order processing unit 及 customer processing unit),processing grid 要負責協調兩個 processing unit 之間的互動
Deployement Manager
根據 loading 動態 startup/shutdown processing unit,該 component 會持續觀察 response time 及 loading,需要時啟動新的 processing unit
注意事項
本 pattern 是個複雜且昂貴的架構,但適用於 web-based application with variable load (ex: social media stire, bidding and auction sites) ,不適用於傳統有大量的 operational data 的大型 relational database application
雖然不需要 centralized datastore,但會處理 initial in-memory data grid load 及非同步 persist data update。可切割 volatile 與常用的 transactional data,以減少 memory footprint
本 pattern 的另一個名稱是 cloud-based architecture,processing unit 不一定放在 cloud-based hosted service 或 PaaS,故還是用 space-based architecture 會比較好
可用多個 3rd party 產品:GemFire, JavaSpaces, GigaSpaces, IBM Object Grid, nCache, Oracle Coherence
Pattern 分析
References
软件架构入门 - 阮一峰的网络日志