orleans開篇之hello world


orleans開篇之hello world

什么是orleans

    Orleans是一個建立在.NET之上的,設計的目標是為了方便程序員開發需要大規模擴展的雲服務。Orleans項目基本上被認為是並行計算模型Actor Model的分布式版本

       雖然已經存在Erlang 和Akka這樣利用Actor Model的框架,用戶仍然需要做很多工作來確保那些actors保持在線以及能夠處理故障和恢復。Orleans框架着眼復雜項目和actor管理,讓用戶能夠編寫分布式項目而無需擔心。

    Orleans是微軟的終極計算機小組(來自其它新聞的說法,這個項目我最開始看到是在微軟研究院的頁面上)近年來一直研發的項目。

Orleans目前發展到什么階段了

    Orleans社區預覽版已於2014年4月發布,據說已經廣泛應用在Azure雲上,最出名的是支持第一人稱射擊游戲Halo 4。Orleans研發小組稱該編程模型已經連續三年用在Halo Reach和Halo 4終端服務的生產中,並且他們將在2015年初發布Orleans代碼。

hello world

     根據慣例,我們先來一個hello world

     准備工作:

  1. 安裝VS2013
  2. 安裝Orleans的SDK; (點擊SDK網盤下載)
  3. 了解grain概念;
  4. 了解silo概念

     grain是Orleans中的類似於akka中Actor的概念,事實上一個Orleans actor總是存在(akka中並非如此,需要顯式的創建),它不能被顯式地創建或銷毀。它的存在超越它的任何內存實例的生命周期,也因此超越了任何特定服務器的生命周期;其次,Orleans actors自動實例化:如果沒有一個actor內存的實例,一個消息發送到actor導致在一個可用的服務器上創建一個新的實例。一個未使用的actor實例將作為資源管理的一部分自動被回收(以上來自微軟的博客)。

       silo可以認為是grain的容器

      這個實例我們簡單的建立一個打招呼的實例,我們要建立3個項目①grain interface項目 ②grain implementations 項目 ③控制台項目(既是Orleans Client,又是Orleans silo的Host)

       image

       image

       image

在Witte.OrleansHelloWorldGrainInterface中新建IHello.cs

public interface IHello : Orleans.IGrainWithIntegerKey
 {
     Task<string> SayHello(string greeting);
 }

聲明一個SayHello的接口,大家可能留意到了,這個方法返回的是一個Task;對於Orleans中的GrainInterface方法必須聲明返回值為Task或Task<T>。因為Orleans中Grain的交互全部都是通過消息異步交互的。

在Witte.OrleansHelloWorldGrain項目中添加引用Witte.OrleansHelloWorldGrainInterface后,添加HelloGrain.cs

復制代碼
public class HelloGrain : Orleans.Grain, IHelloGrain
{
        Task<string> IHelloGrain.SayHello(string greeting)
        {
            return Task.FromResult("You said: '" + greeting + "', I say: Hello!");
        }
 }
復制代碼

這個實現類需要繼承Orleans.Grain和我們之前聲明的接口

在Witte.OrleansHelloWorld中添加引用Witte.OrleansHelloWorldGrainInterface,然后打開Program.cs修改代碼,修改后如下

Orleans.OrleansClient.Initialize("DevTestClientConfiguration.xml");

var friend = HelloWorldInterfaces.HelloFactory.GetGrain(0);
 Console.WriteLine("\n\n{0}\n\n", friend.SayHello("Good morning!").Result);

選擇Witte.OrleansHelloWorldGrain作為啟動項目,F5運行

控制台會出現很多文字,暫時不必關注,這個是Orleans啟動的信息,在控制的最后,會輸出結果,如下圖

image

Hello World!完畢

關注開源
 

隨筆分類 - orleans

 
摘要: 開源地址: https://github.com/dotnet/orleans昨天編譯了一下,這個最新的Orleans安裝程序(用github源碼編譯的)下載地址:http://pan.baidu.com/s/1bntoEtDOrleans官方文檔:https://github.com/dotnet... 閱讀全文
posted @  2015-01-27 14:34 Witte 閱讀(1717) |  評論 (8)  編輯

摘要: Timers and Reminder 定時器和提醒器 Orleans runtime 允許開發人員通過一種叫做timer和另一種叫做reminder的機制為grain添加周期性行為。接下來我分別為大家介紹Timer和ReminderTimers 定時器 Timer用於創建grain的定時任務,但這... 閱讀全文
posted @  2014-12-29 21:39 Witte 閱讀(267) |  評論 (1)  編輯

摘要: Orleans在默認情況下只創建一個grain的實例,並以單線程模型執行。如果同一個grain實例,在Orleans存在多個實例,就會產生並發沖突,單線程執行模型就可以完全避免並發沖突了。 但在特殊場景下,有些實例是需要創建多個實例或者以非單線程的執行方式來滿足性能的需要; 如何支持創建多個實例 對於了解負載均衡的人,如果web服務器支持無狀態(分布式Sesson或者cookie身份識別),會... 閱讀全文
posted @  2014-12-29 19:28 Witte 閱讀(53) |  評論 (0)  編輯

摘要: 什么是orleans Orleans是一個建立在.NET之上的,設計的目標是為了方便程序員開發需要大規模擴展的雲服務。Orleans項目基本上被認為是並行計算模型Actor Model的分布式版本 雖然已經存在Erlang 和Akka這樣利用Actor Model的框架,用戶仍然需要做很多工作來確保... 閱讀全文
posted @  2014-12-22 22:07 Witte 閱讀(56) |  評論 (0)   編輯
分類:  orleans

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com