這篇隨筆主要記錄了本身學習Orleans的通過和理解,在學習過程當中會一直更新,思路和理解可能有些偏頗,若是有幸有大佬看到這篇文章,但願能給予批評指正。html
(一) 入門例子前端
(二) 測試用例git
3.github
首先,Microsoft Orleans是在.net用簡單方法構建高併發、分佈式的大型應用程序框架。web
官方文檔以及源碼:http://dotnet.github.io/orleans/編程
如下理解是學習了《Microsoft Orleans 之 入門指南》(http://www.javashuo.com/article/p-tpacjmue-o.html)windows
Orleans 框架能夠構建大規模、高併發、分佈式應用程序,而不須要學習專業分佈式以及併發知識框架。它是由微軟研究和設計應用於雲計算。被普遍應用於微軟雲產品,並且微軟官方遊戲:Halo四、Halo5(光環|光暈)的雲服務所有由它來承載,很多公司在用它。併發
特色:框架
1.默認的可拓展性,構建複雜的分佈式應用程序,可使您的程序輕易拓展到數百個服務。異步
2.低延時,它可使你的程序狀態保存於內存中,因此你的應用程序能夠快速響應請求。
3.簡化併發,Orleans 容許你使用C#代碼構建Actors 之間的異步處理消息。
注:(Actor模型是一個概念模型,用於處理併發計算。它定義了一系列系統組件應該如何動做和交互的通用規則,一個Actor指的是一個最基本的計算單元。它能接收一個消息而且基於其執行計算。具體的我尚未去深刻學習,http://www.jianshu.com/p/449850aa8e82這篇文章能夠簡單的瞭解)
在Orleans,actors 被稱做grains,採用一個接口來表示,Actors的消息用異步方法來接受,以下:
運行在Orleans 框架裏的實現代碼public interface IMyGrain : IGrainWithStringKey { Task<string> SayHello(string name); }
而後經過建立代理對象,並調用Grains的方法來發送消息public class MyGrain : IMyGrain { public async Task<string> SayHello(string name) { return "Hello " + name; } }
var grain = GrainClient.GrainFactory.GetGrain<IMyGrain>("grain1"); await grain.SayHello("World");
cluster:
大量的silos 同時在一塊兒工做就造成了orleans的集羣,orleans運行徹底自動化的集羣管理。
全部silo都使用一個動態更新的共享成員存儲庫,並有助於協調集羣管理,經過閱讀共享存儲庫瞭解對方的位置,在任什麼時候候,一個silo能夠經過註冊在共享存儲中鏈接到一個集羣。
這種方式的集羣能夠在運行時動態擴展。 Orleans 提供彈性和可用性從羣集中刪除無效的silos。
Orleans 和客戶端代碼
Orleans 包括兩個不一樣的部分:Orleans 基礎部分(grains) 和客戶端部分
Orleans 的一部分是由應用程序的運行時服務稱silos grains 組成,在調度限制下的運行時執行的Grain代碼和確保內部在Orleans 編程模型。
客戶端部分一般是一個web前端,經過少許的Orleans 客戶端庫鏈接到Orleans 部分,使得客戶端代碼能夠經過引用服務端的一個grain的引用進行通信。
例如:一個ASP.NET web應用程序運行在服務端的部分能夠是Orleans 的客戶端。 客戶端部分運行在.net 應用程序池的主線程中,和不受調度的限制和Orleans 運行時的保證。
Orleans 導入的包
Orleans 有兩個必須的包Microsoft.Orleans.Server(服務端包)和Microsoft.Orleans.Client(客戶端包)
在NuGet裏直接安裝就好了,它會自動把其餘依賴的包也都安裝上,vs就是這麼省心,可是須要注意的是,不要隨意去更新Orleans包所引用的其餘包的版本,可能會致使一些奇奇怪怪的錯誤(血的教訓)
Orleans 的工具
萬能的vs還給咱們提供了一個模板化的項目建立工具:Orleans Tools for Visual Studio。
經過vs的擴展和更新能夠直接安裝,安裝並重啓完成以後咱們能夠看到以下結構:
如上圖所示:
1 是安裝好後Orleans 的一個模版集節點,選中後左邊面板中會有三個項目模版。
2 是咱們項目中一個服務的承載項目,這裏是用來測試用的,因此是一個控制檯應用程序,同時也將host所需的類庫nuget進來了。針對你項目的須要,能夠是一個windows 服務,一個控制檯應用,一個Windows forms 的程序,或者也能夠寄宿到iis的web中。
3 是grain的實現 ,咱們大部分時間就是與裏面的東西打交道,它裏面是一些實現了grain藉口,或者業務類的一系列類集合。
4 是grain 接口定義處,爲什麼要孤立出來呢,由於未來這些接口是要暴露出來讓其餘須要的地方調用嗎。
Orleans 有哪些部分組成
我簡單的把Orleans分紅了四個部分
IGrains : 這裏放置全部Grains類要擴展的接口。
Grains : 這個裏面實現全部IGrain載明的接口,實現全部的Grain類,包括它們的方法以及字段。
Host : 這個裏面就是要運行Silo的。也就是服務端
Client : 這個裏面就是要運行GrainClient的。它要和Host通訊,它就是客戶端。