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


    自從寫了RabbitHub框架系列后的一段時間內一直在思索更加輕量簡便,分布式高並發的框架(RabbitHub學習成本較高),無意間在網上級聯看到了很多新框架:從helios到Akka.NET在到Orleans在到Azure Service Fabric,最終選擇了Orleans作為研究對象,理由是微軟官方出品,Service Fabric還沒有正式版,下面我們來進入Orleans的大門。

什么是Orleans?

來自官網的解釋:

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

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

    特性

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

    從上述的簡介可以看出Orleans就是為了分布式、並發而生,那么大並發、高用戶量也可以得到解決。

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

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

源碼:https://github.com/dotnet/orleans

是否可靠?案例有哪些?

    是否可靠我也不確定,但是案例還是很誘人的,特別是微軟官方游戲:Halo4、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM