Orleans-Hello World
Orleans-Hello World
http://www.rm5u.com/orleans/orleans-intro.html
什么是Orleans?
Orleans(奥尔良)是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务。Orleans项目基本上被认为是并行计算模型Actor Model的分布式版本。
虽然已经存在Erlang 和Akka这样利用Actor Model的框架,用户仍然需要做很多工作来确保那些actors保持在线以及能够处理故障和恢复。Orleans框架着眼复杂项目和actor管理,让用户能够编写分布式项目而无需担心。
Orleans是微软的终极计算机小组(来自其它新闻的说法,这个项目我最开始看到是在微软研究院的页面上)近年来一直研发的项目。
主要特性:
特性
可扩展
低延迟
简化并发
从上述的简介可以看出Orleans就是为了分布式、并发而生,那么大并发、高用户量也可以得到解决。
官网:http://dotnet.github.io/orleans/
文档:http://dotnet.github.io/orleans/What's-new-in-Orleans
源码:https://github.com/dotnet/orleans
是否可靠?案例有哪些?
是否可靠我也不确定,但是案例还是很诱人的,特别是微软官方游戏:Halo4、Halo5(光环|光晕)的云服务全部由它来承载。当然还有其它的用户,不过我都不怎么认识,就不列出了,大伙可以去官网查看。
基于Orleans的应用部署图

核心角色
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类库,项目结构如下:

在”Sample.Implements“中添加对项目”Sample.Interfaces“的引用。
在”Client“项目中添加对项目”Sample.Interfaces“的引用。
在”Server“项目中添加对项目”Sample.Interfaces“,”Sample.Implements“的引用。
安装NuGet包“Microsoft.Orleans.Server”、”Microsoft.Extensions.DependencyInjection“到“Server”项目中。

安装NuGet包“Microsoft.Orleans.Client”到“Client”项目中。

安装NuGet包“Microsoft.Orleans.Core”到“Sample.Implements”和”Sample.Implements”项目中。


书写业务逻辑(Grains)
在”Sample.Interfaces“中新建一个IUserService,代码如下
using Orleans;
using System.Threading.Tasks; namespace Sample.Interfaces
{
public interface IUserService : IGrainWithIntegerKey
{
Task<bool> Exist(string mobileNumber);
}
}
用意非常简单,根据手机号码判断用户是否存在。
在”Sample.Implements“新建一个UserService实现IUserService接口,代码如下:
using Orleans;
using Sample.Interfaces;
using System.Threading.Tasks; namespace Sample.Implements
{
public class UserService : Grain, IUserService
{
#region Implementation of IUserService public Task<bool> Exist(string mobileNumber)
{
return Task.FromResult(mobileNumber == "13888888888");
} #endregion Implementation of IUserService
}
}
为服务端和客户端书写代码
在”Server“Program.cs入口点中写入如下代码:
using Orleans.Runtime.Host;
using System; namespace Server
{
internal class Program
{
private static void Main(string[] args)
{
using (var host = new SiloHost("Default"))
{
host.LoadOrleansConfig();
host.InitializeOrleansSilo();
host.StartOrleansSilo(); Console.WriteLine("已启动,按下任意键退出。");
Console.ReadLine(); host.StopOrleansSilo();
}
}
}
}
在”Client“Program.cs入口点中写入如下代码:
using Orleans;
using Sample.Interfaces;
using System; namespace Client
{
internal class Program
{
private static void Main(string[] args)
{
GrainClient.Initialize(); while (true)
{
Console.WriteLine("请输入用户的手机号码来判断是否存在:");
var mobileNumber = Console.ReadLine();
var userService = GrainClient.GrainFactory.GetGrain<IUserService>(0);
Console.WriteLine($"用户{mobileNumber},{(userService.Exist(mobileNumber).Result ? "已经存在" : "还不存在")}");
}
}
}
}
运行
首先运行”Server.exe“等待出现如下文字:

在运行”Client.exe“

Demo源码
本次的源码放在:https://github.com/majian159/Samples/tree/master/OrleansSamples/HelloWorld
总结
可以发现我们的客户端应用”Client“完全没有引用业务逻辑实现的项目”Sample.Implements“,也就是说业务逻辑的执行是在服务端”Server“执行的,本次Demo只用了一个服务端,大伙可以想象下如果服务端进行了集群,再通过一些协调服务进行管理分配,那么搭建一个”微服务“的架构变得异常轻松,通过一些手段动态切换客户端所需服务的服务端地址从而提供应用响应与容灾的支持。
本文转载自:http://www.cnblogs.com/ants/p/5122068.html
Orleans-Hello World的更多相关文章
- .NET的Actor模型:Orleans
Orleans是微软推出的类似Scala Akka的Actor模型,Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务, 可用于实现DDD+EventSou ...
- 一种基于Orleans的分布式Id生成方案
基于Orleans的分布式Id生成方案,因Orleans的单实例.单线程模型,让这种实现变的简单,贴出一种实现,欢迎大家提出意见 public interface ISequenceNoGenerat ...
- ORLEANS REMOTE DEPLOYMENT
Orleans Remote Deployment Table of Contents Overview: 1 Prerequisites. 2 Deployment Steps. 2 Orleans ...
- Microsoft Orleans 之 入门指南
Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...
- orleans/Documentation
福利 奥尔良的主要好处是︰开发人员工作效率,甚至为非专家程序员;和默认的透明可伸缩性与程序员没有特别努力.我们扩大每个下面这些好处. 开发人员的生产力 奥尔良的编程模型通过提供以下关键的抽象. 担保和 ...
- github.com/dotnet/orleans
Orleans is a framework that provides a straight-forward approach to building distributed high-scale ...
- 微软分布式云计算框架Orleans(1):Hello World
自从写了RabbitHub框架系列后的一段时间内一直在思索更加轻量简便,分布式高并发的框架(RabbitHub学习成本较高),无意间在网上级联看到了很多新框架:从helios到Akka.NET在到Or ...
- 微软分布式云计算框架Orleans(2):容灾与集群(1)
在上一篇:微软分布式云计算框架Orleans(1):Hello World,我们大概了解了Orleans如何运用,当然上一篇的例子可以说是简单且无效的,因为用了Orleans不可能只写一个Hello ...
- Orleans是什么 (一)
官网:http://dotnet.github.io/orleans/ 文档:http://dotnet.github.io/orleans/What's-new-in-Orleans 源码:http ...
- Orleans 高级特性-目录
这里将介绍一些Orleans的高级特性,适合对Orleans已经有不少了解的用户,先列出一个索引,博客文章慢慢补充 1.使用Immutable 优化复制 2.自定义序列化 (待完成) 3.可重入 Gr ...
随机推荐
- MySql 初次安装登陆
名称:随便写 服务器:127.0.0.1或者localhost 端口:在安装mysql应该看到是3306 用户:root 密码:(默认的是空,如果你设置过自己应该知道) 其他就可以不用设置
- AHK(1)之运行程序或打开文档
小鸟学AHK(1)之运行程序或打开文档 AHK就是AutoHotKey,是一款免费的.Windows平台下开放源代码的热键脚本语言. 亲爱的朋友,叫我怎么向你推荐它呢! COOL,对,就是酷,那么 ...
- 删除缓存内容----unrecognized selector sent to instance
这条错误主要还得看unrecognized前面,,我的时[NSNumber-length...]其实是变量类型错误.. 无法识别选择器发送实例,,本来意思就是你的controllerview找不到视图 ...
- 让Qt支持Win7的Aero和毛玻璃效果
Qt5增加了许多特性,其中 Qt Windows Extras 模块就增加了对Win7 Aero 效果的支持. 官网的介绍如下: Qt Windows Extras provide classes a ...
- Pagodas(等差数列)
Pagodas Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- android自定义控件 onMeasure() 测量尺寸
上次讲的自定义控件刷新点屏幕的任意地方都会刷新,而且在xml里自定义控件下面放一个textview的话,这个TextView是显示不出来的,不只这个,以前的几个自定义控件都是 为什么呢?今天来讲下on ...
- Sublime Text 高级正则查换替换功能
有一个需求:把某从mysql 里导出的的数据表 数据里的 Insert语句 转换成 update 语句. 须要把例如以下的语句: insert into `table` (`ID`, `code`, ...
- linux添加、修改环境变量
比如要把/etc/apache/bin目录添加到PATH中,方法有三: 1.In shell: setenv <path_to_append>: $ENVNAME setenv PATH ...
- 修改linux多系统启动顺序
Ubuntu和XP双系统grub2默认启动项设置为XP 装了双系统后,在开机时总会有想让一个系统默认启动的时候,一般安装完Ubuntu和XP双系统后,开机时默认的是启动Ubuntu系统,但是当想让XP ...
- BZOJ 1060: [ZJOI2007]时态同步( 树形dp )
坑爹...数据是错的..详见discuss http://www.lydsy.com/JudgeOnline/wttl/wttl.php?pid=1060 先求根到叶子的距离最大值x, 然后把所有叶 ...