SlideShare a Scribd company logo
1 of 21
Download to read offline
.NET 7 家族新成員:
Microsoft Orleans v7
Microsoft Orleans快速簡介
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的跨主機狀態同步服務
Build 2022: https://youtu.be/-4BelRbFOVo
Orleans 適用場景
https://learn.microsoft.com/training/modules/orleans-product-introduction/4-when-to-use-orleans
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參考實體提供的非同步方法
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框架呼叫
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
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”
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
短網址服務的架構 - Smart Cache Pattern
• https://github.com/OrleansContrib/DesignP
atterns/blob/master/Smart%20Cache.md
• 利用 Orleans 的 Grain 可有狀態且保持在記憶
體上存活一陣子的特性,達到 Redis Cache /
Memcached 的替代功能
相關進階參考資源
• 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

More Related Content

What's hot

What's hot (20)

TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについてCentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
 
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイントVPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
 
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
 
Plan 9のお話
Plan 9のお話Plan 9のお話
Plan 9のお話
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
我的 DevOps 故事
我的 DevOps 故事我的 DevOps 故事
我的 DevOps 故事
 
my$talk=qr{((?:ir)?reg(?:ular )?exp(?:ressions?)?)}i;
my$talk=qr{((?:ir)?reg(?:ular )?exp(?:ressions?)?)}i;my$talk=qr{((?:ir)?reg(?:ular )?exp(?:ressions?)?)}i;
my$talk=qr{((?:ir)?reg(?:ular )?exp(?:ressions?)?)}i;
 
Flutterアプリ開発におけるモジュール分割戦略
Flutterアプリ開発におけるモジュール分割戦略Flutterアプリ開発におけるモジュール分割戦略
Flutterアプリ開発におけるモジュール分割戦略
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
TripleO Deep Dive
TripleO Deep DiveTripleO Deep Dive
TripleO Deep Dive
 
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
 
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
 
ナレッジグラフ/LOD利用技術の入門(後編)
ナレッジグラフ/LOD利用技術の入門(後編)ナレッジグラフ/LOD利用技術の入門(後編)
ナレッジグラフ/LOD利用技術の入門(後編)
 
今風なデスクトップアプリのモダンインストーラー開発
今風なデスクトップアプリのモダンインストーラー開発今風なデスクトップアプリのモダンインストーラー開発
今風なデスクトップアプリのモダンインストーラー開発
 

Similar to .NET 7 家族新成員: Microsoft Orleans v7

開放原始碼 Ch2.1 app - oss - oss ide (ver1.2)
開放原始碼 Ch2.1   app - oss - oss ide (ver1.2)開放原始碼 Ch2.1   app - oss - oss ide (ver1.2)
開放原始碼 Ch2.1 app - oss - oss ide (ver1.2)
My own sweet home!
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
q3boy
 

Similar to .NET 7 家族新成員: Microsoft Orleans v7 (20)

DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
 
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
 
Langchain and Azure ML and Open AI
Langchain and Azure ML and Open AILangchain and Azure ML and Open AI
Langchain and Azure ML and Open AI
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CD
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
開放原始碼 Ch2.1 app - oss - oss ide (ver1.2)
開放原始碼 Ch2.1   app - oss - oss ide (ver1.2)開放原始碼 Ch2.1   app - oss - oss ide (ver1.2)
開放原始碼 Ch2.1 app - oss - oss ide (ver1.2)
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big Data
 
使用 .NET Standard 開發跨平台應用程式
使用 .NET Standard 開發跨平台應用程式使用 .NET Standard 開發跨平台應用程式
使用 .NET Standard 開發跨平台應用程式
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
 
讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革
 
Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】
 
@Connect(); microsoft visual studio vnext & azure
@Connect(); microsoft visual studio vnext & azure@Connect(); microsoft visual studio vnext & azure
@Connect(); microsoft visual studio vnext & azure
 
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練2
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練22016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練2
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練2
 

More from twMVC

More from twMVC (20)

twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事
 
twMVC#46 一探 C# 11 與 .NET 7 的神奇
twMVC#46 一探 C# 11 與 .NET 7 的神奇twMVC#46 一探 C# 11 與 .NET 7 的神奇
twMVC#46 一探 C# 11 與 .NET 7 的神奇
 
twMVC#44 如何測試與保護你的 web application with playwright
twMVC#44 如何測試與保護你的 web application with playwrighttwMVC#44 如何測試與保護你的 web application with playwright
twMVC#44 如何測試與保護你的 web application with playwright
 
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹
 
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
 
twMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart FactorytwMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart Factory
 
twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1
 
twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧
 
twMVC#41 hololens2 MR
twMVC#41 hololens2 MRtwMVC#41 hololens2 MR
twMVC#41 hololens2 MR
 
twMVC#41 The journey of source generator
twMVC#41 The journey of source generatortwMVC#41 The journey of source generator
twMVC#41 The journey of source generator
 
twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops)
 
twMVC#36C#的美麗與哀愁
twMVC#36C#的美麗與哀愁twMVC#36C#的美麗與哀愁
twMVC#36C#的美麗與哀愁
 
twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波
 
twMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 LogtwMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 Log
 
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API
 
twMVC#33玩轉 Azure 彈性部署
twMVC#33玩轉 Azure 彈性部署twMVC#33玩轉 Azure 彈性部署
twMVC#33玩轉 Azure 彈性部署
 
twMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIS
twMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIStwMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIS
twMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIS
 
twMVC#31沒有 hdd 的網站重構 webform to mvc
twMVC#31沒有 hdd 的網站重構 webform to mvctwMVC#31沒有 hdd 的網站重構 webform to mvc
twMVC#31沒有 hdd 的網站重構 webform to mvc
 
twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢
 
twMVC#30 | Bootstrap 搶先玩
twMVC#30 | Bootstrap 搶先玩twMVC#30 | Bootstrap 搶先玩
twMVC#30 | Bootstrap 搶先玩
 

.NET 7 家族新成員: Microsoft Orleans v7

  • 1. .NET 7 家族新成員: Microsoft Orleans v7 Microsoft Orleans快速簡介
  • 2. 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參考實體提供的非同步方法
  • 6.
  • 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 的替代功能
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 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