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 ...
随机推荐
- centos7 openssh 7.9.1 升级
由于项目构建时间比较长,近期安全检查发现openssh有漏洞.所以要升级openssh到7.9p1版本.由于ssh用于远程连接,所以要谨慎操作. 1. 依赖安装 OpenSSL版本:目前OpenSSH ...
- PHP 发送get请求
PHP 发送get请求 file_get_contents 方法: $s = file_get_contents("http://apis.map.qq.com/ws/distance/v1 ...
- python:模块0
一.模块是更高级的封装: 容器:数据的封装 函数:语句的封装 类 :方法和属性的封装 模块:模块就是程序,即每个.py文件 二.引入 import 模块名 from 模块名 import xx(函 ...
- python:利用celery分布任务
Celery是一个功能完备即插即用的任务队列.它使得我们不需要考虑复杂的问题,使用非常简单.celery看起来似乎很庞大.celery适用异步处理问题,当发送邮件.或者文件上传, 图像处理等等一些比较 ...
- tcpip协议
几个概念 1.分层(我们使用四层模型更为贴合我们的实际网络) 分层是为什么,其实和公司中职位是一样的,不同职位的人做不同的事情,然后不同职位的人合起来,一起完成了数据传输的事情. 链路层 在这个层面 ...
- Scrapy中的反反爬、logging设置、Request参数及POST请求
常用的反反爬策略 通常防止爬虫被反主要有以下几策略: 动态设置User-Agent(随机切换User-Agent,模拟不同用户的浏览器信息.) 禁用cookies(也就是不启用cookies midd ...
- scrapy的CrawlSpider类
了解CrawlSpider 踏实爬取一般网站的常用spider,其中定义了一些规则(rule)来提供跟进link的方便机制,也许该spider不适合你的目标网站,但是对于大多数情况是可以使用的.因此, ...
- 请停止编写这么多的for循环!
在这篇文章中,我想和你一起回到基础知识,并讨论 Java 中的 for 循环.老实说,我正在为自己写这篇博客文章,因为我也会这样做.从 Java 8 开始,我们不必在 Java 中编写太多 for 循 ...
- day20190915write from memory
jQuery_Chapter02_20190912/ jQuery操作类样式.html <!DOCTYPE html> <html> <head> <meta ...
- 修改TabBarViewController上标题字体颜色
UINavigationController *newNavVc = [[UINavigationController alloc]init]; newNavVc.title = title; new ...