自从写了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. Sql Server之旅——第一站 那些给我们带来福利的系统视图

    本来想这个系列写点什么好呢,后来想想大家作为程序员,用的最多的莫过于数据库了,但是事实上很多像我这样工作在一线的码农,对sql 都一知半解,别谈优化和对数据库底层的认识了,我也是这样... 一:那些系 ...

  2. DateTime的精度小问题

    一般来说判断时间的话,用个DateTime类型就已经够用了.但是有些情况,比如下面这种 DECLARE @DT1 DATETIME DECLARE @DT2 DATETIME SELECT @DT1 ...

  3. maven 常见错误解决方法

    1. 最重要的一点,使用国内镜像,比如 oschina.net 的镜像: 搜 jar 推荐:http://maven.outofmemory.cn/,速度极快. 2. 错误:Could not res ...

  4. 使用 jsoup 解析HTML

    // 参考资料: // http://www.jb51.net/article/43485.htm @Test public void AnalysisHTMLByString() { String ...

  5. Linux磁盘管理之设备文件详解04

    Linux一切接文件,除了普通文件和目录文件,还包括一些其它的特殊文件:块设备文件.字符设备文件.套接字文件.链接文件等.今天这里主要说一下常见的块设备文件和字符设备文件,这2类是最常见的设备文件类. ...

  6. 根据网站所做的SEO优化整理的一份文档

    今日给合作公司讲解本公司网站SEO优化整理的一份简单文档 架构 ########################################## 1.尽量避免Javascript和flash导航. ...

  7. Android学习笔记之AndroidManifest.xml文件解析(转)

    //自已备注: <?xml version="1.0" encoding="utf-8"?>//说明了版本号,字符集 <manifest xm ...

  8. emacs 新手笔记(一) —— 阅读【emacs tutorial】

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 [emacs tutorial]是熟悉 emacs 的入门资料.一共几十个命令,不需硬记,勤练即可. 翻页命 ...

  9. Mac brew命令

    一.简介 Brew又叫Homebrew,是MAC中的一款软件包管理工具,通过brew可以很方便的在MAC中安装软件或者是卸载软件. 二.安装 ruby -e "$(curl -fsSL ht ...

  10. Terminal中输入命令直接打开QtCreator,以及创建其桌面快捷方式

    工业项目设计学习第一步,熟悉开发工具 Qt学习论坛,东西多,但也杂 emouse的博客,以前学习STM32开发环境搭建时也是参考这位博主的 更多详细的步骤在上面都能找到,今天先不写,等明天把硬件设备全 ...