微軟分佈式雲計算框架Orleans(1):Hello World

    自從寫了RabbitHub框架系列後的一段時間內一直在思索更加輕量簡便,分佈式高併發的框架(RabbitHub學習成本較高),無心間在網上級聯看到了不少新框架:從helios到Akka.NET在到Orleans在到Azure Service Fabric,最終選擇了Orleans做爲研究對象,理由是微軟官方出品,Service Fabric尚未正式版,下面咱們來進入Orleans的大門。

什麼是Orleans?

來自官網的解釋:ios

    一種構建分佈式、 高規模(伸縮)的應用程序,在.NET 簡單方法git

    奧爾良是一個框架,提供一個簡單的方法來構建分佈式的高規模計算應用程序,而無需瞭解並應用複雜併發或其餘伸縮模式。它是由微軟研究院建立和設計在雲計算中使用。    github

    特性架構

  1. 可擴展
  2. 低延遲
  3. 簡化併發

    從上述的簡介能夠看出Orleans就是爲了分佈式、併發而生,那麼大併發、高用戶量也能夠獲得解決。併發

官網:http://dotnet.github.io/orleans/框架

文檔:http://dotnet.github.io/orleans/What's-new-in-Orleans分佈式

源碼:https://github.com/dotnet/orleans微服務

是否可靠?案例有哪些?

    是否可靠我也不肯定,可是案例仍是很誘人的,特別是微軟官方遊戲:Halo四、Halo5(光環|光暈)的雲服務所有由它來承載。固然還有其它的用戶,不過我都不怎麼認識,就不列出了,大夥能夠去官網查看。高併發

基於Orleans的應用部署圖

繪圖1

核心角色

Grains(糧食、穀物、雜糧)

    Grains能夠理解爲一個服務,相似:UserService、AccountService,是主要的業務邏輯實現與抽象。學習

Silos(筒倉)

    Silos能夠理爲一臺Server,裏面主要用於存儲Grains,也就是說Grains開發完成後須要註冊到Silos中,而後等待調用。

支持的宿主

.NET Framework、Core CLR,也就是說能夠進行跨平臺部署。

Client(客戶端)

    具體的應用客戶端,能夠是控制檯、Web應用程序(MVC——包含vNext、WebForms)、WindowService、WPF等一切.NET端技術。

第一個基於Orleans的應用程序

創建項目結構

新建2個控制檯應用程序,和2個Windows類庫,項目結構以下:

image

在」Sample.Implements「中添加對項目」Sample.Interfaces「的引用。

在」Client「項目中添加對項目」Sample.Interfaces「的引用。

在」Server「項目中添加對項目」Sample.Interfaces「,」Sample.Implements「的引用。

安裝NuGet包

安裝NuGet包「Microsoft.Orleans.Server」、」Microsoft.Extensions.DependencyInjection「到「Server」項目中。

image

安裝NuGet包「Microsoft.Orleans.Client」到「Client」項目中。

image

安裝NuGet包「Microsoft.Orleans.Core」到「Sample.Implements」和」Sample.Implements」項目中。

image

image

書寫業務邏輯(Grains)

在」Sample.Interfaces「中新建一個IUserService,代碼以下

image

用意很是簡單,根據手機號碼判斷用戶是否存在。

在」Sample.Implements「新建一個UserService實現IUserService接口,代碼以下:

image

爲服務端和客戶端書寫代碼

在」Server「Program.cs入口點中寫入以下代碼:

image

在」Client「Program.cs入口點中寫入以下代碼:

image

運行

首先運行」Server.exe「等待出現以下文字:

image

在運行」Client.exe「

image

Demo源碼

本次的源碼放在:https://github.com/majian159/Samples/tree/master/OrleansSamples/HelloWorld

總結

    能夠發現咱們的客戶端應用」Client「徹底沒有引用業務邏輯實現的項目」Sample.Implements「,也就是說業務邏輯的執行是在服務端」Server「執行的,本次Demo只用了一個服務端,大夥能夠想象下若是服務端進行了集羣,再經過一些協調服務進行管理分配,那麼搭建一個」微服務「的架構變得異常輕鬆,經過一些手段動態切換客戶端所需服務的服務端地址從而提供應用響應與容災的支持。

    本文主要是作一個簡單的介紹和Demo的效果,在後續章節中我會繼續帶來一些更實用的特性介紹與剖析,雖然我也在摸索中,但儘可能不誤導大夥。。。

交流方式

QQ羣:384413261(RabbitHub)

Email:majian159@live.com

相關文章
相關標籤/搜索