微软分布式云计算框架Orleans(2):容灾与集群(1)
在上一篇:微软分布式云计算框架Orleans(1):Hello World,我们大概了解了Orleans如何运用,当然上一篇的例子可以说是简单且无效的,因为用了Orleans不可能只写一个Hello World吧,Orleans是为分布式和云计算而生的框架,那么今天我们就简单说一说容灾、集群、容灾与集群在Orleans中的运用。
集群是什么?
下面摘抄自百度百科:
集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。
简单的概述一下就是:通过技术手段将多台计算机(服务器)组合成“一台计算器”对外提供计算服务。
容灾是什么?
下面摘抄自百度百科:
容灾系统是指在相隔较远的异地,建立两套或多套功能相同的IT系统,互相之间可以进行健康状态监视和功能切换,当一处系统因意外(如火灾、地震等)停止工作时,整个应用系统可以切换到另一处,使得该系统功能可以继续正常工作。容灾技术是系统的高可用性技术的一个组成部分,容灾系统更加强调处理外界环境对系统的影响,特别是灾难性事件对整个IT节点的影响,提供节点级别的系统恢复功能。
简单的概述一下就是:当一些服务器不可用时可以切换到可用的备用服务器上,提高服务的可用性。
容灾和集群的关系?
个人认为容灾是一种需求,目的,目标,而集群是一种技术手段,使用集群可以提供可用性和可缩放性,那么也解决了容灾的问题,当然方式不仅限于集群镜像站点也能解决容灾问题。就好比IOC和DI的关系一样。
搭建Orleans集群
一个简单的集群
针对上一篇的经验,这一次将“Sample.Interfaces”和“Sample.Implements”层的Grain进行了一些变更,代码如下:


代码逻辑没有变,但更贴近Grain的意图,下面我们看看客户端的调用。

可以看到这一次将手机号码当做key传给了Grain,这样更符合Actor思想,感觉有点像RESTful。
下面来看看需要集群的服务端:
其实在上次的demo基础上不需要改任何代码就可以实现集群了,但为了不拷贝多份程序,我对Server端加载配置文件和设置节点名称做了动态的输入,代码如下:

没有太多的变化,只是可以指定加载哪一个配置文件和启动哪个节点,下面我们重点看看Orleans的配置文件。

最终的配置文件效果如下,我们先运行看一下效果再回头来看配置文件。
首先启动Server.exe,输入“OrleansConfiguration”

在输入节点名称:“node1”,等待启动完成。

接着我们运行一个客户端程序。

进行测试。

Server.exe会出现我处理了一个请求,代表逻辑正常。接着我们在运行一个Server.exe。
配置文件名称为:“OrleansConfiguration”,节点名称为:“node2”。
等待启动完成。

继续切换到client进行测试,将会出现如下结果:

代表请求被分发了,分发的规则由orleans控制,如果你愿意可以再启动多个Server.exe进行集群。可以是node3、node4、nodeN。
接着我们关闭node2(按回车关闭,不要直接关闭窗口)继续切换到Client进行测试。
发现还是可以正常请求。
这样一个简单的集群就完成了。
这种集群是利用了orleans提供的“MembershipTable”方式,这在正式环境是不推荐使用的只推荐在开发时使用,为了简单演示功能本次将以这个方式为主进行简单的说明。
Demo源码:https://github.com/majian159/Samples/tree/master/OrleansSamples/Clusters
配置文件
下面我们再回头看看配置文件。

重点在我圈出的3行代码。
SeedNode
silo(筒仓)地址这个地址是配置了我属于某一个silo,某个silo可以使用我。
集群者需要连接到一个指定的silo中标识为我可以为这个silo提供计算请求。
Networking
silo终结点,供各个宿主(Server)连接到此,一个集群有且只有一个。
也就是集群者需要连接到一个地方的地址。
ProxyingGateway
代理网关,客户端调用的通道。
客户端发送请求的接收通道。
Override
重写,可以根据节点名称进行特定的配置,比如我们的node1才会对Networking和ProxyingGateway配置生效,node2,node3其它节点则不会不会。
关系
可以看出我们第一个运行的node1节点承担了部分计算请求、silo管理的作用,node2则承担了部分计算请求。实际的角色有3个。
1.计算者1
2.计算者2
3.silo管理者
而node1承载着1、3这两个角色,这时候肯定会会有人提出疑问:“这样压力不还没有分担掉吗?如果我的node1挂了就全完了?”
答案是肯定的,这也是为什么orleans不推荐在正式环境使用这种集群方式,后续章节中我们会介绍其它的集群方案,让silo管理者的角色分配给应该负责的人。
请求结构

Next
下一篇会说下如何将soli管理者的角色分担出去,分担的方式orleans提供了:MySQL,SQL Server、Zookeeper、Azure Table。
当然不会一一说明,应为都差不多,可能选择MySQL或SQL Server。
交流方式
QQ群:384413261(RabbitHub)
Email:majian159@live.com
微软分布式云计算框架Orleans(2):容灾与集群(1)的更多相关文章
- 微软分布式云计算框架Orleans(1):Hello World
自从写了RabbitHub框架系列后的一段时间内一直在思索更加轻量简便,分布式高并发的框架(RabbitHub学习成本较高),无意间在网上级联看到了很多新框架:从helios到Akka.NET在到Or ...
- 转:微软分布式云计算框架Orleans
http://www.cnblogs.com/ants/p/5122068.html 一种构建分布式. 高规模(伸缩)的应用程序 微软对奥尔良计划(Project Orleans)云计算框架开源.奥尔 ...
- 微软研究院的分布式云计算框架orleans
orleans Orleans 客户端请求的消息流转以及消息在Silo中再路由机制 Witte 2015-04-29 21:58 阅读:196 评论:0 一种基于Orleans的分布式Id ...
- 搞懂分布式技术5:Zookeeper的配置与集群管理实战
搞懂分布式技术5:Zookeeper的配置与集群管理实战 4.1 配置文件 ZooKeeper安装好之后,在安装目录的conf文件夹下可以找到一个名为“zoo_sample.cfg”的文件,是ZooK ...
- 批量搞机(二):分布式ELK平台、Elasticsearch介绍、Elasticsearch集群安装、ES 插件的安装与使用
一.分布式ELK平台 ELK的介绍: ELK 是什么? Sina.饿了么.携程.华为.美团.freewheel.畅捷通 .新浪微博.大讲台.魅族.IBM...... 这些公司都在使用 ELK!ELK! ...
- 分布式Hbase-0.98.4在Hadoop-2.2.0集群上的部署
fesh个人实践,欢迎经验交流!本文Blog地址:http://www.cnblogs.com/fesh/p/3898991.html Hbase 是Apache Hadoop的数据库,能够对大数据提 ...
- 分布式文档存储数据库之MongoDB分片集群
前文我们聊到了mongodb的副本集以及配置副本集,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13953598.html:今天我们来聊下mongodb的分片 ...
- akka.net与微软分布式框架Orleans
微软分布式框架Orleans开源了 开源地址: https://github.com/dotnet/orleans 昨天编译了一下,这个最新的Orleans安装程序(用github源码编译的) 下载地 ...
- Dubbo分布式服务框架
Dubbo (开源分布式服务框架) 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! Dubbo是 [1] 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高 ...
随机推荐
- innoDB源码分析--缓冲池
最开始学Oracle的时候,有个概念叫SGA和PGA,是非常重要的概念,其实就是内存中的缓冲池.InnoDB的设计类似于Oracle,也会在内存中开辟一片缓冲池.众所周知,CPU的速度和磁盘的IO速度 ...
- CSS实现自定义手型气泡提示
实现自定义的手型气泡提示 <html> <head> <meta charset="utf-8"> <title></titl ...
- 透过byte数组简单分析Java序列化、Kryo、ProtoBuf序列化
序列化在高性能网络编程.分布式系统开发中是举足轻重的之前有用过Java序列化.ProtocolBuffer等,在这篇文章这里中简单分析序列化后的byte数组观察各种序列化的差异与性能,这里主要分析Ja ...
- Linux计时器
Linux中, 系统为每个系统都维护了三种计时器,分别为: 真实计数器, 虚拟计时器以及实用计时器, 一般情况下都使用真实计时器 getitimer()/setitimer() //读取/设置内部计时 ...
- linux下怎么查看ssh的用户登录日志
linux下登录日志在下面的目录里: cd /var/log 查看ssh用户的登录日志: less secure linux日志管理: 1. 日志简介 日志对于安全来说,非常重要,他记录了系统每天发生 ...
- 关于Lucene 3.0升级到Lucene 4.x 备忘
最近,需要对项目进行lucene版本升级.而原来项目时基于lucene 3.0的,很古老的一个版本的了.在老版本中中,我们主要用了几个lucene的东西: 1.查询lucene多目录索引. 2.构建R ...
- java 24 - 8 GUI之创建四则运算计算器(未校验版)
这个是用NetBeans软件制作的,因为这个软件制作GUI任务比较方便 通过拖拽控件生成的窗体:(红色的名称是更改后的控件名称) 拉拽好布局后,要进行的步骤: A:更改想要进行操作的控件的名称(右键控 ...
- 隐写技巧——利用JPEG文件格式隐藏payload
0x00 前言 继续对图片隐写技巧的学习,这次是对JPEG文件格式的学习和理解.同PNG文件的格式对比,JPEG文件相对简单,读取其中隐藏payload的方式大同小异,两者区别在于文件格式不同,可供利 ...
- stl学习(一)优先队列
优先队列priority queue 头文件 #include<queue> 优先队列,也就是原来我们学过的堆,按照自己定义的优先级出队时.默认情况下底层是以Vector实现的heap. ...
- javascript中比较数字大小
做项目,遇到一个让人非常纠结的问题,就是获取的两个值比较,却出现了一位数比二位数大的情况.刚开始还以为哪里写错了,检查了几遍,用ie调了下,意识到是应该是用错了比较方法了.才想起以前也碰到过这种情况的 ...