消息中间件的集群技术
美白针
美白针价格
http://www.shzhenai.com/Activity/201103/MeiBaiZhen/
消息中间件(
Message Oriented Middleware
)
是一类特定的中间件,
它利用高效可靠的消息传递机制进行平台无关的数据交流,
并基
于数据通信来进行分布式系统的集成。
通过提供消息传递和消息排队模型,
它可在分布环境
下扩展进程间的通信,并支持多通信协议、语言、应用程序、硬件和软件平台。目前流行的
MOM
中间件产品有
IBM
的
MQSeries
、
BEA
的
MessageQ
等。
若干个松耦合的节点构成的集
合就是集群。
集群把单个消息中间件扩展到消息中间件的环境,
构成的消息中间件集群可以
为客户提供分布式的消息服务。
集群中的每个节点都是一个单独的
服务器
,运行自己的服务。节点之间可以相互通信,
而在客户看来,它好像只是在与一个单独的系统交互。
集群提供了单个服务器无法提供的优点:
(1)
缩短系统由于单个服务器失效而导致的停工时间;
(2)
保证消息服务器的可用性;
(3)
庞大的客户数量;
(4)
通过负载平衡提高系统的效率。
1
集群的实现
集群由配置管理来创建,在集群里,有一个以上的服务器实例在运行,并这些实例可以
运行在相同的主机,或是分布在
网络
上。集群的实现方式采用主
/
从方式。这种集群方式易
于理解。
"
主
"
和
"
从
"
都是相对消息而言的。所谓
"
主
"
是指某个服务器是某几类消息发布用的
服务器;
"
从
"
是指该服务器对某几类消息起着路由转发的作用,
服务器本身也作为这些消息
的消费者。我们通过发布
/
订阅方式解决集群的一个重要问题:发现和查询,即如何查找集
群的其它节点并从它们访问更深的节点信息,
以及如何保持这些信息是最新的。
服务器节点
在消息中存储它们的集群信息,该信息用
XML
来描述,其他节点可以订阅这个数据。如果
需要的话,一个服务器可以作为
"
命名服务
"
运行,维护所有可用服务器实例的信息。
在后面的部分,服务器实例,服务器节点或节点这几个术语可以互换。
1.1
集群涉及到的问题
(1)
可扩展性
一个主服务器实例可以有多个从服务器实例,
形成多个特定的消息域。
这些从服务器还
可以有自己的从服务器。
这样可以把消息分发给数量近乎无限的客户。
服务器节点可以是某
些消息的主服务器,同时又是另一些消息的从服务器。
图
1
可扩展性:集群可以根据客户的数量
"
无限
"
扩展
我们用
"
层
"
来表示从节点到主节点的距离。这种做法类似网络时间协议(
NTP
)
。
0
层表示主
节点本身,
1
层是第一层从节点到主节点的距离。图
1
中
S4
到
S1
的距离为
2
层。
(2)
可用性(失效恢复)
如果主服务器发生故障,
从服务器可以转变到主服务器的角色。
有
3
种不同的故障情况需要
考虑:
1)
主节点故障:譬如图
1
中的
S1
发生故障,可能会选择
S3
成为新的主节点。
2)
从节点故障:一个从节点发生故障,它的从节点需要重新安排自己。譬如,图
1
中,如
果
S3
发生了故障,
S4
需要知道当前集群
的情况,然后选择一个低负载的或层数少的节点重新连接。
3)
客户重连:
客户失去了与一个服务器实例的连接,
需要重新寻找另一个服务器进行连接。
(3)
基于消息域的逻辑分类一个服务器实例可以是某些消息的主节点
(
譬如,
证券交易消息
)
,
同时又是其他消息
(
譬如,空中交通控制或体育新闻
)
的从节点,我们把根据消息形成的主
/
从关系称之为集群消息域。
客户则不需要知道哪个服务器是主服务器,
只需连接到集群中的
一个服务器实例,就可以获得所有信息。
(4)
负载平衡
:
集群允许一个特定消息域有一个以上的主节点。
所有主节点是这些消息的映像
节点。发布的消息可以到达所有的主
节点。订阅的消息通过某种负载平衡算法获得。
1.2
实
现
概
述
美
白
针
美
白
针
价
格
http://www.shzhenai.com/Activity/201103/MeiBaiZhen/
1.2.1
实现
3
种逻辑映射功能:
(1)
查询消息的主节点
要把消息映射到某个主节点。
理论上来说可以根据消息的任何信息做出映射。
我们采用比较
简单的基于元素
KEY
属性的方法:在
<KEY>
标签里使用一个属性
domain
,譬如:
<KEY domain= "
证券交易
"/>
基于
domain
的方法把域名映射到集群节点
ID
。见表
1
。
(2)
从可用的主节点列表中选择一个(负载平衡)如果在
(1)
中找到一个以上的主节点,就需
要通过负载平衡算法从中选择一个。
我们使用循环法作为负载平衡逻辑。
这需要知道某个集
群节点当前的负载情况。表
1
给出了节点与它的负载描述。
(3)
把节点
ID
映射到真正的服务器实例确定节点后,
就需要知道如何到达实际的服务器。
我
们通过它的集群
ID
得到通信要使用的
CORBA IOR
、
XmlRpcURL
、
RMI
注册项或是
Socket
。表
1
给出了这种映射
1.2.2
实现集群的特性
(1)
多个服务器实例
如果多个服务器实例在运行,每个消息只分配一个主服务器(如果没有负载平
衡)。不同的服务器像客户一样互相
登录到对方,对不以它们为主节点的消息,它们的作用就是从节点。
(2)
服务器实例之间的连接
服务器之间的登录采用
"lazy"
模式。客户第一次请求不是以本地服务器为主节
点的消息时,服务器才登录到主节点,订阅该消息。以后,这类消息就缓存在
本地,随后的客户请求就可以在本地被处理。因为从节点向主节点订阅了该消
息,缓存会不断更新。可以调整消息的过期时间来清除缓存的消息。
(3)
对发布的消息进行路由
如果消息从数据源发布到从节点,
消息直接被路由到主节点
(也可以是从节点,
该再把消息转发到层为
0
的真正的主节点)。如果主节点目前不可用,该消息
进入队列等待,直至主节点登录。
(4)
查询主节点的接口
提供接口,使得能够定义不同的逻辑,来标识集群主节点的
id
。缺省实现用元
素
KEY
的属性
domain
进行映射。
(5)
负载平衡逻辑的接口
提供负载平衡逻辑的接口。通过接口可以添加新的负载平衡逻辑。缺省使用循
环法。
(6)
缺省的主节点
服务器节点是它直接相连的客户缺省的主节点。如果客户发布
/
订阅,没有为消
息说明域,消息就在本地服务器处理(就好像没有集群存在)。如果服务器配
置的元素
MASTER
的属性
acceptDefault
设置为
"false"
,服务器就搜索另一个
接收缺省消息的节点。
如果节点配置的元素
MASTER
的属性
acceptOtherDefault
设置为
"true"
,它就可以接收来自其他节点的缺省域的消息。
(7)
未知主服务器
如果节点收到消息但找不到主服务器,消息进入队列,等待主节点。如果稍后
主服务器出现,消息就被发送出去。
(8)
客户转交
如果一个节点停止工作,它能够通知它的客户并且把转交节点的地址传递给它
们。
美白针
美白针价格
http://www.shzhenai.com/Activity/201103/MeiBaiZhen/
(9) PtP
消息
为了允许全局传递,我们引入一个唯一命名方案,基于
URL
命名语法,可以寻
址任意节点上的任意客户。但是集群只用于发布
/
订阅消息,
PtP
消息仅使用集
群的节点作为跳来找到最后的目标。
(10)
相同域的多个主节点
如果一个域有多个节点处于主节点模式,有两种方式处理发布的消息:把消息
发布给所有的主服务器;
用负载平衡算法处理
get()
或
subscribe()
访问的消息,
缺省实现是循环算法。
(11)
节点之间的连接状态
服务器节点之间的连接状态分为
3
种状态:
1)
已登录:连接可用;
2)
轮询:有其他节点的地址,并且正在轮询这个节点;
3)
不允许:知道某个节点,但是不允许使用这个节点。
2
结束语
美白针
美白针价格
http://www.shzhenai.com/Activity/201103/MeiBaiZhen/
消息中间件是为异构的分布式环境下的应用程序提供可靠的数据通信服务的,
它本身也可以采用分布式的架构。因此,通过集群来管理消息中间件是必然的
发展趋势。实现集群技术,系统能够提供更为可靠、更为灵活的服务。集群不
可能单纯在程序中实现,它与配置管理密不可分,因此本文着重于对集群进行
描述。描述使用可扩展性强的
XML
语言,因为这样可以简化代码实现
.
原文地址:http://www.cnblogs.com/chengzihu/p/3811094.html