自从写了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. 0007《SQL必知必会》笔记03-汇总与分组数据

    1.有些时候需要数据的汇总值,而不是数据本身,比如对某些数据求和.计数.求最大最小值.求平均值,因此就有了5个聚集函数:AVE().COUNT().MAX().MIN().SUM(): (1)求平均值 ...

  2. proteus汉化

    下载地址: http://files.cnblogs.com/files/xiaobo-Linux/proteus7%E6%B1%89%E5%8C%96.zip (别的版本也应该可以汉化) 将这ARE ...

  3. java 判断两个时间相差的天数

    1.实现目标 输入:两个日期 输出:两个日期相差的天数 2.代码实现 方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的   ...

  4. linux 文件系统解析及相关命令

    简介 文件系统就是分区或磁盘上的所有文件的逻辑集合. 文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件.目录.软连接及文件保护信息等都存储在其中. 不同Lin ...

  5. ViewPager+Fragment再探:和TAB滑动条一起三者结合

    Fragment前篇: <Android Fragment初探:静态Fragment组成Activity> ViewPager前篇: <Android ViewPager初探:让页面 ...

  6. .NET对象的内存布局

    每个虚拟机都有它自己的对象布局,本文我们将针对sscli源码和windbg调试器来查看不同类型的.net对象布局. 在.net虚拟机里,每个对象都需要保存这些信息: 对象的类型: 对象实例的成员属性( ...

  7. jquery——滚动条插件jscroll.js

    一.效果如下 点击“测试中奖纪录”弹出弹框.弹框中内容超出时显示滚动条. 二.代码部分 1.html结构 <body> <a href="javascript:;" ...

  8. 彻底解决mysql中文乱码的办法,修改mysql解压缩版(免安装版或zip版)字符编码

    MySQL会出现中文乱码的原因不外乎下列几点:1.server本身设定问题,例如server字符编码还停留在latin12.table的语系设定问题(包含character与collation)3.客 ...

  9. Thread 同步线程(打印机同步)

    1.首先创建一个打印机对象 package cn.b.happy; public class Printer { Object o =new Object(); public void print() ...

  10. u3d_shader_surface_shader_4

    Rim Lighting  轮廓自发光 一:疑问:1.总感觉在编辑器Scene状态下,脚本计算的ViewDir是我漫游的Cam,而不是项目中的MainCam啊! 然后就会造成Scene状态下轮廓自发光 ...