国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 網(wǎng)絡(luò)通信 > 正文

Websphere MQ v6集群的負(fù)載均衡新功能

2019-11-04 22:26:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1. Websphere MQ 集群負(fù)載均衡的增強(qiáng)

在Websphere MQ集群中,成員隊(duì)列治理器可以創(chuàng)建本地隊(duì)列,并將其在集群中共享,集群中的其他成員隊(duì)列治理器不需要任何額外的配置操作,就可以像訪問(wèn)本地隊(duì)列一樣向該隊(duì)列放入(PUT)消息;每個(gè)成員隊(duì)列治理器都可以創(chuàng)建與之同名的共享隊(duì)列,于是該共享隊(duì)列在集群中就擁有了多個(gè)副本,所有的副本將作為一個(gè)虛擬的整體;對(duì)訪問(wèn)者(調(diào)用MQPUT的應(yīng)用)而言,它們就是一個(gè)隊(duì)列,應(yīng)用不需要關(guān)心如下細(xì)節(jié):

  • 物理上有多少隊(duì)副本;
  • 隊(duì)列副本部署的物理列位置;
  • 消息實(shí)際發(fā)送到哪個(gè)隊(duì)列副本。

所有這些細(xì)節(jié)問(wèn)題由集群負(fù)責(zé)處理,由此實(shí)現(xiàn)了集群的負(fù)載均衡功能。

然而,在V6之前,集群的負(fù)載均衡功能在實(shí)現(xiàn)上有若干的限制,其中我們最常碰到的是如下兩點(diǎn):

  • 缺省的負(fù)載分配方式是平均主義――輪循(Round Robin),集群將同等對(duì)待所有的隊(duì)列副本;要想實(shí)現(xiàn)更靈活的分配策略就得依靠開(kāi)發(fā)人員定制自己的用戶(hù)出口(User Exit)程序①。
  • 負(fù)載分配的算法中有一項(xiàng)重要的例外――本地優(yōu)先原則。一個(gè)消息進(jìn)入到集群中會(huì)經(jīng)由兩種途徑:1) 應(yīng)用程序連接到集群中的某一成員隊(duì)列治理器,調(diào)用MQ API將消息寫(xiě)入共享隊(duì)列;2)集群外部的隊(duì)列治理器連接到集群中的某一成員隊(duì)列治理器,并將消息由通道發(fā)送過(guò)來(lái)。無(wú)論是哪種途徑,消息到達(dá)的第一個(gè)隊(duì)列治理器,對(duì)該消息都具有非凡的意義(我喜歡將該隊(duì)列治理器稱(chēng)之為消息的"著陸點(diǎn)")。本地優(yōu)先原則是指假如"著陸點(diǎn) "上擁有一個(gè)目標(biāo)共享隊(duì)列的副本,那么消息將永遠(yuǎn)不會(huì)被路由到其它遠(yuǎn)程隊(duì)列治理器,只能進(jìn)入"著陸點(diǎn)"本地的共享隊(duì)列副本。也許可以為這樣的實(shí)現(xiàn)方式想出一百條理由,但我們無(wú)法回避的是,它造成了這樣一個(gè)結(jié)果:假如要從集群的外部發(fā)送消息到集群,并希望消息在集群的成員間合理的分配,那么集群中作為與外部環(huán)境接口點(diǎn)的隊(duì)列治理器上就不能存在任何共享隊(duì)列的副本,否則所有消息將積壓在接口點(diǎn)隊(duì)列治理器上,使集群的負(fù)載均衡功能英雄無(wú)用武之地。通常的解決方案是為集群配置至少一個(gè)非凡的隊(duì)列治理器,通常稱(chēng)為網(wǎng)關(guān)(Gateway)隊(duì)列治理器,該隊(duì)列治理器上沒(méi)有任何共享隊(duì)列的副本,只需配置與集群外部的通訊設(shè)置(通道、監(jiān)聽(tīng)器等)和相關(guān)的隊(duì)列治理器別名(Queue-manager alias)。

即便Websphere MQ具有上述的局限,但瑕不掩瑜,在大規(guī)模集群方面,消息中間件(MOM)業(yè)內(nèi)還是少有能出其右者。這也許是在消息中間件技術(shù)不算悠久的發(fā)展歷程上,無(wú)法回避的成長(zhǎng)的陣痛。究竟,MQ還是為我們提供了解決問(wèn)題的途徑,雖然犧牲了些許的系統(tǒng)部署、治理的復(fù)雜度,手法也顯的不是那么的優(yōu)雅。

"是否優(yōu)先使用本地副本?是否采用輪循的分配策略?",在這個(gè)問(wèn)題上,使用者應(yīng)當(dāng)具有自由的裁量權(quán)利,并擁有便捷的設(shè)置手段。我們終于在Websphere MQ v6里找回了那些被剝奪了的選擇的自由。

在Websphere MQ v6中,使用者可以根據(jù)集群成員節(jié)點(diǎn)的實(shí)際處理能力,合理、靈活的分配工作負(fù)載,輪循(Round Robin)順理成章的成為缺省的分發(fā)策略。本地共享隊(duì)列副本優(yōu)先的策略也依然是缺省的設(shè)置,但用戶(hù)可以非常方便的修改策略,使集群中的其它共享隊(duì)列副本可以和本地副本一樣參與到消息分發(fā)的機(jī)制當(dāng)中。當(dāng)然,用戶(hù)出口(User Exit)程序仍然被支持,用戶(hù)可以使用該機(jī)制實(shí)現(xiàn)更加個(gè)性化的負(fù)載均衡策略。②

為支持上述新增功能,Websphere MQ為隊(duì)列、通道、隊(duì)列治理器等對(duì)象增加了若干的參數(shù)。

對(duì)象參數(shù)命解釋缺省值隊(duì)列(Queues)CLWLUSEQ指定該隊(duì)列在負(fù)載均衡策略中,本地隊(duì)列副本參與分發(fā)的方式。

LOCAL:只使用本地隊(duì)列。

QMGR:參考隊(duì)列治理器的CLWLUSEQ定義。

ANY:將本地和遠(yuǎn)程隊(duì)列同等考慮。QMGRCLWLPRTY指定共享隊(duì)列副本的優(yōu)先級(jí)。取值范圍:0~9。

集群將所有消息發(fā)送到優(yōu)先級(jí)最高的隊(duì)列副本, 只有當(dāng)優(yōu)先級(jí)高的隊(duì)列副本不可用時(shí),優(yōu)先級(jí)低的隊(duì)列副本才被考慮。

隊(duì)列副本的優(yōu)先級(jí)在通道狀態(tài)檢查后才被檢查;所以,只有當(dāng)前可用的隊(duì)列治理器才可能被選擇。假如通道不可用,即便相應(yīng)的隊(duì)列副本優(yōu)先級(jí)高,也不會(huì)被選中。0CLWLRANK指定共享隊(duì)列副本的等級(jí)。取值范圍:0~9。

集群將所有消息發(fā)送到等級(jí)最高的隊(duì)列副本。隊(duì)列副本等級(jí)在通道狀態(tài)檢查之前被檢查,所以無(wú)論對(duì)應(yīng)的通道是否可用,等級(jí)高的隊(duì)列都將被選擇。0

隊(duì)列治理器

(Queue manager)CLWLUSEQ指定該隊(duì)列治理器在負(fù)載均衡策略中,本地隊(duì)列副本參與分發(fā)的方式。

LOCAL:只使用本地隊(duì)列。

ANY:將本地和遠(yuǎn)程隊(duì)列同等考慮。LOCALCLWLMRUC最大outbound集群通道, 取值:1~999,999,999。999,999,999通道(Channels)CLWLWGHT通道負(fù)載均衡權(quán)重值, 取值:1~99。

只對(duì)CLUSSDR和CLUSRCVR生效。

集群根據(jù)該權(quán)重決定分配到通道對(duì)應(yīng)的隊(duì)列副本上的消息數(shù)量。50CLWLPRTY指定集群通道的優(yōu)先級(jí)。取值范圍:0~9。

只對(duì)CLUSSDR和CLUSRCVR生效。

集群通過(guò)優(yōu)先級(jí)最高的通道將所有消息發(fā)送到相應(yīng)的隊(duì)列副本,只有當(dāng)優(yōu)先級(jí)高的通道不可用時(shí),優(yōu)先級(jí)低的通道才被考慮。

通道的優(yōu)先級(jí)在通道狀態(tài)檢查后才被檢查;所以只有當(dāng)前可用的通道才可能被選擇。假如通道不可用,即便優(yōu)先級(jí)高,也不會(huì)被選中。

隊(duì)列副本優(yōu)先級(jí)在通道優(yōu)先級(jí)檢查后被考慮。0CLWLRANK指定集群通道的等級(jí)。取值范圍:0~9。

只對(duì)CLUSSDR和CLUSRCVR生效。

集群通過(guò)等級(jí)最高的通道將所有的消息發(fā)送到相應(yīng)的隊(duì)列副本,只有當(dāng)?shù)燃?jí)高的通道不可用時(shí),等級(jí)低的通道才被考慮。

通道等級(jí)在通道狀態(tài)檢查之前被檢查,所以無(wú)論對(duì)應(yīng)的通道是否可用,等級(jí)高的通道都將被選擇。

隊(duì)列副本等級(jí)在通道等級(jí)檢查后被考慮。0


2. 演示

下面,我們來(lái)看兩個(gè)簡(jiǎn)單的演示場(chǎng)景:

在集群CL1中有三個(gè)成員隊(duì)列治理器QM1、QM2、QM3 , 每個(gè)成員上都擁有一個(gè)共享隊(duì)列Q1的副本。另有一個(gè)隊(duì)列治理器QM4, QM4和集群CL1中的QM1之間具有收發(fā)通道。



Websphere MQ v6集群的負(fù)載均衡新功能
點(diǎn)擊查看大圖


首先,依照上圖配置集群的基本環(huán)境(具體的配置方法可以參考Websphere MQ產(chǎn)品文檔《Queue Manager Clusters》和IBM開(kāi)發(fā)者園地中婁麗軍的文章《MQ群集的使用》)。

2.1 場(chǎng)景一

第一個(gè)場(chǎng)景中,應(yīng)用程序?qū)⑦B接到隊(duì)列治理器QM4, 發(fā)送大量消息到集群CL1中的共享隊(duì)列Q1中。我們期望消息以 1:3:6的比例在QM1、QM2、QM3中分配。

首先,由于集群的接入點(diǎn)QM1要參與消息的分配,QM1要擁有一個(gè)共享隊(duì)列Q1的副本,而根據(jù)Websphere MQ缺省分發(fā)策略(本地優(yōu)先),這會(huì)造成所有消息都保存到QM1上的Q1中,因此我們必須修改變Q1的分發(fā)策略;有兩種方式可以達(dá)成這個(gè)目的:

1. 修改QM1上的隊(duì)列Q1的屬性CLWLUSEQ為ANY,(缺省為QMGR)。

2. 修改QM1上的隊(duì)列Q1的屬性CLWLUSEQ為QMGR,修改隊(duì)列治理器QM1的屬性CLWLUSEQ為ANY。第一種方式只對(duì)Q1生效,而第二種方式則可能對(duì)隊(duì)列治理器中的所有隊(duì)列生效;假如集群中有大量的共享隊(duì)列,并采用同樣的分發(fā)策略,后一種方式會(huì)更靈活些。





runmqsc QM1

ALTER QLOCAL(Q1) CLWLUSEQ(LOCAL)



接下來(lái),為了使發(fā)送來(lái)的消息可以被動(dòng)態(tài)路由,需要在接入點(diǎn)隊(duì)列治理器QM1上創(chuàng)建一個(gè)空的隊(duì)列治理器別名(Queue-manager alias)③。





DEFINE QREMOTE(ANYONE) RNAME(' ') RQMNAME(' ')



隊(duì)列治理器QM4置身于集群之外,在其上定義遠(yuǎn)程隊(duì)列定義(假設(shè)通道、傳輸隊(duì)列都已經(jīng)就緒了):





DEFINE QREMOTE(Q1) RNAME(Q1) RQMNAME(ANYONE) XMITQ(QM1)



調(diào)用MQ例子程序amqsput,發(fā)送10個(gè)消息:





amqsput Q1 QM4

Sample AMQSPUT0 start

target queue is Q1

1

2

3

4

5

6

7

8

9

0



我們看一下這樣設(shè)置的效果:





runmqsc QM1

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(3)





runmqsc QM2

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(3)





runmqsc QM3

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(4)



可以看到,各副本中的消息數(shù)分別是3、3、4。基本上被平均分配到集群中的三個(gè)成員上了。

接下來(lái),我們?cè)O(shè)置各共享隊(duì)列副本的權(quán)重;確切的講,權(quán)重只能在通道上設(shè)置,我們要修改每個(gè)集群成員隊(duì)列治理器的集群接收通道(Cluster-receiver Channel)的屬性CLWLWGHT。

設(shè)置QM1的權(quán)重為1。



runmqsc QM1

ALTER CHANNEL(TO.QM1) CHLTYPE(CLUSRCVR)CLWLWGHT(1)



設(shè)置QM2的權(quán)重為3。



runmqsc QM2

ALTER CHANNEL(TO.QM1) CHLTYPE(CLUSRCVR)CLWLWGHT(3)




設(shè)置QM3的權(quán)重為6。



runmqsc QM3

ALTER CHANNEL(TO.QM1) CHLTYPE(CLUSRCVR)CLWLWGHT(6)



清空各隊(duì)列中的消息后,再次發(fā)送消息。



amqsput Q1 QM4

Sample AMQSPUT0 start

target queue is Q1

1

2

3

4

5

6

7

8

9

0



看一下效果吧:



runmqsc QM1

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(1)





runmqsc QM2

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(3)





runmqsc QM3

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(6)



1、3、6 ,Bingo!

2.2 場(chǎng)景二

第二個(gè)場(chǎng)景,我們將看到所謂Hot-Standby模式:在正常狀況下,消息有確定的分發(fā)目的地(一個(gè)或多個(gè)共享隊(duì)列副本),當(dāng)首選的目的地失效時(shí),消息將發(fā)送到備份的(一個(gè)或多個(gè))副本中。

這次,我們期望隊(duì)列治理器QM2和QM3上的Q1副本作為正常狀況下的消息目的地。在上述兩個(gè)隊(duì)列副本不可用時(shí),由QM1上的Q1副本作為備份接收消息。

同樣有兩種設(shè)置方式:

1. 修改各成員隊(duì)列治理器上的共享隊(duì)列副本Q1的屬性CLWLPRTY;

2. 修改各成員隊(duì)列治理器上的集群接收通道的屬性CLWLPRTY。

第一種方式只對(duì)Q1生效,而第二種方式則可能對(duì)相應(yīng)隊(duì)列治理器中的所有隊(duì)列生效;假如集群中有大量的共享隊(duì)列,并采用同樣的分發(fā)策略,后一種方式會(huì)更靈活些。

假如兩種同時(shí)設(shè)置,則集群接收通道的屬性CLWLPRTY優(yōu)先生效。

設(shè)置QM1上的Q1副本優(yōu)先級(jí)為1。



runmqsc QM1

ALTER QLOCAL(Q1) CLWLPRTY (1)



設(shè)置QM2上的Q1副本優(yōu)先級(jí)為2。



runmqsc QM2

ALTER QLOCAL(Q1) CLWLPRTY (2)



設(shè)置QM3上的Q1副本優(yōu)先級(jí)為2。



runmqsc QM3

ALTER QLOCAL(Q1) CLWLPRTY (2)



清空各隊(duì)列中的消息后,再次發(fā)送消息(這次是9個(gè)消息)。



amqsput Q1 QM4

Sample AMQSPUT0 start

target queue is Q1

1

2

3

4

5

6

7

8

9



我們得到如下的結(jié)果:



runmqsc QM1

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(0)





runmqsc QM2

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(3)





runmqsc QM3

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(6)




隊(duì)列治理器QM2、QM3上的Q1優(yōu)先級(jí)同為2,高于QM1上的Q1,所以消息在QM2、QM3中分配,分配的比例則依照之前我們?cè)O(shè)置的通道的權(quán)重3:6。

下面我們將QM3上的Q1設(shè)置為不可寫(xiě)入的狀態(tài),并觀察一下結(jié)果。



runmqsc QM3

ALTER QLOCAL(Q1) PUT(DISABLED)



清空各隊(duì)列中的消息后,再次發(fā)送消息。



amqsput Q1 QM4

Sample AMQSPUT0 start

target queue is Q1

1

2

3

4

5

6

7

8

9

0



我們得到如下的結(jié)果:



runmqsc QM1

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(0)





runmqsc QM2

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(10)





runmqsc QM3

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(0)



在QM3上的Q1不可用時(shí),所有的消息都被發(fā)送到QM2上的Q1中。

我們?cè)賹M2上的Q1也設(shè)置為不可寫(xiě)入的狀態(tài),并觀察結(jié)果。



runmqsc QM2

ALTER QLOCAL(Q1) PUT(DISABLED)



清空各隊(duì)列中的消息后,再次發(fā)送消息。



amqsput Q1 QM4

Sample AMQSPUT0 start

target queue is Q1

1

2

3

4

5

6

7

8

9

0



我們得到如下的結(jié)果:



runmqsc QM1

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(0)





runmqsc QM2

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(0)





runmqsc QM3

display qlocal(Q1) CURDEPTH

AMQ8409: Display Queue details.

QUEUE(Q1) TYPE(QLOCAL)

CURDEPTH(10)



當(dāng)高優(yōu)先級(jí)的Q1副本都不可用時(shí),所有的消息都被發(fā)送到優(yōu)先級(jí)較低的QM1上的Q1中。

2.3 更多

另一個(gè)我們沒(méi)有深入討論的概念是隊(duì)列和通道的屬性CLWLRANK(我們姑且稱(chēng)之為"等級(jí)"好了)。CLWLRANK和CLWLPRTY作用相似,不同之處在于CLWLRANK在通道狀態(tài)檢查之前生效,而CLWLPRTY在通道狀態(tài)檢查之后生效。簡(jiǎn)單的講,假如設(shè)置了CLWLRANK,則消息將必定發(fā)往 CLWLRANK最高的隊(duì)列副本,即使通向該目標(biāo)副本的通道不可用,消息也將積壓在集群的傳輸隊(duì)列中,等待通道恢復(fù),而不會(huì)發(fā)送到目前可用的其它 CLWLRANK較低的副本中。假如設(shè)置了CLWLPRTY,則集群會(huì)首先檢查通向各副本所在地的通道狀態(tài),只有通道可用的目的地才會(huì)進(jìn)入候選名單,集群將在候選名單中選擇CLWLPRTY最高的副本來(lái)分發(fā)消息。


最后,我們總結(jié)一下各參數(shù)生效的先后次序:

  • 通道的CLWLRANK
  • 隊(duì)列的CLWLRANK
  • 通道狀態(tài)
  • 通道的CLWLPRTY
  • 隊(duì)列的CLWLPRTY
  • 隊(duì)列的CLWLWGHT
3.結(jié)束語(yǔ)

我們初步體會(huì)了Websphere MQ新的集群負(fù)載均衡功能概貌,當(dāng)然,這還遠(yuǎn)遠(yuǎn)不足以體現(xiàn)它全部的內(nèi)涵。假如將所有這些屬性加以靈活的組合,將衍生出為數(shù)眾多的負(fù)載均衡配置方案,來(lái)滿(mǎn)足實(shí)際業(yè)務(wù)環(huán)境多樣化的需求。還有相當(dāng)多與負(fù)載均衡相關(guān)的內(nèi)容,本文沒(méi)有涉及到,但非常值得探討,希望本文能引起諸位對(duì)MQ集群的愛(ài)好,并參加到我們的討論之中。



發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 额尔古纳市| 丰宁| 石河子市| 土默特右旗| 枣强县| 松溪县| 高清| 三明市| 得荣县| 枣庄市| 安多县| 大理市| 广德县| 平乐县| 漠河县| 田阳县| 兴义市| 蕉岭县| 上饶市| 犍为县| 来安县| 密云县| 延津县| 长沙市| 河北区| 名山县| 邹平县| 丹寨县| 镇坪县| 晋城| 阿荣旗| 蒙阴县| 贞丰县| 始兴县| 重庆市| 盐边县| 隆尧县| 长春市| 于都县| 纳雍县| 宜昌市|