Orleans的集群构建

 听闻一周前,微软公布了.net core2.0,以及各种各样的其他core2.0.大家都很兴奋.微妈的诚意真是满满的.这次开源势头让我感觉到了微妈的技术实力之雄厚.我在这里祝福C#越来越好.细心的人似乎发现Orleans在github中是和net core分在一起的.Orleans的2.0何时发布呀…

现在我们面对的Orleans1.5(github上是1.6)已经是一个成熟的框架了.涉及到分布式的方方面面,我突然觉得我原来暂定的8篇文章都介绍不完全.我尽量介绍完整,至少让大家能入门,后边的修行就看大家自己的努力了.如果读者中有人能够和我分享,与我共同讨论我也是非常欢迎的.我的联系方式在第一篇文章中这里就不再复述了.

我现在利用<Orleans简单配置>文章中介绍的内容,配置一个可以分布式的silo,观察它们的行为.这里只介绍2种,其余的配置方式往读者自己研究.

我先说利用sql server数据库作为"服务自我发现"的服务

还是跟以前一样,我一步一步来.

基于SQL server的集群步骤

  1. 回顾之前的文章中在集群中客户端配置应该是这个模样:

<ClientConfiguration xmlns="urn:orleans"><SystemStore SystemStoreType="SqlServer"DeploymentId="target deployment ID"DataConnectionString="SQL connection string"/>
</ClientConfiguration>

 

这里解释一下,还记得持久化中配置文件的主体是什么吗?对了是<StorageProviders>节.这个节的内容定义了Orleans在持久化时,要利用的存储中间件的各种参数.

而我们这里要利用的是<SystemStore>,它定义了与"系统"相关的变量应该存储在哪里.我只要定义好<SystemStore>后Orleans就会自动使用服务发现.

由于Orleans使用MembershipTable 来控制silo与silo的关系变化(谁加入了集群,谁离开了集群等等)如果配置好了<SystemStore>,这个MembershipTable就会存储在数据库中.所有的silo都要以数据库中的成员关系表为标准.这个表长成这个样子

其中有一个字段就是silo的地址.因此silo可以发现其他的silo,它们可以构成一个集群,而client可以发现集群内所有的silo.从而与集群互动.

  1. 按照以上讨论,我修改了一下配置文件.如下.

此处client也需要配置,因为client也需要读取成员关系表,以便知道所有silo的地址和状态.为了使client可以利用<SystemStore>必须在client里引用OrleansSQLUtils以及System.Data.SqlClient的包,

  1. 运行一下,就会有如下截图

  2. 再运行一个.找到host.exe,我们双击后再运行一个,会看到错误,这是因为silo配置文件中指明了一些端口,这些端口已经被第一个silo占用了,所以我修改一些host的配置文件,再次运行,会得到如下截图

    我们看到先启动的silo发现了新加入的silo.读者可以再次实验silo离开后的情况.

  3. 此时我让client运行,就会得到如下截图

    可以看到client发送的消息均衡负载地再两个silo内执行.

     

至此一个基于sql server的简单silo集群就搭建完毕…这个集群虽然简单,但是满足所有高级的特性,扩展性和稳定性双优.是居家旅行的良好解决方案.只要有一个silo存活,这个集群就不会倒..

 

基于consul的集群

下文将介绍一下,另一个轻量级的集群实现.这个实现的步骤来自于官方教程.我再刚开始学习Orleans的时候,曾经使用这个步骤构建过集群.因为这个步骤是官方教程里一个最为详细的步骤,所以我就照做了.

1.    创建一个文件夹用来放置consul 比如 c:\consul.

2.    创建一个子文件夹放置数据 比如 c:\consul\data(consul不会自己创建.)

3.    下载并解压consul到c:\consul

4.    打开cmd,转至 c:\consul

5.    运行 Consul.exe agent -server -bootstrap -data-dir "C:\Consul\Data" -client=0.0.0.0

agent 指示consul新运行承载服务的代理进程,如果缺少这个参数 consul进程就尝试使用RPC来配置一个正在运行的代理进程

-server 指明这个代理进程是服务而不是client(一个consul client承载着所有的服务和数据,但是它没有权利投票,也没有可能成为consul集群领导)

-bootstrap consul集群中的第一个节点必须是有这个参数,它同时也是consul集群的领导.(单实例consule,,无所谓了)

-data-dir [path] 指明数据存储地址

-client=0.0.0.0 指明consule的服务地址

还有很多其他的consule参数.它们可以用json文件来配置,阅读consul文章来详细了解

确保consul已经运行了,请在浏览器里输入以下网址http://localhost:8500/v1/catalog/services 看看

6. 配置服务器

<OrleansConfiguration xmlns="urn:orleans"><Globals><SystemStore SystemStoreType="None" DataConnectionString="http://localhost:8500" DeploymentId="MyOrleansDeployment" /></Globals><Defaults><Networking Address="localhost" Port="22222" /><ProxyingGateway Address="localhost" Port="30000" /></Defaults>  
</OrleansConfiguration>


并在host项目中的program.cs,手动增加以下内容

 silohost.Config.Globals.LivenessType = GlobalConfiguration.LivenessProviderType.Custom;silohost.Config.Globals.MembershipTableAssembly = "OrleansConsulUtils";silohost.Config.Globals.ReminderServiceType = GlobalConfiguration.ReminderServiceProviderType.Disabled;silohost.InitializeOrleansSilo();
 

 

 

官方解释说:    Consul的xml配置文件,Orleans在解析的时候有点小bug所以要在代码中控制一下.我在搭配的时候就采用了这个,但是我并没有验证此bug是否依然存在(官方教程是1.2的,我写的时候已经是1.5了).

好了这样一个基于consul的集群就构建好了.

经过以上的文章介绍,Orleans主要方面都或多或少的涉及到了,我写这系列文章的目的也快要达到了.除去一个方面,那就是eventSourcing.由于EventSourcinig是个复杂的事情,我需要组织语言,而且最近家里私事很多.也许下一篇文章放出的时候会很晚.因为接下来我没有太多时间.

相关文章: 

  • .NET的Actor模型:Orleans

  • 微软分布式云计算框架Orleans(1):Hello World

  • 微软分布式云计算框架Orleans(2):容灾与集群(1)

  • Aaron Stannard谈Akka.NET 1.1

  • 使用Akka.net开发第一个分布式应用

  • Orleans入门例子

  • Orleans例子再进一步

  • Orleans稍微复杂的例子—互动

  • Orleans简单配置

  • Orleans配置---持久化

  • Orleans—一些概念

原文地址:http://www.cnblogs.com/gaopang/p/7419732.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇编语言(二十二)之统计减去奇数的个数

输入一个正数&#xff0c;该数减去递增奇数&#xff08;从1开始&#xff09;直至小于等于零为止&#xff0c;计算该数减去奇数的个数 程序运行&#xff1a; 代码&#xff1a; datas segmentNUM dw 17ANS dw 0NUM_string db 0ffh, 0 ,100 dup(?)inputNUM …

.NET Core 在程序集中集成Razor视图

前言 有时候&#xff0c;我们在开发一个程序集供其他项目引用的时候&#xff0c;可能需要对外输出一些HTML的结构数据。 还有一些情况我们可能开发的是一个中间件&#xff0c;这个中间件需要提供一些界面来对外展示数据或者是内部的一些程序的运行信息&#xff0c;这个时候我…

开学一月,可以自己玩自己做的游戏了!!!

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。”《趣味小游戏》的书已经讲完了&#xff0c;国庆假期给同学们布置了小游戏项目的任务&#xff0c;开学时检查了下&#xff0c;大部分做的还是挺不错的。有的同学超常发挥想象&#xff0…

汇编语言(二十三)之求一个数的补数

给定一个数&#xff0c;求该数的补数 程序运行&#xff1a; 代码&#xff1a; datas segmentNUM DB 12H,34H,56H,78H,9AH,0BCH,23H,45HDB 67H,89H,0DEH,13H,24H,35H,46H,57HN DB $-NUMoutputNUM db "orignal data NUM$"outputNUMC d…

ASP.NET Core 防止跨站请求伪造(XSRF\/CSRF)攻击

什么是反伪造攻击? 跨站点请求伪造&#xff08;也称为XSRF或CSRF&#xff0c;发音为see-surf&#xff09;是对Web托管应用程序的攻击&#xff0c;因为恶意网站可能会影响客户端浏览器和浏览器信任网站之间的交互。这种攻击是完全有可能的&#xff0c;因为Web浏览器会自动在每…

汇编语言(二十四)之输出n行星号

输入一个数n&#xff0c;输出n行星号 程序运行&#xff1a; 代码&#xff1a; datas segmentline_number_max_len db 0ffhline_number db 0, 100h dup(?)input_line_number_prompt db input line number:$output db 0dh,0…

家的味道,家的感觉!!!

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。”国庆期间回了一趟家&#xff0c;上次从家里出来还是2020年正月的时候&#xff0c;因为疫情的原因&#xff0c;21年过年没有回去……早早的就买下回家的票&#xff0c;以前回家一趟&…

POJ3889-Fractal Streets【分形,递归,分治】

正题 题目链接&#xff1a;http://poj.org/problem?id3889 大意 第一级城市为图一&#xff0c;然后每次扩展一级就将原本的城市复制3份&#xff0c;一份放上面&#xff0c;一份正旋90’放左上&#xff0c;一份逆序90’放左边&#xff0c;最后将4份的头和尾连起来&#xff0c;…

.NET Core 2将Visual Basic带到了Linux和macOS平台

Microsoft已经愈加接近将Visual Basic划为.NET Core平台上的一等公民。作为.NET Core 2发行版的一部分&#xff0c;VB开发者现在可以编写针对.NET Standard 2.0的控制台应用程序和类库&#xff0c;并且可以兼容多个平台。这就意味着运行在Windows上的可执行文件或者类库也能够运…

汇编语言(二十五)之成绩分段统计

已知一个班的成绩&#xff0c;进行60,70,80,90,100分段统计 程序运行&#xff1a; 代码&#xff1a; datas segmentstudents_number dw 10students dw 76,69,84,90,73,88,99,63,100,80s6 dw 0hs7 dw 0hs8 dw 0hs9 dw 0hs10 dw 0houtput…

感动哭了……

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。”一大早就好多人送祝福&#xff0c;感动不已~下课看手机之后&#xff0c;看到手机上有条消息&#xff0c;是认识好多年好多年的大姐发的&#xff1a;“小穆&#xff0c;今天你生日&…

汇编语言(二十六)之自然数求和

输入一个数N&#xff0c;对1到N的所有自然数求和 程序运行&#xff1a; 代码&#xff1a; datas segmentN_string_max_length db 0ffhN_string db 0, 100h dup(?)N dw 0 sum dd 0 input db …

同学们,看看这里吧!!!

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。恶”早上一进班&#xff0c;发现班内少了好几个学生&#xff0c;一想肯定是这几个熊孩子又违纪被王老师喊去了…自从这些孩子入学以来&#xff0c;大事小事不断的去犯&#xff0c;尤其是…

Oleans集群之Consul再解释

由于上周发文章的时候,我正要打算出门,所以就把写好的全部发出去了,有点仓促,虽然写了主线,但是这里还是需要再次解释一下. 我看到Orleans已经升级到了1.5.1了,(nuget上的官方发布),于是我就把Orleans升级到了1.5.1,顺便把net更改到了4.7版本. 再升级的时候,注意有几个依赖库…

别在被骗了!!!!!!

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。”今天&#xff0c;在身边又发生了一起诈骗案&#xff0c;被骗金额达5000余元在&#xff0c;就像佟老师说的一样&#xff0c;骗子可是一点人性都没有……大致的看了看具体细节&#xff0…

汇编语言(二十七)之身份证最后一位求和校验

输入身份证前十七位数字&#xff0c;输入18位身份证 程序运行&#xff1a; 代码&#xff1a; datas segmentw db 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2y db 1,0,X,9,8,7,6,5,4,3,2ID_max_length db 18ID db 0, 19 dup(?)input …

C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码

我记得,之前在写安卓方面的文章的时候,有人就问过我.Xamarin.Android为什么打包出来这么大?随便一个HelloWord就20-30MB? 嗯..今天我们就来解决这个问题.. 我们先从指定一个应用程序图标开始.. 1.指定应用程序图标 我们直接右键Android项目,属性.选择安卓清单.如下: 在Ap…

vue中设置子组件的点击事件不影响父组件的点击事件

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。”今天分享个技术块儿。在做项目的过程中&#xff0c;遇到了个问题&#xff0c;简单的描述一下&#xff1a;有一个card卡片&#xff0c;上面绑定了个点击事件&#xff0c;点击card卡片&a…

一个还算简单的微信消息SDK(基于.Net Standard 2.0)

虽然微信公众号出现了好久&#xff0c;不过在SDK这件事情上感觉并没有多少人把它当成一个有技术含量的事情来做&#xff0c;很多SDK做的事情就是一个代码的堆叠&#xff0c;当然也可能写的好的并没有开源出来。所以在某个翻遍github而无所获的下午我写了一个基础的基于事件的微…

汇编语言(二十八)之统计单词

输入一行字符串&#xff0c;统计单词SUN出现的个数 程序运行&#xff1a; 代码&#xff1a; datas segmentENG_max_length db 0ffhENG_length db 0ENG db 100h dup(?)eng_len dw 0SUN db SUNsun_len dw $-SUNcount dw 0…