Websphere MQ v6 集群的负载均衡新功能 1. w ebsphere mq 集群负载均衡的增强 在 websphere mq 集群中,成员队列管理器可以创建本地队列,并将其在集群中共享,集群中的其他成员队列管理器不需要任何额外的配置操作,就可以像访问本地队列一样向该队列放入(put)消息;每个成员队列管理器都可以创建与之同名的共享队列,于是该共享队列在集群中就拥有了多个副本,所有的副本将作为一个虚拟的整体;对访问者(调用 mqput 的应用)而言,它们就是一个队列,应用不需要关心如下细节: 物理上有多少队副本; 队列副本部署的物理列位置; 消息实际发送到哪个队列副本。 所有这些细节问题由集群负责处理,由此实现了集群的负载均衡功能。 然而,在 v6 之前,集群的负载均衡功能在实现上有若干的限制,其中我们最常碰到的是如下两点: 缺省的负载分配方式是平均主义――轮循(round robin),集群将同等对待所有的队列副本;要想实现更灵活的分配策略就得依靠开发人员定制自己的用户出口(user exit)程序①。 负载分配的算法中有一项重要的例外――本地优先原则。一个消息进入到集群中会经由两种途径:1) 应用程序连接到集群中的某一成员队列管理器,调用 mq api 将消息写入共享队列;2)集群外部的队列管理器连接到集群中的某一成员队列管理器,并将消息由通道发送过来。无论是哪种途径,消息到达的第一个队列管理器,对该消息都具有特别的意义(我喜欢将该队列管理器称之为消息的"着陆点")。本地优先原则是指如果"着陆点 "上拥有一个目标共享队列的副本,那么消息将永远不会被路由到其它远程队列管理器,只能进入"着陆点"本地的共享队列副本。也许可以为这样的实现方式想出一百条理由,但我们无法回避的是,它造成了这样一个结果:如果要从集群的外部发送消息到集群,并希望消息在集群的成员间合理的分配,那么集群中作为与外部环境接口点的队列管理器上就不能存在任何共享队列的副本,否则所有消息将积压在接口点队列管理器上,使集群的负载均衡功能英雄无用武之地。通常的解决方案是为集群配置至少一个特殊的队列管理器,通常称为网关(gateway)队列管理器,该队列管理器上没有任何共享队列的副本,只需配置与集群外部的通讯设置(通道、监听器等)和相关的队列管理器别名(queue-manager alias)。 即便 websphere mq 具有上述的局限,但瑕不掩瑜,在大规模集群方面,消息中间件(mom)...