More Related Content Similar to .NET 7 家族新成員:Microsoft Orleans v7 (20) .NET 7 家族新成員:Microsoft Orleans v72. Microsoft Orleans 是什麼?
• RPC + Virtual Actor Model 分散式運算框架,
為 .NET 基金會所有(MIT授權)
• GitHub: https://aka.ms/orleans
• Doc: https://aka.ms/orleans-docs
• 原 Microsoft Research 專案,用在 Xbox Halo
即時網路遊戲後端分散式運算框架
• 從.NET 7開始跟 ASP.NET Core 7整合,提供
ASP.NET Core的跨主機狀態同步服務
5. Orleans的使用方法
• Virtual Actor Model:
• Orleans 運算單元(Grains)的 RPC(Remote
Procedure Call) 方法不會同時執行
• Virtual Actor Model 讓應用開發者不必自行管理
Actor Model運算單元(在 Orleans 術語叫
『Grain』)的物件生命週期
• 本機/遠端Grain的RPC呼叫方式均相同:
1. DI注入 IGrainFactory / IGrainClient 物件
2. 利用上述DI注入物件呼叫
GetGrain<IGrainInterface>(identity)
以取得”特定Grain”的RPC呼叫參考實體
3. 呼叫RPC參考實體提供的非同步方法
7. Orleans的開發方法 – 定義Grain
• Grain 程式碼分為:
• RPC 介面宣告
(Grain Interface)
• RPC方法實作類別
(Grain Class)
• Grain Class在 Orleans v3.x 一定得繼承自
Orleans.Grain 類別
• 在 Orleans v7+ 可使用 POCO
(Plain Old CLR Object) 類別來定義,不過Grain
Class必需實作 IGrainBase 介面的
GrainContext 屬性
• Grain Class 內可用 .NET Core/5+ 內建
Dependency Injection取得各種服務物件
• Grain生命週期可以有 IGrainBase 介面方法實作,
週期狀態轉移時由Orleans框架呼叫
8. Orleans的開發方法 – Grain狀態(State)儲存
• Grain 本身可為無狀態或有狀態設計,如有狀態
變數,需使用注入的 IPersistentState 物
件,搭配 Silo 配置搭配的資料庫或雲端儲存體
Persistence provider,以便 Grain 休眠前將狀
態變數資料寫入儲存
• 開發者需自己呼叫 WrtieStateAsync()才會
儲存資料
• Grain 生命週期啟動時 Orleans Runtime 自動
呼叫 ReadStateAsync()將儲存資料載入
• ClearStateAsync()可清除Grain存於資料庫/
雲端儲存體的資料
https://dotnet.github.io/orleans/docs/grains/grain_persistence/index.html
9. Orleans的運營環境配置元件 - Silo
• 『Silo 裝著 Grains』,即 Grains 實際在執行時是跑在叫
Silo 的執行環境上
• 萬一 Grains 在某 Silo上執行時當掉,Orleans會負責在
別的 Silo 上把當時正執行的 Grains重新復活
• Silo 有單獨 Generic Host 或合併在 ASP.NET Core 的
Web服務一起執行(Co-Host)的方式
• Silo 負責提供一堆 Grains 的 Orleans API 功能所需底層
服務,由加入/設定 Provider 的方式寫在ASP.NET Core
Builder配置程式碼(Program.cs / Startup.cs)的
“SiloBuilder”
10. Orleans範例 - 短網址服務
• 原本MS Learn課程的程式碼範例:
https://learn.microsoft.com/training
/modules/orleans-build-your-first-
app
• 課程範例的上雲補完版,增加 第三方
OrleansDashboard( https://github.c
om/OrleansContrib/OrleansDashbo
ard )整合、部署至 Azure App Service
的 Bicep IaC(Infra as Code) scripts、
OpenTelemetry 收集遙測資料至
Azure Application Insight:
https://github.com/windperson/Orle
ansNet7UrlShortener
• Bicep教學可看IThome 30天鐵人賽
Microsoft Orleans雲原生開發框架從
小白到大神系列 第 37 篇:
https://ithelp.ithome.com.tw/articles
/10309646
11. 短網址服務的架構 - Smart Cache Pattern
• https://github.com/OrleansContrib/DesignP
atterns/blob/master/Smart%20Cache.md
• 利用 Orleans 的 Grain 可有狀態且保持在記憶
體上存活一陣子的特性,達到 Redis Cache /
Memcached 的替代功能
21. 相關進階參考資源
• GitHub: aka.ms/orleans
• Contributor's repo: github.com/OrleansContrib
• Discord: aka.ms/orleans-discord
• Official Docs: aka.ms/orleans-docs
• MS Learn tutorial:
learn.microsoft.com/en-us/training/modules/orleans-product-introduction
learn.microsoft.com/en-us/training/modules/orleans-build-your-first-app
• Microsoft Orleans雲原生開發框架從小白到大神:
https://ithelp.ithome.com.tw/users/20130498/ironman/5259
• YouTube video:
https://youtu.be/WUZw78P-Zg8
https://youtu.be/7OVU9Mqqzgs
https://youtu.be/3NT7uMV8GhQ
• Book: Concurrent Patterns and Best Practices:
https://www.packtpub.com/product/concurrent-patterns-and-best-practices/9781788627900
• Book: Distributed .NET with Microsoft Orleans:
https://www.packtpub.com/product/distributed-net-with-microsoft-orleans/9781801818971
• Book:
Orleans:构建高性能分布式 Actor 服务 https://www.tenlong.com.tw/products/9787111691099