Orleans-Hello World

时间:2021-12-19 23:54:12

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的应用部署图

Orleans-Hello World

核心角色

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

Orleans-Hello World

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

Orleans-Hello World

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

Orleans-Hello World

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

Orleans-Hello World

Orleans-Hello World

书写业务逻辑(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“等待出现如下文字:

Orleans-Hello World

在运行”Client.exe“

Orleans-Hello World

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的更多相关文章

  1. &period;NET的Actor模型:Orleans

    Orleans是微软推出的类似Scala Akka的Actor模型,Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务, 可用于实现DDD+EventSou ...

  2. 一种基于Orleans的分布式Id生成方案

    基于Orleans的分布式Id生成方案,因Orleans的单实例.单线程模型,让这种实现变的简单,贴出一种实现,欢迎大家提出意见 public interface ISequenceNoGenerat ...

  3. ORLEANS REMOTE DEPLOYMENT

    Orleans Remote Deployment Table of Contents Overview: 1 Prerequisites. 2 Deployment Steps. 2 Orleans ...

  4. Microsoft Orleans 之 入门指南

    Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...

  5. orleans&sol;Documentation

    福利 奥尔良的主要好处是︰开发人员工作效率,甚至为非专家程序员;和默认的透明可伸缩性与程序员没有特别努力.我们扩大每个下面这些好处. 开发人员的生产力 奥尔良的编程模型通过提供以下关键的抽象. 担保和 ...

  6. github&period;com&sol;dotnet&sol;orleans

    Orleans is a framework that provides a straight-forward approach to building distributed high-scale ...

  7. 微软分布式云计算框架Orleans&lpar;1&rpar;:Hello World

    自从写了RabbitHub框架系列后的一段时间内一直在思索更加轻量简便,分布式高并发的框架(RabbitHub学习成本较高),无意间在网上级联看到了很多新框架:从helios到Akka.NET在到Or ...

  8. 微软分布式云计算框架Orleans&lpar;2&rpar;:容灾与集群&lpar;1&rpar;

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

  9. Orleans是什么 &lpar;一&rpar;

    官网:http://dotnet.github.io/orleans/ 文档:http://dotnet.github.io/orleans/What's-new-in-Orleans 源码:http ...

  10. Orleans 高级特性-目录

    这里将介绍一些Orleans的高级特性,适合对Orleans已经有不少了解的用户,先列出一个索引,博客文章慢慢补充 1.使用Immutable 优化复制 2.自定义序列化 (待完成) 3.可重入 Gr ...

随机推荐

  1. How Google TestsSoftware - Part Five

    Instead of distinguishingbetween code, integration and system testing, Google uses the language ofsm ...

  2. canvas drawImage异步特性

    先看代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  3. 40w会议投票系统优化方案

    40w会议投票系统优化方案 最近2天谈了一个项目,根据提出的需求是,该系统本来是属于一个大系统的分割出来的一个很小的系统,但是由于是并发关系会耗费资源很大,所以分割出来.据了解,系统采用的mysql+ ...

  4. python守护进程

    1.守护进程 [1]使用runner这个模块直接创建守护进程,非常方便. [2]运行方法:python xxx.py start|stop|restart [3]调用python xxx.py sto ...

  5. 3-jsp 内置对象、转发与重定向

    1.request:请求常用api: getParameter("name"):获取页面表单单个元素的值 getParameterValues("name"): ...

  6. C&num;&period;NET 大型通用信息化系统集成快速开发平台 4&period;1 版本 - 客户端多网络支持

    客户端可以支持灵活的,中间层连接选择,由于我们系统的定位架构大型信息系统的,所以全国各地,甚至国外的用户也会有,所以需要支持全网络配置,只要配置了中间层,可以选择连接哪个中间层的服务程序.客户端可以进 ...

  7. &lbrack;HTML&rsqb; HTML Lists

    无序列表: 1. unordered list 以<ul>开头,以</ul>结果. 每个list item 以<li> tag开头. 2. 样式: bullet(小 ...

  8. LoadRunner录制登录机票网址,并回放,加断言

    回放录制登录过程脚本,加断言 在页面登录的过程如下: 1先进入http://127.0.0.1:1080/WebTours/index.htm 2之后获取userSession信息 3在输入信息后点击 ...

  9. &ast;p&plus;&plus;与&lpar;&ast;p&rpar;&plus;&plus;与&ast;&lpar;p&plus;&plus;&rpar;------自增运算符常见误区

    自增运算符(++) 自增\自减运算符分为前缀形(++a)和后缀形(a++),这里重点分析自增 大部分人对前缀和后缀的理解一般是,前缀形式是先++再使用(先变后用),后缀形式是先使用再++(先用后变) ...

  10. 用vue实现省市县三级联动

    我真的没想到这个会困扰到我.最开始以为,不就是直接找个简单的插件就实现了吗,jquery插件找了几个,都没有达到目的. 需求是这样的: 点击input框,弹出一个popup,然后可以滚动选择省,市,县 ...