Orleans 基础示例

介绍

Orleans 由 Microsoft Research 创建和设计,用于云计算。被微软广泛应用于多个产品,尤其在游戏领域的云服务平台。也被其它公司采用。

Orleans 于 2015 年 1 月开放源码,在开发者社区、Orleans 团队及微软的积极协作下,Orleans 已成为构建分布式系统和云服务的首选框架。

Orleans 是一个用于构建健壮、可伸缩的分布式应用程序的跨平台框架。

Orleans 是基于 .NET 开发,可以构建单个本地服务器扩展到云服务、高可用的应用程序。

Orleans 的核心在于它的编程模型(Virtual Actor Model),Virtual Actor Model 已然成为构建新一代分布式系统的新方法。关于更多 Virtual Actor Model 可以网上查找相关资料。

开发人员在遵从 Orleans 规则下,不限制功能,来降低高并发分布式系统的复杂性。

下面我们来快速创建一个 Orleans 应用程序。

开发工具使用 Visual Studio 2022,使用 .NET 6 的SDK 来开发。请提前准备好。

创建 Orleans 应用程序

1、创建一个名为 Yld 的解决方案。在解决方案下,分别创建四个项目

  • 包含 Grains 接口的类库 —— IDemoGrains
  • 包含 Grains 类库 —— DemoGrains
  • Silos 控制台应用程序 —— DemoSilo
  • Client 控制台应用程序 —— DemoClient

最终解决方案如下图:

2、 添加 NuGet 包

项目名称引用包
DemoClientMicrosoft.Orleans.Client
Microsoft.Extensions.Logging.Console
DemoGrainsMicrosoft.Extensions.Logging.Abstractions
Microsoft.Orleans.CodeGenerator.MSBuild
Microsoft.Extensions.Logging.Abstractions
DemoSiloMicrosoft.Orleans.Server
Microsoft.Extensions.Logging.Console
IDemoGrainsMicrosoft.Orleans.Core.Abstractions
Microsoft.Orleans.CodeGenerator.MSBuild

3、在 IDemoGrains 项目创建一个 IHelloGrain 接口,且继承 IGrainWithIntegerKey

public interface IHelloGrain : IGrainWithIntegerKey
{
    Task<string> SayHello(string msg);
}

4、在 DemoGrains 项目创建一个 HelloGrain 类,并继承 Grain 类和 IHelloGrain 接口,且该项目需添加 IDemoGrains 引用

public class HelloGrain : Grain, IHelloGrain
{
    private readonly ILogger logger;

    public HelloGrain(ILogger<HelloGrain> logger)
    {
        this.logger = logger;
    }

    public Task<string> SayHello(string msg)
    {
        logger.LogInformation($"\n SayHello 方法收到客户端发来的消息:'{msg}'");

        return Task.FromResult($"客户端发了消息,你不回点都不好意思?\n来而不往非礼也");
    }
}

5、在 DemoSilo 项目中配置 Silo 服务端,且DemoSilo 添加 DemoGrain 和 IDemoGrain 引用。 DemoSilo 项目中Program 的代码修改如下

using Microsoft.Extensions.Logging;
using DemoGrains;
using Orleans;
using Orleans.Configuration;
using Orleans.Hosting;

// 配置 host
using var host = new SiloHostBuilder()
    // 因为是本地开发, silo 使用 localhost 集群
    .UseLocalhostClustering()
    //配置集群Id 和 服务Id
    .Configure<ClusterOptions>(options =>
    {
        options.ClusterId = "dev";
        options.ServiceId = "YldDemoService";
    })
    //应用程序部分:只需引用我们使用的 Grain 实现
    .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(HelloGrain).Assembly).WithReferences())
    //配置日志输出到控制台
    .ConfigureLogging(logging => logging.AddConsole())
    //创建 silo
    .Build();

// 启动 host
await host.StartAsync();

Console.WriteLine("\n\n 按 Enter 终止...\n\n");
Console.ReadLine();

await host.StopAsync();

具体配置代码里有相应的注释,就略过

6、在 DemoClient 项目中配置客户端,及如何调用;DemoClient 添加 IDemoGrains 引用。Program 类代码如下

using IDemoGrains;
using Microsoft.Extensions.Logging;
using Orleans;
using Orleans.Configuration;

using var client = new ClientBuilder()
    // 这里配置与 Silo 相同
    .UseLocalhostClustering()
    //与 Silo 配置的服务一样,否则客户端会连接失败
    .Configure<ClusterOptions>(options =>
    {
        options.ClusterId = "dev";
        options.ServiceId = "YldDemoService";
    })
    .ConfigureLogging(logging => logging.AddConsole())
    .Build();


await client.Connect();

var helloGrain = client.GetGrain<IHelloGrain>(1);


var response = await helloGrain.SayHello("你好, Grain!");
Console.WriteLine("\n\n{0}\n\n", response);

Console.ReadKey();

7、先运行 DemoSilo ,然后再运行 DemoClient。成功运行如下图

简单的分布式应用程序就构建完成。在相比以前或其它框架来说简单了很多。

从上面的代码可以看到,Orleans 的基本构建模块是基于 Grains 。外部通过 Grains 定义的接口方法进行调用。这里先熟悉一下。

今天,就先体验下 Orleans 。后面一起解锁更多的用法。

最后,祝大家学习愉快!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Orleans 项目基本上被认为是并行计算模型 Actor Model 的分布式版本。  虽然已经存在 Erlang 和 Akka 这样利用 Actor Model 的框架,用户仍然需要做很多工作来确保那些 actors 保持在线以及能够处理故障和恢复。Orleans 框架着眼复杂项目和 actor 管理,让用户能够编写分布式项目而无需担心。    关于自家的云计算平台,微软最大的一个卖点就是开发人员可以使用.NET、Visual Studio和其它编程工具来编写Azure应用程序。不过这并不是事情的全部,微软研究人员正在研发下一代云计算编程模式和相关工具,根据最新的资 料,Orleans就微软下一代云计算编程模式(之一)。    Orleans是一种新的编程模式,用来提升微软通用语言运行库(CLR)的抽象水平,它引入了“grains”的概念,这是一个可以在数据中心之 间迁移的计算和数据存储单元。Orleans自身还将提供很多运行时,包括Geo-Distribution、数据复制与一致行、性能监控、自适应控制、 运行时监控、分布式调试。    Orleans的宗旨就是为了创建一种既适用于客户端又适用于服务器的编程模式,简化代码调试,提高代码的可移植性。    目前已知的资料并没有任何关于Orleans开发计划的内容,Orleans也许还处在概念设计阶段,也许已经开始了初期的开发工作,这些都要耐心等待才会有答案。相关入门教程: http://www.rm5u.com/orleans/orleans-intro.html 标签:云计算

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值