orleans2.0 官方文檔翻譯,給大家學習ol一個參考

来源:https://www.cnblogs.com/hzzxq/archive/2018/08/13/9467858.html
-Advertisement-
Play Games

本人也是英文盲,翻譯不對的地方請諒解。由於翻譯內容較多,會慢慢更新 orleans簡稱ol,一些專用詞不做翻譯。先決條件,讀這表文章之前需要瞭解:actor,es,cqrs 參考鏈接: https://www.cnblogs.com/netfocus/p/4150084.html http://ww ...


本人也是英文盲,翻譯不對的地方請諒解。由於翻譯內容較多,會慢慢更新

orleans簡稱ol,一些專用詞不做翻譯。先決條件,讀這表文章之前需要瞭解:actor,es,cqrs

參考鏈接:

https://www.cnblogs.com/netfocus/p/4150084.html

http://www.infoq.com/cn/articles/microservices-aggregates-events-cqrs-part-1-richardson

https://studygolang.com/articles/6250

一.基礎開始:

1.使用ol的必要條件:ol是一個來自NuGet的類庫。你需要 .NET Core 2.0以上和.NET Framework 4.6.1以上版本才能使用它。在.net core 下ol可以在windows,Linux,MacOS下運行。

目前ol是在windows上測試的,但是許多用戶在非Windows平臺上也成功運行了ol。

開發工具,建議使用Visual Studio 2017或更高版本。

在生產環境中,為了維護可靠的集群成員關係,ol需要持久化存儲。你可以選擇以下其中一種

Azure Table Storage 8.2.1或以上版本
SQL Server 2008或以上版本
ZooKeeper 3.4.0或以上版本
MySQL 5.0或以上版本
PostgreSQL 9.5或以上版本
Consul 0.7.0或以上版本
DynamoDB

還有一種辦法是使用Azure的service fabric

2.Grains

grains是ol編程模型的關鍵,grains構成了ol應用,它是隔離的,持久的,分佈的。grain就好比.net中的實體對象。grain之間可以通過介面相互調用。

ol的目標是大大簡化構建可伸縮應用程式的難度,並避免了大多數併發性問題,grain之間不共用事例,只能通過消息傳遞。每個grain保證單線程運行

一個典型grain有狀態和行為(例如特定的用戶或方法或會話)

每一個grain都有一個唯一標識,也稱為grain主鍵。主鍵可以試long,string ,guid。

如何訪問一個grain

一個grain類實現一個或多個grain介面,要調用一個grain,調用者需要知道grain類實現的介面,該介面包括調用者想要調用的方法和目標grain的唯一標識。

例如,如果使用電子郵件作為唯一標識,則可以調用用戶配置grain來更新用戶地址。

var user = grainFactory.GetGrain<IUserProfile>(userEmail);
await user.UpdateAddress(newAddress);

GetGrain的調用是一種廉價的本地操作,用於構建對目標grain的引用。註意,不需要創建或實例化目標grain,我們調用usergrain來更新地址,就好像usergrain已經實例化了。

這是ol編程模型的最大優勢之一我們從來不需要創建、實例化或刪除grain。可能有數百萬的grain在記憶體中等待我們調用它,在內部ol能通過一系列複雜的操作來把grain載入到記憶體中。

grain的生命周期

grain在執行容器里,叫做silo。silo形成一個集群,將多個物理或虛擬機的資源組合在一起,當有對grain請求時,ol確保在集群中的一個silo上有該穀物的實例。如果任何silo上沒有grain實例,ol記憶體管理將創建一個。這個過程叫做激活。

如果grain使用了持久化,在激活時自動從存儲器讀取狀態。一旦在silo上激活,grain處理來自其他grain或來自前端web伺服器的傳入請求。在處理請求的過程中,grain可以調用其他grain。

如果一個grain停止接收請求並保持空閑,在一段不活動時間後,ol將grain從記憶體中刪除(使其失效),以釋放資源用於其他grain。如果並且當有一個新的grain請求時,ol會再次激活它,可能是在一個不同的silo上激活,

所以調用者會有這樣的感覺,grain會一直留在記憶體中。grain經歷了生命周期,從僅作為其存儲中的持久化狀態(如果有的話)存在,到在記憶體中實例化,到從記憶體中刪除。

ol能隱式控制grain的激活和停用過程,應此在編寫一個grain時,開發人員假設所有gain都被激活。

grain生命周期中的關鍵事件順序是這樣的:

一個grain或一個客戶端調用另一個grain的方法

grain被激活(如果它還沒有在集群中的某個地方被激活的話),grain類的一個實例被創建,稱為grain激活

grain的構造函數使用依賴註入(如果適用)來執行,如果聲明瞭持久性,則從存儲中讀取grain的狀態

如果重寫,則調用OnActivateAsync(此方法在grain激活時會被調用)

grain處理傳入的請求

grain閑置了一段時間

silo記憶體管理決定停用grain

如果重寫OnDeactivateAsync,則調用OnDeactivateAsync(此方法在grain停用時會被調用)
silo記憶體管理從記憶體中刪除穀物

當一個silo被正確的關閉時,它所擁有的所有grain激活都被停用。

 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 相信有些朋友喜歡直接把項目放在移動硬碟上進行工作,為了方便來回在多臺電腦或不同的操作系統平臺上來回碼磚,磁碟的格式基本都是exFAT的(喜歡在macOS上用NTFS或者FAT的都是大佬),在這裡我們不討論exFat的格式優缺點、反正他免費就行,只記一次在MAC上出現的奇怪問題,希望有遇到該問題的朋友 ...
  • NET Core的跨平臺大家已經有目共睹,而在MAC平臺上做開發已經成為目前的主流,無論哪種語言。 在一次微服務移植的過程中,客戶端需要發送Http自定義混合驗證,在MonoNET上沒有任何問題,而移植到NET Core 2.0並運行,就出現了錯誤:The handler does not supp ...
  • 使用Task,await,async,非同步執行事件(event),不阻塞UI線程和不跨線程執行UI更新 使用Task,await,async 的非同步模式 去執行事件(event) 解決不阻塞UI線程和不誇跨線程執行UI更新報錯的最佳實踐,附加幾種其他方式比較 由於是Winform代碼和其他原因,本文 ...
  • 1、 問題描述 最近使用ABP .Net Core框架做一個微信開發,同時採用了一個微信開發框架集成到ABP,在微信用戶關註的推送事件里調用了一個async 方法,由於沒有返回值,也沒做任何處理,本地調試也OK,但一發佈到線上就有問題,微信公眾號關註成功,也有推送消息過來,但微信用戶一直保存不上,查 ...
  • TransactionScope只要一個操作失敗,它會自動回滾,Complete表示事務完成 實事上,一個錯誤的理解就是Complete()方法是提交事務的,這是錯誤的,事實上,它的作用的表示本事務完成,它一般放在try{}的結尾處,不用判斷前臺操作是否成功,如果不成功,它會自己回滾。 在.net ...
  • 概述 UniformGrid 控制項是一個響應式的佈局控制項,允許把 items 排列在一組均勻分佈的行或列中,以填充整體的可用顯示空間,形成均勻的多個網格。預設情況下,網格中的每個單元格大小相同。 這是一個非常實用的控制項,比如相冊應用中多行多列均勻排列圖片,比如新聞類應用中排列新聞,再比如我們在來畫視 ...
  • 單元測試怎麼寫?包含什麼東西? 說下我自己的心得。 按照官方文檔創建對應的單元測試項目,然後分析介面會出現哪幾種結果或者錯誤,然後給出相應的輸入參數。 單元測試方法有通用的3A模型(Arrange,Action,Assert)。 下麵是我自己寫的其中一個介面的單元測試,如果有問題大家一起討論。 我要 ...
  • /// /// 判斷經緯度是否在範圍類 /// /// 經度 /// 緯度 /// /// public static bool IsInRegion(double longitudeCur, double latitudeCur, IList pathList... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...