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 ...
随机推荐
- nyoj 34-韩信点兵(暴力)
34-韩信点兵 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:34 submit:41 题目描述: 相传韩信才智过人,从不直接清点自己军队的人数,只 ...
- nyoj 72-Financial Management (求和 ÷ 12.0)
72-Financial Management 内存限制:64MB 时间限制:3000ms 特判: No 通过数:7 提交数:12 难度:1 题目描述: Larry graduated this ye ...
- 领扣(LeetCode)交替位二进制数 个人题解
给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等. 示例 1: 输入: 5 输出: True 解释: 5的二进制数是: 101 示例 2: 输入: 7 输出 ...
- hopper反汇编工具的逆向伪代码功能并不理想
hopper的逆向代码功能并不如想象中那么好,尤其是在逆向c++代码时.对于从ObjC进入iOS开发又不太清楚运行时的人员来说,hopper可以将反汇编码输出成[obj selector:what]这 ...
- windows 10安装和配置caffe教程 | Install and Configure Caffe on windows 10
本文首发于个人博客https://kezunlin.me/post/1739694c/,欢迎阅读! Install and Configure Caffe on windows 10 Part 1: ...
- ubuntu 16.04上源码编译dlib教程 | compile dlib on ubuntu 16.04
本文首发于个人博客https://kezunlin.me/post/c6ead512/,欢迎阅读! compile dlib on ubuntu 16.04 Series Part 1: compil ...
- 以太网驱动的流程浅析(一)-Ifconfig主要流程【原创】
以太网驱动的流程浅析(一)-Ifconfig主要流程 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及<Lin ...
- PHP数组具有的特性有哪些
PHP 的数组是一种非常强大灵活的数据类型.以下是PHP数组具有的一些特性: 1.可以使用数字或字符串作为数组键值 1 $arr = [1 => 'ok', 'one' => 'hello ...
- Java常见网络操作(URL类,InetAddress类,URLConnection类)
*****************InetAddress********************** InetAddress:用于标识网络上的硬件资源(如,IP,主机名,域名等). 对于Inet ...
- nginx重启后,反向代理失败之问题排查记录
问题与排查过程 本地开发环境的服务器,部署了nginx,nginx上对静态的web前端页面进行了http 80端口代理:然后呢,因为一些原因,服务器重启了,重启服务器后,我去把nginx启动起来,但是 ...