服务端配置

Silo通过SiloHostBuilder和许多补充选项类以编程方式进行配置。

Silo配置有几个关键方面:

  • Orleans集群信息
  • 集群提供程序(不知道咋翻译)
  • Silo到Silo和Client到Silo通信的端点
  • 应用部分

这是Silo配置的示例,该Silo配置定义群集信息,使用Azure群集并配置应用程序部分:

var silo = new SiloHostBuilder()
// 集群信息
.Configure<ClusterOptions>(options =>
{
options.ClusterId = "my-first-cluster";
options.ServiceId = "AspNetSampleApp";
})
// 群集提供程序
.UseAzureStorageClustering(options => options.ConnectionString = connectionString)
// 端口设置
.ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
// 应用程序部分:只需引用我们使用的一个grain实现类即可
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(HelloGrain).Assembly).WithReferences())
// 创建Silo!
.Build();

注意:使用UseAzureStorageClustering需要引用Microsoft.Orleans.Clustering.AzureStorage

下面让我们细分该示例中使用的步骤:

Orleans集群信息

    [...]
// 集群信息
.Configure<ClusterOptions>(options =>
{
options.ClusterId = "my-first-cluster";
options.ServiceId = "AspNetSampleApp";
})
[...]

这里我们做了两件事:

将设置ClusterId为"my-first-cluster":这是Orleans集群的唯一ID。使用此ID的所有客户端和Silo将能够直接相互通信。但是,您可以选择ClusterId对不同的部署使用不同的名称。

设置ServiceId为"AspNetSampleApp":这是您的应用程序的唯一ID,将由某些提供程序(例如持久性提供程序)使用。此ID应该保持稳定,并且在整个部署中都不应更改。

集群提供商(什么鬼)

    [...]
// 群集提供程序
.UseAzureStorageClustering(options => options.ConnectionString = connectionString)
[...]

通常,基于Orleans构建的服务会部署在专用硬件或Azure上的节点群集上。对于开发和基本测试,可以将Orleans部署在单节点配置中。当部署到节点集群中时,Orleans内部实现一组协议以发现和维护集群中Orleans孤岛的成员身份,包括节点故障检测和自动重新配置。

为了可靠地管理群集成员身份,Orleans使用Azure Table,SQL Server或Apache ZooKeeper进行节点同步。

在此示例中,我们使用Azure Table作为成员资格提供程序。(现在微软官网的东西都在推Azure,但是用它多少还是有点麻烦,还好能用SQL Server,后面的笔记中,我更多的可能会去使用SQL Server)

端口

var silo = new SiloHostBuilder()
[...]
// 端口设置
.ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
[...]

Orleans的Silo有两种典型的端点配置类型:

Silo到Silo的端点,用于同一集群中Silo之间的通信

客户端到Silo(或网关),用于同一集群中的客户端和Silo之间的通信

在示例中,我们使用帮助程序方法.ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000),该方法将用于Silo到Silo通信11111的端口设置为,将网关的端口设置为30000。此方法将检测要监听的接口。

在大多数情况下,此方法应该足够了,但是如果需要,我们可以进一步对其进行自定义。

下面是一个如何通过一些端口转发使用外部IP地址的示例:

[...]
.Configure<EndpointOptions>(options =>
{
// 用于 Silo-to-Silo 的端口
options.SiloPort = 11111;
// gateway 的端口
options.GatewayPort = 30000;
// 在集群中进行注册的IP地址
options.AdvertisedIPAddress = IPAddress.Parse("172.16.0.42");
// 监听的silo 远程连接点
options.GatewayListeningEndpoint = new IPEndPoint(IPAddress.Any, 40000);
// 监听的silo 远程端口连接点
options.SiloListeningEndpoint = new IPEndPoint(IPAddress.Any, 50000); })
//监听的主silo 远程连接点 为空则创建一个主silo连接点
.UseDevelopmentClustering(new IPEndPoint(IPAddress.Parse("192.168.8.1"),11111))
[...]

在内部,Silo将侦听0.0.0.0:400000.0.0.0:50000,但是在成员资格提供程序中发布的值将是172.16.0.42:11111172.16.0.42:30000

应用部分

    [...]
// Application parts: just reference one of the grain implementations that we use
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(ValueGrain).Assembly).WithReferences())
[...];

尽管从技术上来说这不是必需的步骤(如果未配置,Orleans将扫描当前文件夹中的所有程序集),但鼓励开发人员进行配置。此步骤将帮助Orleans加载用户程序集和类型。这些组件称为应用程序零件。所有粒度,粒度接口和序列化程序都是使用“应用程序部件”发现的。

应用部件使用配置IApplicationPartsManager,这可以使用IClientBuilderISiloHostBuilder下的ConfigureApplicationParts扩展方法。该ConfigureApplicationParts方法接受委托Action<IApplicationPartManager>

以下扩展方法IApplicationPartManager支持常用功能:

  • AddApplicationPart(assembly) 可以使用此扩展方法添加单个装配件。
  • AddFromAppDomain()添加当前加载到中的所有程序集AppDomain。
  • AddFromApplicationBaseDirectory()在当前基本路径中加载并添加所有程序集(请参阅参考资料AppDomain.BaseDirectory)。

通过上述方法添加的程序集可以在其返回类型上使用以下扩展方法进行补充IApplicationPartManagerWithAssemblies

  • WithReferences()从添加的零件中添加所有引用的装配。这将立即加载所有传递引用的程序集。程序集加载错误将被忽略。
  • WithCodeGeneration()为添加的零件生成支持代码,并将其添加到零件管理器中。请注意,这要求Microsoft.Orleans.OrleansCodeGenerator安装该软件包,通常称为运行时代码生成。

类型发现要求提供的应用程序部分包括特定属性。建议将构建时代码生成程序包(Microsoft.Orleans.CodeGenerator.MSBuildMicrosoft.Orleans.OrleansCodeGenerator.Build)添加到每个包含Grains,Grain接口或序列化程序的项目中,以确保存在这些属性。生成时代码生成仅支持C#。对于F#,Visual Basic和其他.NET语言,可以通过上述WithCodeGeneration()方法在配置期间生成代码。有关代码生成的更多信息,请参见相应的部分

便捷路由

目录Orleans[NET Core 3.1] 学习笔记(一).NET环境下的分布式应用程序

上一节Orleans[NET Core 3.1] 学习笔记(三)( 2 )客户端配置

下一节Orleans[NET Core 3.1] 学习笔记(四)( 1 )创建项目

Orleans[NET Core 3.1] 学习笔记(三)( 3 )服务端配置的更多相关文章

  1. Kafka学习笔记2--Kafka的服务端配置

    下载解压 kafka 后,在 kafka/config 下有 3 个配置文件与主题的生产.消费相关. server.properties--服务端配置 producer.properties--生产端 ...

  2. Orleans[NET Core 3.1] 学习笔记(三)( 2 )客户端配置

    客户端配置 通过一个ClientBuilder和多个补充选项类,以编程方式配置一个用于连接Silo集群并将请求发送至Grain的客户端. 客户端配置示例: var client = new Clien ...

  3. Orleans[NET Core 3.1] 学习笔记(三)( 1 )本地开发配置

    本地开发配置 本地开发和调试的时候,我们可能不需要去关注集群和网络ip端口.所以对于本地开发模式,Orleans给了我们比较简单的配置方式. Silo配置 在本地开发的配置模式下,Orleans会默认 ...

  4. Orleans[NET Core 3.1] 学习笔记(四)( 1 )创建项目

    ClassRoom ClassRoom是一个练手demo,目的是为了能熟悉掌握Orleans的基本知识和使用方法,我会尽量在这个项目中加入更多的知识点,一边学一边练避免我看完文档就忘掉 创建项目 依旧 ...

  5. Orleans[NET Core 3.1] 学习笔记(二)Hello World

    项目结构 开始Orleans之前,我们都知道Orleans主要可以分为俩部分,Host和Client. 所以我们可以创建如下的项目结构: IGrain 一个包含Grain接口的库(.NET Stand ...

  6. Orleans[NET Core 3.1] 学习笔记(一).NET环境下的分布式应用程序

    前言 Orleans是一个跨平台的框架,用于搭建可扩展的分布式应用程序 第一次接触Orleans还是两年前做游戏服务器的时候,用SignalR+Orleans的组合,写起代码来不要太爽. 即将进入20 ...

  7. Orleans[NET Core 3.1] 学习笔记(四)( 2 )获取Grain的方式

    简介 在这一节,我们将介绍如何在Silo和Client中获取Grain及调用Grain Grain获取方式 从Grain内部获取: //根据特定的Key值创建或获取指定的Grain IStudent ...

  8. Orleans[NET Core 3.1] 学习笔记(四)( 3 )监控Orleans Silo的方式 OrleansDashboard

    简介 Orleans用起来的确很爽,更爽的是咱们有能监控它的工具. OrleansDashboard 这个工具是一个可视化的Silo监控工具,Silo和Grain的活跃状态一目了然,各个接口的响应速度 ...

  9. CAS学习笔记三:SpringBoot自动配置与手动配置过滤器方式集成CAS客户端

    本文目标 基于SpringBoot + Maven 分别使用自动配置与手动配置过滤器方式集成CAS客户端. 需要提前搭建 CAS 服务端,参考 https://www.cnblogs.com/hell ...

随机推荐

  1. nyoj 68-三点顺序(叉积)

    68-三点顺序 内存限制:64MB 时间限制:1000ms 特判: No 通过数:3 提交数:5 难度:3 题目描述: 现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A ...

  2. CSS中越界问题的经典解决方案

    (1)如何解决父元素的第一个子元素的margin-top越界问题 1)为父元素加border-top: 1px;——有副作用 2)为父元素指定padding-top: 1px;——有副作用 3)为父元 ...

  3. 力扣(LeetCode)计数质数 个人题解

    统计所有小于非负整数 n 的质数的数量. 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 一般方法,也就是一般人都会用的,将数从2到它本 ...

  4. PHP字符逃逸导致的对象注入

    1.漏洞产生原因: 序列化的字符串在经过过滤函数不正确的处理而导致对象注入,目前看到都是因为过滤函数放在了serialize函数之后,要是放在序列化之前应该就不会产生这个问题 ?php functio ...

  5. Long, long ago

    Tell me the tales that to me were so dear; 请你给我讲那亲切的故事; Long, long ago; long, long ago.; 多年以前,多年以前; ...

  6. PostGIS 查看表属性(字段、类型、是否为空)

     SELECT                a.attnum,                a.attname AS field,                t.typname AS type ...

  7. 20191010-6 alpha week 1/2 Scrum立会报告+燃尽图 04

    此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/8749] 一.小组情况 队名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 ...

  8. Tensorflow常用函数说明

    1.矩阵操作 1.1矩阵生成 这部分主要将如何生成矩阵,包括全0矩阵,全1矩阵,随机数矩阵,常数矩阵等 sess=tf.InteractiveSession() #x=tf.ones([2,3],tf ...

  9. 献给那些想自建站搭建博客的新人们(实篇)wordpress

    实验材料 windows或者linux(因为我是大学操作系统学的是windows,后来服务器转向了linux,所以我将针对window和linux分别进行开展) xampp(最佳php5.6 在7.1 ...

  10. 【Android - 进阶】之PopupWindow的使用

    创建一个类继承自PopupWindow,编写自定义的PopupWindow类.示例代码如下: import android.app.Activity; import android.graphics. ...