Orleans简单配置

这是Orleans系列文章中的一篇.首篇文章在此

话说曾几何时,我第一次看到xml文件,心中闪过一念想:"这<>是什么鬼?"…用ini或者json多简单易懂,现在发觉作为配置文件,json有赶超xml的趋势.不过xml用多了,也觉得顺眼多了.不觉得<>难看了,反而它能折叠让我觉得组织起来也更方便了.这说明一个道理:不是你上了大学,而是大学上了你.你觉得痛苦到方便的过程,就是这种转变的佐证.所以C++又名C艹.你们细细体会一下.

Orleans完全体,分为Orleans客户端以及Orleans服务端,所以配置也应对与这两方面.再Orleans源码里也可以看出来,如下截图:

其中cluster就是服务端配置,client就是客户端配置.说一说cluster,起个名字就叫cluster说明再实际应用中,单个siloHost不能满足Orleans小组的需求,可以听到Orleans君呐喊说:我天生就是为cluster的.瞬间觉得我举得栗子,单silo的例子是个low X.不过没事..微软还举了个例子,甚至把四个项目(client,host,接口,以及Grain实现)都放在了一个项目中.有空可以去看看.

确实,如果不是为了分布式,Orleans带来的好处就少了许多,单silo带来的好处就是,编写多线程程序的时候,逻辑变清晰了,出错少了.可以这么说,多线程要是没有锁,难度就减少了一大半了.但是分布式,分布式,分布式…就算是不需要锁,分布式一样很难.Orleans的出现让分布式的难度又降低了一大半.

基于编程的配置,在介绍完基于文件的配置之后,各位观众可以自己研究.vs中需要引入OrleansConfiguration.xsd文件才能更好的利用智能提示来配置.这个文件在Orleans源码中有.

客户端配置

客户端的配置非常简单,假设此文件名字叫做client.xml

<ClientConfiguration xmlns="urn:orleans">
<Gateway Address="192.168.1.1" Port="30000"/>
<Gateway Address="192.168.1.2" Port="30000"/>
<Gateway Address="192.168.1.3" Port="30000"/>
</ClientConfiguration>

使用它也很简单:如下图

这些Gateway显然对应着silo提供的端口和网址,通常来说这些关口配置一个就可以了.不过配置多个可以帮助提高稳定性(前提是silo存在).在1.5版本以及之后,Orleans提供了一个非静态的GrainClient类,名字是ClientBuilder.一个客户端可以有多个Client了..每个client可以有不同的 配置文件.选择一下子又多了起来.

以上的配置是基于silo的地址端口固定的情况,但是Orleans支持服务发现,特别是在基于集群的配置的时候.client甚至不知道silo的地址在哪,它只需要查询"服务发现"的服务.这个服务返回现在活着的silo的地址.client连接这些地址.基于集群的客户端配置是如下格式:

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

这样可以使用sql server作为服务发现的服务.并不是随便的sql server都可以作为服务发现用的.在源代码中官方提供了一些sql脚本.通过这个sql脚本构建好数据库,就可以用来服务发现了.

用数据库作为服务发现是很好的选择,不过我没有采用它,我是基于以下考虑的:数据库还要作为数据持久化设备,还要作为event sourcing.还要钱…我采用了更为轻量化的方案.这个不是本文的重点.关于集群的配置方法我会在以后的文章中举个栗子.现在文章的目的是为了引入持久化.所以就暂时按住不表.且待我接着说存储的配置.好了客户端的基本配置就结束了.(构建集群的配置会再后边文章详细说说,这里先稍微引入一下)

说说重头戏,服务端配置,就像上边截图中列示的一样,服务端配置就是cluster的配置!!!哈哈,怕了吗?

为了测试和开发,可以如下配置本地的silo

<OrleansConfiguration xmlns="urn:orleans">
<Globals>
<SeedNode Address="localhost" Port="11111" />
</Globals>
<Defaults>
<Networking Address="localhost" Port="11111" />
<ProxyingGateway Address="localhost" Port="30000" />
</Defaults>
</OrleansConfiguration>

Orleans简单配置---服务端

这个世界有太多太多的选择了,大部分时候选择太多才是我苦恼的主要原因,为了某个组织方式,要和自己讨论,好不容易说服自己,又要和其他人讨论,到最后一般被否决(黑脸).不管怎么说,选择困难是人类的通病,没得选,大部分时候反而更能提高效率.所以说,这让我们明白一个道理:少读点书,让自己没得选,生活会更幸福. 当你看到不明白的地方,皱着眉头思索着,仿佛自己都能听到自己脑袋咔咔作响,感觉这就是你脑结构改变的过程.其实这是错觉,本质上还是因为犯愁.选择困难症又犯了,大脑不知道该唤醒那块区域…

以上这一段更本文有很大关系.

服务端配置主要是有两个方面,由于silo要与其他silo之间进行联系,组成一个集群,而且它还需要和client通信,所以它需要配置两个端口.一个用于silo间的通信,一个用于与client的通信.服务端需要配置关于集群的各个信息和关于自己节点的各个信息.所以总体来说服务端配置长成这样子

分两个节:Globals节和Defaults节.Globals里面都是关于集群的配置,而Defaults里面都是关于自己节点的配置.

既然说到集群,就不得不夸夸Orleans了.Orleans的集群在客户端看来,就仿佛是一个silo.而且对于silo内部运行的Grain类实例看来,也仿佛是一个silo.这样做的好处就是,你开发的时候使用单例silo进行开发,然后通过配置服务发现,配置持久化,以及把silo多复制几份,就可以做到分布式了.背后太多的工作都是Orleans完成的.同时Orleans还提供了检测机制,用于探测集群内部崩溃,掉线等原因而无法链接到的silo,以及新加入的silo等等.这些集群节点的变动对于Grain实例以及客户端来说,大部分情况都无需关心(仍需要关心小部分情况,比如所有节点都崩溃等等).

分布式程序中,一致性是一个重要的问题,Orleans集群内部维持一个MembershipTable(成员关系表),所有的集群节点都需要维持自己的成员关系表.所以在silo启动的时候会有如下记录:

这个表在集群的行为上发挥着重要的作用,这个按下不表,说一说山东好汉塞喽(silo).

要知道塞喽在Orleans中是一个实体类,但是集群不是,赛喽不知道集群的存在,它只知道按照配置文件与其他silo互动,这些所有的互动行为的结果,让人感觉它们合体了,是一个整体,这个整体有一个新的名字是梁山聚义堂.所以严格意义上来说,集群内部的silo中的Globals节点的配置可以不同.因为它就是告诉silo如何和其他silo进行互动的.但是我想没有人这么干(配置文件不相同).这是给自己添堵.

一个简单的服务端配置,如下图

可以看出来,这个节点本质上就是集群的主节点.membershipTable需要找一个地方存储,默认的是内存保存这个成员关系表,怎么看出来的?如下图

其中的GrainBasedMembershipTable就是Orleans用一个内置的Grain类管理了成员关系表.

之前说过成员关系表最终是要在各个silo之间统一的.所以在一个集群中如果有主silo,那么所有非主silo的成员关系表,就需要和主silo的统一.在从silo的日志中可以看到这样的记录

经过以上配置,一个简单的silo集群主silo就形成了.

现在我把从silo的配置文件也一起贴出来,大家看看变化,

虽然这个集群是可以工作的,但是不符合稳定性,而且灵活性也不够.因为如果主silo挂了,整个集群就挂了.在集群配置的时候,主要考虑以哪里的成员关系表为标准在集群内进行统一.正如前面说的,可以用数据库存储成员关系表.这样的配置文件就需要有所变化.至于如何变化,会再后续的文章中详细说明,比较集群的配置是Orleans的一项重要内容.所以在此暂且按下不表,说一说,引入配置的原因,那就是介绍如何持久化grain数据.

Orleans简单配置的更多相关文章

  1. 小丁带你走进git世界一-git简单配置

    小丁带你走进git世界一-git简单配置 1.github的简单配置 配置提交代码的信息,例如是谁提交的代码之类的. git config  –global user.name BattleHeaer ...

  2. 以实际的WebGIS例子探讨Nginx的简单配置

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 以实际项目中的一个例子来详细讲解Nginx中的一般配置,其中涉 ...

  3. CentOS 7.0 使用 yum 安装 MariaDB 与 MariaDB 的简单配置

    1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB,两条命令都可以 systemctl sta ...

  4. ssm简单配置

    MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架. MyBatis 摒除了大部分的JDBC代码.手工设置参数和结果集重获. MyBatis 只使用简单的XML 和注解来配置和映射 ...

  5. 安装MariaDB和简单配置

    1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB systemctl start maria ...

  6. BIND的进程一:DNS简单配置与的主从配置

    DNS的简单配置和DNS的主从配置   摘要:DNS(Domain-Name Server) ,DNS的服务起到的作用就是名称解析,在网络通讯来说计算机与计算机是通过IP地址相互通信的, 当是IP地址 ...

  7. 转-squid介绍及其简单配置

    本文原始出处:http://linuxme.blog.51cto.com/1850814/372960 1.Squid是什么? Squid中文权威指南:http://zyan.cc/book/squi ...

  8. Linux中vim的简单配置

    本文主要分享Linux中vim的简单配置 ★配置文件的位置     在目录/etc.下面,有个名为vimrc的文件,这就是系统中公共的vim配置文件,对所有用户都开放.而在每个用户的主目录下,都可以自 ...

  9. CCNA网络工程师学习进程(6)vlan相关协议的配置与路由器简单配置介绍

        前面已经介绍了大部分与vlan技术相关的交换机的协议的配置,更深层次的还有STP协议和以太网端口聚合技术,接着还会简单介绍一下路由器的基本应用.     (1)STP(Spanning-tre ...

随机推荐

  1. Chrome浏览器扩展开发系列之九:Chrome浏览器的chrome.alarms.* API

    Chrome浏览器扩展程序通过chrome.alarms.* API,可以制定计划周期性地执行代码,或在指定时间执行代码. 要使用chrome.alarms.* API,首先需要在manifest.j ...

  2. 谈谈tableView的重要属性内边距

    全屏穿透效果需要做到两点 tableView的可视范围占据整个父控件(或者屏幕)--设置contentsize滚动范围. 所有的cell都可以被看到,也就是说tableView中的cell不会被导航栏 ...

  3. IT行业歧视40岁以上人群为找工作还要谎报年龄[转]

    IT行业歧视40岁以上人群为找工作还要谎报年龄(这样不好) http://www.aliyun.com/zixun/content/2_6_616161.html [赛迪网讯]4月5日消息,许多40多 ...

  4. Aspose.words 书签定位

    1. 简介 Aspose.words 可以在不使用 Microsoft.Word 的情况下生成.修改.转换.打印文档.不依赖office组件,这一点给我们提供了极大的便利性,可以简单的引入 DLL(D ...

  5. UDP和多线程服务器

    UDP: UDP是数据报文传输协议,这个传输协议比较野蛮,发送端不需要理会接收端是否存在,直接就发送数据,不会像TCP协议一样建立连接.如果接收端不存在的话,发送的数据就会丢失,UDP协议不会去理会数 ...

  6. Java字符串格式化记录

    最近打log的时候用到了字符串的格式化. Java中String格式化和C语言的很类似.把情况都列出来,以后好查询. public static void main(String[] args) { ...

  7. nyoj_83:迷宫寻宝(二)(计算几何)

    题目链接 枚举所有墙的2n个端点与宝物的位置作为一条线段(墙的端点必定与边界重合), 求出与之相交的最少线段数(判断线段相交时用跨立实验的方法),+1即为结果. #include<bits/st ...

  8. JDK+Tomcat+Zookeeper+DubboAdmin安装教程

    JDK+Tomcat+Zookeeper+DubboAdmin安装教程 1. 安装内容: JDK 1.8.131 Tomcat 7.0.77 Zookeeper 3.4.9 Dubbo admin 2 ...

  9. Pivot Table系列之展开/折叠用法 (Expand/Collapse)

    1.遇到的问题: PivotTable中本来已经展开的维度的Hierarchy(层次结构),在切换切片器的数据集时,层次结构就折叠在一起了:没有按照之前的方式展开显示. 2.在做成PivotTable ...

  10. MyBatis 框架的搭建和配置

    MyBatis是支持定制化SQL.存储过程以及高级映射的优秀持久层框架.MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集.MyBatis可以对配置和原生Map使用简单的xml或 ...