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