ASP.NET MVC 分散式架構系統設計規劃
2022-04-10
筆記如果要將 ASP.NET MVC 應用程式設計為分散式系統架構,需要考量的項目,從 State Management 機制到 Session 使用 InProc、State Server 以及 SQL Server 保存應用的考量 🙂
說明
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 端的快取機制
關於 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 的見解。