Orleans[NET Core 3.1] 学习笔记(三)( 3 )服务端配置
服务端配置
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:40000和0.0.0.0:50000,但是在成员资格提供程序中发布的值将是172.16.0.42:11111和172.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,这可以使用IClientBuilder和ISiloHostBuilder下的ConfigureApplicationParts扩展方法。该ConfigureApplicationParts方法接受委托Action<IApplicationPartManager>。
以下扩展方法IApplicationPartManager支持常用功能:
AddApplicationPart(assembly)可以使用此扩展方法添加单个装配件。AddFromAppDomain()添加当前加载到中的所有程序集AppDomain。AddFromApplicationBaseDirectory()在当前基本路径中加载并添加所有程序集(请参阅参考资料AppDomain.BaseDirectory)。
通过上述方法添加的程序集可以在其返回类型上使用以下扩展方法进行补充IApplicationPartManagerWithAssemblies:
WithReferences()从添加的零件中添加所有引用的装配。这将立即加载所有传递引用的程序集。程序集加载错误将被忽略。WithCodeGeneration()为添加的零件生成支持代码,并将其添加到零件管理器中。请注意,这要求Microsoft.Orleans.OrleansCodeGenerator安装该软件包,通常称为运行时代码生成。
类型发现要求提供的应用程序部分包括特定属性。建议将构建时代码生成程序包(Microsoft.Orleans.CodeGenerator.MSBuild或Microsoft.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 )服务端配置的更多相关文章
- Kafka学习笔记2--Kafka的服务端配置
下载解压 kafka 后,在 kafka/config 下有 3 个配置文件与主题的生产.消费相关. server.properties--服务端配置 producer.properties--生产端 ...
- Orleans[NET Core 3.1] 学习笔记(三)( 2 )客户端配置
客户端配置 通过一个ClientBuilder和多个补充选项类,以编程方式配置一个用于连接Silo集群并将请求发送至Grain的客户端. 客户端配置示例: var client = new Clien ...
- Orleans[NET Core 3.1] 学习笔记(三)( 1 )本地开发配置
本地开发配置 本地开发和调试的时候,我们可能不需要去关注集群和网络ip端口.所以对于本地开发模式,Orleans给了我们比较简单的配置方式. Silo配置 在本地开发的配置模式下,Orleans会默认 ...
- Orleans[NET Core 3.1] 学习笔记(四)( 1 )创建项目
ClassRoom ClassRoom是一个练手demo,目的是为了能熟悉掌握Orleans的基本知识和使用方法,我会尽量在这个项目中加入更多的知识点,一边学一边练避免我看完文档就忘掉 创建项目 依旧 ...
- Orleans[NET Core 3.1] 学习笔记(二)Hello World
项目结构 开始Orleans之前,我们都知道Orleans主要可以分为俩部分,Host和Client. 所以我们可以创建如下的项目结构: IGrain 一个包含Grain接口的库(.NET Stand ...
- Orleans[NET Core 3.1] 学习笔记(一).NET环境下的分布式应用程序
前言 Orleans是一个跨平台的框架,用于搭建可扩展的分布式应用程序 第一次接触Orleans还是两年前做游戏服务器的时候,用SignalR+Orleans的组合,写起代码来不要太爽. 即将进入20 ...
- Orleans[NET Core 3.1] 学习笔记(四)( 2 )获取Grain的方式
简介 在这一节,我们将介绍如何在Silo和Client中获取Grain及调用Grain Grain获取方式 从Grain内部获取: //根据特定的Key值创建或获取指定的Grain IStudent ...
- Orleans[NET Core 3.1] 学习笔记(四)( 3 )监控Orleans Silo的方式 OrleansDashboard
简介 Orleans用起来的确很爽,更爽的是咱们有能监控它的工具. OrleansDashboard 这个工具是一个可视化的Silo监控工具,Silo和Grain的活跃状态一目了然,各个接口的响应速度 ...
- CAS学习笔记三:SpringBoot自动配置与手动配置过滤器方式集成CAS客户端
本文目标 基于SpringBoot + Maven 分别使用自动配置与手动配置过滤器方式集成CAS客户端. 需要提前搭建 CAS 服务端,参考 https://www.cnblogs.com/hell ...
随机推荐
- LeetCode18. 四数之和
LeetCode18. 四数之和 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值 ...
- nyoj 32-组合数(next_permutation, stack, set)
32-组合数 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:8 submit:11 题目描述: 找出从自然数1.2.... .n(0<n< ...
- python:模块1——标准库简介
一.文档 windows系统:IDLE中打开帮助文档 Tutorial:简单入门 Library Reference:python内置函数和标准库(看不完的,当做字典来查)(此外还有pypi(拍派社区 ...
- mysql 导出 导入
一.导出 windows下 切换到mysql安装目录bin目录下 导出 数据库lz_garden 下的 所有表结构 到d盘并命名为lz_garden.sql: D:\dev\MySQL\MySQL S ...
- 一文带你深入了解 redis 复制技术及主从架构
主从架构可以说是互联网必备的架构了,第一是为了保证服务的高可用,第二是为了实现读写分离,你可能熟悉我们常用的 MySQL 数据库的主从架构,对于我们 redis 来说也不意外,redis 数据库也有各 ...
- Redis报错: StackExchange.Redis.RedisServerException: Endpoint 39.105.22.111:7200 serving hashslot 12448 is not reachable at this point of time.
emmmm……要下班了,简单记录一下. 如果是127.0.0.1:7200报这个错,请移步 https://blog.csdn.net/foreverhot1019/article/details/7 ...
- Makefile使用指南
转载请标明出处:http://blog.csdn.net/shensky711/article/details/52231202 本文出自: [HansChen的博客] 什么是Makefile Mak ...
- C#取视频某一帧图片
首先下载 ffmpeg http://ffmpeg.org/ 注意一定要从官网下载,其他地方可以会有问题 解压后在 bin 目录下找到 ffmpeg.exe 用到的使命是 -i 视频地址 -ss 第几 ...
- Java工作流引擎全局变量的介绍
关键词:工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流bpm工作流系统 java工作流主流框架 自定义工作流引擎 在系统中有很多的地方需要用到表达式的地方,这些 ...
- Vue之组件及组件通信
组件之全局组件 //注意:需要在Vue实例化之前注册全局组件,使用Vue.component("组件名",{ template:`组件模板` }) Vue.component(&q ...