欢迎来到天天文库
浏览记录
ID:22372943
大小:85.00 KB
页数:15页
时间:2018-10-28
《websphere mq v6集群的负载均衡新功能》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、WebsphereMQv6集群的负载均衡新功能 1.Q集群负载均衡的增强 最近发布的Qv6在集群(Cluster)方面出现了一些令人欣喜的变化,虽然仍不及我们预期中的理想,但我个人认为对基于MQ的解决方案的设计和部署还是具有相当大的积极的作用。 在这些变化中,最令人关注的是负载均衡(Q集群环境下负载均衡的实现方式 。 在Q集群中,成员队列管理器可以创建本地队列,并将其在集群中共享,集群中的其他成员队列管理器不需要任何额外的配置操作,就可以像访问本地队列一样向该队列放入(PUT)消息;每个成员队列管理器都可以创建与之
2、同名的共享队列,于是该共享队列在集群中就拥有了多个副本,所有的副本将作为一个虚拟的整体;对访问者(调用MQPUT的应用)而言,它们就是一个队列,应用不需要关心如下细节: 物理上有多少队副本; 队列副本部署的物理列位置; 消息实际发送到哪个队列副本。 所有这些细节问题由集群负责处理,由此实现了集群的负载均衡功能。 然而,在V6之前,集群的负载均衡功能在实现上有若干的限制,其中我们最常碰到的是如下两点: 缺省的负载分配方式是平均主义――轮循(RoundRobin),集群将同等对待所有的队列副本;要想实现更灵活的分配策
3、略就得依靠开发人员定制自己的用户出口(UserExit)程序①。 负载分配的算法中有一项重要的例外――本地优先原则。一个消息进入到集群中会经由两种途径:1)应用程序连接到集群中的某一成员队列管理器,调用MQAPI将消息写入共享队列;2)集群外部的队列管理器连接到集群中的某一成员队列管理器,并将消息由通道发送过来。无论是哪种途径,消息到达的第一个队列管理器,对该消息都具有特别的意义(我喜欢将该队列管理器称之为消息的着陆点)。本地优先原则是指如果着陆点上拥有一个目标共享队列的副本,那么消息将永远不会被路由到其它远程队列管理器,
4、只能进入着陆点本地的共享队列副本。也许可以为这样的实现方式想出一百条理由,但我们无法回避的是,它造成了这样一个结果:如果要从集群的外部发送消息到集群,并希望消息在集群的成员间合理的分配,那么集群中作为与外部环境接口点的队列管理器上就不能存在任何共享队列的副本,否则所有消息将积压在接口点队列管理器上,使集群的负载均衡功能英雄无用武之地。通常的解决方案是为集群配置至少一个特殊的队列管理器,通常称为网关(Gateanageralias)。 即便Q具有上述的局限,但瑕不掩瑜,在大规模集群方面,消息中间件(MOM)业内还是少有能出其
5、右者。这也许是在消息中间件技术不算悠久的发展历程上,无法回避的成长的阵痛。毕竟,MQ还是为我们提供了解决问题的途径,虽然牺牲了些许的系统部署、管理的复杂度,手法也显的不是那么的优雅。 是否优先使用本地副本?是否采用轮循的分配策略?,在这个问题上,使用者应当具有自由的裁量权利,并拥有便捷的设置手段。我们终于在Qv6里找回了那些被剥夺了的选择的自由。 在Qv6中,使用者可以根据集群成员节点的实际处理能力,合理、灵活的分配工作负载,轮循(RoundRobin)顺理成章的成为缺省的分发策略。本地共享队列副本优先的策略也依然是缺省
6、的设置,但用户可以非常方便的修改策略,使集群中的其它共享队列副本可以和本地副本一样参与到消息分发的机制当中。当然,用户出口(UserExit)程序仍然被支持,用户可以使用该机制实现更加个性化的负载均衡策略。② 为支持上述新增功能,Q为队列、通道、队列管理器等对象增加了若干的参数。对象参数命解释缺省值队列(Queues)CLGR:参考队列管理器的CLGRCLRUC最大outbound集群通道,取值:1~999,999,999。999,999,999通道(Channels)CL1、QM2、QM3,每个成员上都拥有一个共享队列Q
7、1的副本。另有一个队列管理器QM4,QM4和集群CL1中的QM1之间具有收发通道。 首先,依照上图配置集群的基本环境(具体的配置方法可以参考Q产品文档《QueueManagerClusters》和IBM开发者园地中娄丽军的文章《MQ群集的使用》)。 2.1场景一 第一个场景中,应用程序将连接到队列管理器QM4,发送大量消息到集群CL1中的共享队列Q1中。我们期望消息以1:3:6的比例在QM1、QM2、QM3中分配。 首先,由于集群的接入点QM1要参与消息的分配,QM1要拥有一个共享队列Q1的副本,而根据Q缺省分发策略
8、(本地优先),这会造成所有消息都保存到QM1上的Q1中,因此我们必须修改变Q1的分发策略;有两种方式可以达成这个目的: 1.修改QM1上的队列Q1的属性CLGR)。 2.修改QM1上的队列Q1的属性CLGR,修改队列管理器QM1的属性CL1ALTERQLOCAL(Q1) CL1上创建一
此文档下载收益归作者所有