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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...