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 ...
随机推荐
- .NET使用NPOI组件将数据导出Excel
.NPOI官方网站:http://npoi.codeplex.com/ 可以到此网站上去下载最新的NPOI组件版本 2.NPOI在线学习教程(中文版): http://www.cnblogs.com/ ...
- MVC3 验证码
public ActionResult GetValidateCode() { string code = CreateValidateC ...
- 【转】emulator: ERROR: Could not load OpenGLES emulation library: lib64OpenglRender.so
[转]emulator: ERROR: Could not load OpenGLES emulation library: lib64OpenglRender.so ./emulator64-arm ...
- Python 基础学习20151201
L = [ ['Apple','Google','Microsoft'], ['Java','Python','Ruby','PHP'], ['Adam','Bart','Lisa'] ] #打印Ap ...
- js 字符串为空
content.replace(/(^\s)|(\s$)/g, "")
- web测试 结果存储类型为“Database”,但尚未指定结果储存库连接字符串
vs2010 Ultimate版带有web测试功能,可以对网站的性能以及负载进行测试. 在进行负载测试时提示“异常 LoadTestConnectStringMissingException 1 Lo ...
- 浅谈Linux ftp服务器相关配置
首先我们需要在Linux系统下安装FTP服务器 Ubuntu sudo apt-get install....... centos yun....... 然后,我们要配置vsftpd.conf文件 ...
- window下nodejs安装指南
相信对于很多关注javascript发展的同学来说,nodejs已经不是一个陌生的词眼.有关nodejs的相关资料网上已经铺天盖地.由于它的高并发特性,造就了其特殊的应用地位. 国内目前关注最高,维护 ...
- JavaEE Tutorials (6) - 使用嵌入式企业bean容器
6.1嵌入式企业bean容器概述826.2开发嵌入式企业bean应用82 6.2.1运行嵌入式应用83 6.2.2创建企业bean容器83 6.2.3查找会话bean引用84 6.2.4关闭企业bea ...
- Java学习之IO之File类一
File的操作 package com.gh.file; import java.io.File; import java.io.IOException; /** * File操作 * @author ...