自从写了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的应用部署图

核心角色

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包

安装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,代码如下

用意非常简单,根据手机号码判断用户是否存在。

在”Sample.Implements“新建一个UserService实现IUserService接口,代码如下:

为服务端和客户端书写代码

在”Server“Program.cs入口点中写入如下代码:

在”Client“Program.cs入口点中写入如下代码:

运行

首先运行”Server.exe“等待出现如下文字:

在运行”Client.exe“

Demo源码

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

总结

可以发现我们的客户端应用”Client“完全没有引用业务逻辑实现的项目”Sample.Implements“,也就是说业务逻辑的执行是在服务端”Server“执行的,本次Demo只用了一个服务端,大伙可以想象下如果服务端进行了集群,再通过一些协调服务进行管理分配,那么搭建一个”微服务“的架构变得异常轻松,通过一些手段动态切换客户端所需服务的服务端地址从而提供应用响应与容灾的支持。

本文主要是做一个简单的介绍和Demo的效果,在后续章节中我会继续带来一些更实用的特性介绍与剖析,虽然我也在摸索中,但尽量不误导大伙。。。

交流方式

QQ群:384413261(RabbitHub)

Email:majian159@live.com

微软分布式云计算框架Orleans(1):Hello World的更多相关文章

  1. 微软分布式云计算框架Orleans(2):容灾与集群(1)

    在上一篇:微软分布式云计算框架Orleans(1):Hello World,我们大概了解了Orleans如何运用,当然上一篇的例子可以说是简单且无效的,因为用了Orleans不可能只写一个Hello ...

  2. 转:微软分布式云计算框架Orleans

    http://www.cnblogs.com/ants/p/5122068.html 一种构建分布式. 高规模(伸缩)的应用程序 微软对奥尔良计划(Project Orleans)云计算框架开源.奥尔 ...

  3. 微软研究院的分布式云计算框架orleans

    orleans   Orleans 客户端请求的消息流转以及消息在Silo中再路由机制 Witte 2015-04-29 21:58 阅读:196 评论:0     一种基于Orleans的分布式Id ...

  4. akka.net与微软分布式框架Orleans

    微软分布式框架Orleans开源了 开源地址: https://github.com/dotnet/orleans 昨天编译了一下,这个最新的Orleans安装程序(用github源码编译的) 下载地 ...

  5. 微软开源 WCF 分布式服务框架,并入 .NET 基金会项目

    微软北京时间2015.5.20 在其 .NET Foundation GitHub 开源项目页中开放了 WCF 分布式服务框架的代码.WCF突然之间成为一个热门话题,在各大网站上都有不同的报道:dot ...

  6. Dubbo阿里Alibaba开源的分布式服务框架

    [获奖公布]"我的2016"主题征文活动    程序猿全指南,让[移动开发]更简单!      [观点]移动原生App开发和HTML 5开发,你更看好哪个?   博客的神秘功能 D ...

  7. 微言Netty:分布式服务框架

    1. 前言 几年前,我就一直想着要设计一款自己的实时通讯框架,于是出来了TinySocket,她是基于微软的SocketAsyncEventArgs来实现的,由于此类提供的功能很简洁,所以当时自己实现 ...

  8. [源码解析] 深度学习分布式训练框架 horovod (20) --- Elastic Training Operator

    [源码解析] 深度学习分布式训练框架 horovod (20) --- Elastic Training Operator 目录 [源码解析] 深度学习分布式训练框架 horovod (20) --- ...

  9. 一个轻量级分布式RPC框架--NettyRpc

    1.背景 最近在搜索Netty和Zookeeper方面的文章时,看到了这篇文章<轻量级分布式 RPC 框架>,作者用Zookeeper.Netty和Spring写了一个轻量级的分布式RPC ...

随机推荐

  1. 简单看看ThreadPool的源码以及从中看出线程间传值的另一种方法

    这几天太忙没时间写博客,今天回家就简单的看了下ThreadPool的源码,发现有一个好玩的东西,叫做”执行上下文“,拽名叫做:”ExecutionContext“. 一:ThreadPool的大概流程 ...

  2. SharePoint Content Database简介

    SharePoint作为微软主打的企业Portal平台,功能强大,使用简单,非常的方便.对于很多关系数据,我们可以使用自定义列表来维护,如果是非关系数据,可以使用文档库来维护.另外还可以在上面进行版本 ...

  3. ASP.NET MVC 拓展ActionResult实现Html To Pdf 导出

    之前实现了html直接转换为word文档的功能,那么是否也同样可以直接转换为pdf文档呢,网上搜了下html to pdf 的开源插件有很多 如:wkhtmltopdf,pdfsharp,itexts ...

  4. android scrollview 实现上下左右滚动方法

    原来是scrollview与HorizontalScrollView组合布局 详细可参考:http://blog.csdn.net/aminfo/article/details/7846963

  5. eclipse设置显示代码行数(转)

    (转自:http://jingyan.baidu.com/article/b2c186c89b7023c46ef6ff27.html) 载入eclipse的主页面,默认以英文版的eclipse为例 点 ...

  6. 【转】Android编程判断手机or平板

    转载自:http://www.cnblogs.com/sunzn/p/3663363.html /** * 判断当前设备是手机还是平板,代码来自 Google I/O App for Android ...

  7. plsql+绿色版oracle连接远程数据库配置及提示缺少msvcr71.dll解决方法

    之前一直用的sqldeveloper连接oracle数据库,这个免费而且也是官方出品,除了体积略大启动略慢外,也没什么不好的.. 一次偶然机会决定试一下plsql,整理一下安装资料,需要本地oracl ...

  8. java设计模式之装饰模式

    发现设计模式的学习越来越让自己学习的东西太少了,应该多接触一些东西,多出去走一走. 装饰模式概念: 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活(大话设计模式) 在不 ...

  9. OpenStack Networking overview

    原文地址:http://docs.openstack.org/newton/install-guide-ubuntu/neutron-concepts.html Networking service ...

  10. 空间复杂度是什么?What does ‘Space Complexity’ mean? ------geeksforgeeks 翻译

    这一章比较短! 空间复杂度(space complexity)和辅助空间(auxiliary space)经常混用,下面是正确的辅助空间和空间复杂度的定义 辅助空间:算法需要用到的额外或者暂时的存储空 ...