ASP.NET MVC 分散式架構系統設計規劃

2022-04-10

筆記如果要將 ASP.NET MVC 應用程式設計為分散式系統架構,需要考量的項目,從 State Management 機制到 Session 使用 InProc、State Server 以及 SQL Server 保存應用的考量 🙂

logo

說明

State Management

HTTP 協定本身是無狀態的設計,但應用程式可能基於各式功能的實踐需要狀態管理,而在 ASP.NET 可以使用的選項包括:

Cache
伺服器上的記憶體資源,可以用於共用資料的快取
Cookies
在客戶端保存的資訊,在每次 Client 與 Server 的 HTTP 互動時出席
Query String
將狀態資訊保留在 URL 上,受限於 URL 最大長度
Context.Items
ASP.NET HttpContext 的物件成員,生命週期受限於 Request
Profile
保存在 SQL Server 上的資訊
Session
保存在伺服器上的資訊

Session 的保存

InProc
保存在 AP Server 的記憶體上,實踐的機制可以細分是否為 Cookieless,如果是的話,則採用 Query String 的方式,將 SessionId 在 URL 之間傳送;若使用 Cookie 的方式,則使用 Cookie 在 Client 端管理 SessionId。
State Server
使用專門的 Web Server 負責 Web Farm 中各 AP Server Session 的管理。
SQL Server
將 Session 資訊保存在集中的 SQL Server 進行管理。

關於 ASP.NET 的 Session 使用,可以另外參考 ASP.NET MVC Session 的使用筆記

Cache

使用 Cache (快取技術),可以有效提升網頁回應速度,尤其適合資料不常變得,但經常取用的業務情境,而在 ASP.NET 上要實踐 Cache 有下列這些方式:

OutputCache
將整個 Page 結果保存於 Server 端記憶體的快取機制
System.Web.Caching
ASP.NET 歷史淵遠流長的快取機制,作用於 Server 端
System.Runtime.Caching
ASP.NET 的新快取機制,讓開發人員可以自行擴充實踐,預設實踐為記憶體快取機制 MemoryCache
HTML5 Cache API
HTML 5 技術標準作用於 Client 端的快取機制

從 Request 到 Response 的 Cache 方式

關於 System.Web.Caching System.Runtime.Caching 的介紹,可以參考保哥在 ASP.NET 4 快取 API 有兩種:Cache 與 ObjectCache 的分享。

關於 System.Web.Caching 的使用見解,可以參考黑大在 TIPS-ASP.NET Cache Mini Guide 的分享。

Application, Cache & Session

在討論分散式架構的設計,已經召喚 Session 與 Cache 進行討論,接著三巨頭的最後一位 Application 也納入比較三者的差異。

Application
Application 是將資料保存在全域範圍,在應用程式的執行生命週期,所有的使用者流程都可以向 Application 讀取與寫入
Cache
Cache 的用途是將耗費資源的保存在記憶體當中,並且自行定義保存時效
Session
Session 則是是藉由 SessionId 管理獨立使用者的資料

詳細的差異比較可以參考 Ta01 在 stackoverflow Application vs Session vs Cache 的見解。

相關連結

ASP.NET MVC 從無到有打造一個應用系統

Visual Studio 入門教學