Sun Java logo     上一頁      目錄      索引      下一頁     

Sun logo
Sun Java System Message Queue 3 2005Q4 技術摘要 

第 4 章
代理程式叢集

Message Queue 企業版支援代理程式叢集的使用:代理程式群組協作工作,提供向用戶端傳送訊息服務。叢集可使管理員透過分散數個代理程式間的用戶端連線,根據訊息流量來調整訊息傳送作業。

本章說明代理程式叢集的架構和內部功能。涵蓋下列主題:

請注意,代理程式叢集提供服務可用性,但不提供資料可用性。如果叢集中的代理程式失敗,連線至該代理程式的用戶端可以重新連線到叢集中的其他代理程式,但是在重新連線到替代代理程式時,部分資料可能會遺失。


叢集架構

圖 4-1 顯示代理程式叢集的 Message Queue 架構。叢集中的每個代理程式會直接連線到其他所有代理程式。每個用戶端 (訊息產生者或用戶) 都擁有單獨的主代理程式,藉以直接通訊,進行發送和接收訊息,就好像此主代理程式為叢集中唯一的代理程式一樣。事實上,主代理程式與其他代理程式一起合作,為所有連線的用戶端提供傳送服務。

在叢集中,服務可用性取決於代理程式是否能夠共用目標與長期用戶的資訊。如果叢集代理程式失敗,此狀態資訊有可能會不同步。為防止出現這種可能情況,可以將叢集內的某個代理程式指定為主代理程式。主代理程式會維護配置變更記錄,以追蹤對叢集的永久性實體 (目標與長期訂閱) 所作的變更。此記錄可用以傳遞此類變更資訊至變更發生時離線的代理程式。

圖 4-1 叢集架構

圖表顯示三個叢集代理程式,其中一個為主代理程式。圖以文字介紹。

下列各節說明即使一或多個代理程式處於離線的狀態,如何在叢集中執行訊息傳送以及如何配置和同步代理程式。


訊息傳送

在叢集配置中,代理程式會共用目標與訊息用戶的資訊:每個代理程式均瞭解下列資訊:

這可讓每個代理程式從其本身直接連線的訊息產生者,路由訊息到遠端訊息用戶。產生者的主代理程式與用戶的主代理程式有不同的職責:

叢集代理程式會一起運作,以將叢集內的訊息流量降到最低;例如,如果遠端代理程式針對相同的主題目標有兩個相同的訂閱,則訊息只會經由線路傳送一次。您可以設定目標特性,指定傳送至本機用戶優先於傳送至遠端用戶,以進一步減少流量。

如果用戶端與代理程式之間需要安全且加密的訊息傳送,可以配置叢集以提供代理程式之間安全的訊息傳送。

目標屬性

針對叢集代理程式上實體目標所設定的屬性,可以套用到叢集中該目標的所有實例;但是這些屬性指定的部分限制會整個套用到叢集,而其他限制則會套用到個別目標實例。表 4-1 列出您可以為實體目標設定的屬性,並指定屬性的範圍。

表 4-1 叢集代理程式上實體目標的特性 

特性名稱

範圍

maxNumMsgs

每個代理程式。藉由在叢集中分散產生者,可讓您提高未使用訊息的限制總量。

maxTotalMsgBytes

每個代理程式。藉由在叢集中分散產生者,可讓您提高未使用訊息的記憶體限制總量。

lmitBehavior

全域。

maxBytesPerMsg

每個代理程式。

maxNumProducers

每個代理程式。

maxNumActiveConsumers

全域。

maxNumBackupConsumers

全域。

consumerFlowLimit

全域。

localDeliveryPreferred

全域。

isLocalOnly

全域。

useDMQ

每個代理程式。

叢集和目標

不管目標是由管理員建立的、自動建立的還是暫時的,都會影響目標在叢集中傳遞的方式,以及在連線時或代理程式失敗時處理目標的方式。

圖 4-2 顯示四種叢集代理程式。顯示了代理程式之間的直接 (私人) 連線,以及用戶端與其所連代理程式之間的連線。圖中描述多種可能性,並在隨後小節中進行說明。

圖 4-2 叢集範例

圖中顯示目標在叢集中的傳遞方式。隨後在文中將詳細說明。

使用回覆發送模型產生至佇列

如前圖所示:

  1. 管理員會建立實體目標 QW。在建立叢集期間,佇列會複製到整個叢集。
  2. 產生者 ProdQW 傳送訊息到佇列 QW,並使用回覆發送模型,引導回覆到暫存佇列 TempQ1W。(暫存佇列會在應用程式建立暫存目標並新增用戶時建立並複製。)
  3. 主代理程式 BrokerW 保留傳送到 QW 的訊息,並將該訊息路由到第一個符合此訊息選取條件的使用中用戶。訊息會傳送到用戶 C1QW (在 BrokerX 上) 或用戶 C2QW (在 BrokerY 上),需視哪個用戶已備妥接收訊息而定。接收訊息的用戶會傳送回覆到目標 TempQ1W

產生至自動建立的目標

如前圖所示:

  1. 產生者 ProdAutoQY 會傳送訊息到目標 AutoQY,但是代理程式上不存在該目標。
  2. 代理程式會保留訊息並建立目標 AutoQY
  3. 自動建立的目標不會自動複製到整個叢集。只有當用戶選擇接收佇列 AutoQY 的訊息時,用戶的主代理程式才會建立目標 AutoQY,並傳送訊息到用戶。自動建立的目標會在用戶建立它的位置複製到整個叢集。

發佈至主題目標

如前圖所示:

  1. 管理員會建立實體主題目標 TY。管理員建立的目標 TY,會複製到整個代理程式叢集 (在使用目標之前)。
  2. 發佈者 PubTY 傳送訊息到 TY
  3. 主代理程式 BrokerY 保留發佈到 TY 的任何訊息,並將訊息路由到符合此訊息選取條件的所有主題訂閱者。

在連線或代理程式失敗時處理目標

表 4-2 說明不同類型的目標如何在叢集中進行複製與刪除。

表 4-2 處理叢集中的目標 

目標

傳遞和刪除

管理員建立的

建立目標時,目標會在叢集中傳遞,並且每個代理程式會一直儲存與目標相關的資訊。

當管理員明確刪除目標時,目標會被銷毀。

如果有主代理程式,會在主代理程式中儲存建立與刪除記錄,以便叢集中的代理程式能同步化狀態資訊。

暫存

建立目標時,目標會在叢集中傳遞。

如果允許與暫存目標關聯的用戶重新連線,目標會一直儲存在用戶的主代理程式中。否則一律不會儲存目標。

如果用戶失去了連線,則會刪除所有代理程式上的目標。

如果用戶的主代理程式當機,且允許用戶重新連線,則與此用戶關聯的暫存目標會受到監視。如果使用用戶端未在指定期間內重新連線,便會認為用戶端失敗並刪除目標。

自動建立的

當建立產生者但目標不存在時,會在產生者的主代理程式上建立目標。

為不存在的目標建立用戶時,與該用戶和目標相關的資訊會傳遞到整個叢集。

自動建立的目標可以經由管理員明確刪除,或者在下列情況下自動刪除:

  • 當給定期間內沒有用戶或訊息時,由每個代理程式自動刪除。
  • 當代理程式重新啟動且沒有該目標的訊息時,由每個代理程式自動刪除。


叢集配置

若要在啟動時在叢集中的代理程式之間建立連線,每個代理程式都必須傳送所有其他代理程式的主機名稱與連接埠號碼 (包括主代理程式,如果有)。此資訊由一組叢集配置特性指定,而叢集中所有代理程式的這些設定都應該相同。雖然可以為每個代理程式個別指定配置特性,但這種方法易產生錯誤並容易導致叢集配置的不一致性。相反,建議您將叢集配置特性置於一個在啟動時每個代理程式均參照的中央叢集配置檔案。這樣可確保所有代理程式共用相同的配置資訊。

請參閱「Message Queue 管理指南」以獲得叢集配置特性的詳細資訊。


備註

雖然叢集配置檔案原本是用於配置叢集,但亦方便儲存叢集中所有代理程式共用的其他特性。



叢集同步化

無論叢集的配置何時變更,關於變更的資訊即會自動傳遞至叢集中的所有代理程式。發生下列情況之一時,叢集配置會有所變更:

這類變更資訊將立即傳遞至發生變更時叢集內所有線上的代理程式。但是,離線的代理程式 (例如,已損毀的代理程式) 在變更發生時將不會收到變更通知。考量到離線的代理程式,Message Queue 為叢集維護一個配置變更記錄,記錄所有已建立或銷毀的永久性實體 (目標與長期訂閱)。當離線的代理程式重新連線時 (或當新的代理程式加入叢集中時),代理程式會參考此記錄以取得關於目標與長期訂閱者的資訊,然後與其他代理程式交換目前使用中的訊息用戶之相關資訊。

叢集中的一個代理程式會指定為主代理程式,負責維護配置變更記錄。因為其他代理程式無法在沒有主代理程式的情況下完成初始化,所以主代理程式務必是叢集中首先啟動的代理程式。如果主代理程式離線,則配置資訊將無法在叢集中傳遞,因為其他代理程式無法存取配置變更記錄。在這些情況下,如果您嘗試建立、重新配置或銷毀目標或長期訂閱,或嘗試執行如重新啟動長期訂閱等相關作業,則會出現異常。(但非管理訊息的傳送則會繼續正常工作。) 使用主代理程式和配置變更記錄是選擇性的。如果您擔心叢集配置變更或代理程式失敗之後叢集無法同步,才會需要主代理程式和配置變更記錄。



上一頁      目錄      索引      下一頁     


文件號碼:819-3566。  Copyright © 2005 Sun Microsystems, Inc. 版權所有。