WebSphere Process Server V6.2 性能調優,第 3 部分 消息引擎性能調優1

引言

WebSphere Process Server (下文中以 WPS 表示)和 WebSphere ESB (下文中以 WESB 表示)使用內嵌的服務集成匯流排 Service Integration Bus (SIBus) 來支持組件間的非同步通信。 SIBus 實際上是一個基於 Java Message Service (JMS) 規範的消息中間件,在實現過程中,預設是有一個目的地 (Destination) (例如一個隊列)唯一的分配給一個匯流排成員。在消息傳輸過程中,必須對目的地定義持久存儲區,來保存消息的內容;同時也需要一個組件來保存數據並在需要時從持久存儲區獲取數據,而消息引擎就是實現該功能的組件。 在本系列的第一篇文章中,概要的介紹了對 WPS 性能產生影響的一些主要參數,本文將基於消息引擎特有的參數,詳細介紹 WPS 消息引擎性能優化的方法和步驟,包括以下四部分:

    選擇消息數據持久化方式

    設置數據緩衝區大小

    配置環境實現消息引擎的故障轉移

    將消息引擎數據存儲器遷移到更高性能的資料庫

您可以參考本文,根據性能需求對 WPS 中的消息引擎進行調整優化。

選擇消息數據持久化方式

對於消息數據進行持久化存儲的方式有兩種 – 使用文件存儲器和使用數據存儲器。文件存儲是由操作系統完成的,它將操作信息和消息持久化到文件系統中。而數據存儲一般指的是通過資料庫,比如 WPS 默認使用的本地的 Derby 資料庫來存儲消息數據。

一般來說,消息引擎的持久化是通過數據存儲實現的,在集群環境中更是如此。但文件存儲器由於文件讀寫速度快,執行的速度也比本地的 Derby 資料庫要快,因此可以提供比較高的存儲性能。所以如果您使用的是用於開發或測試用途的單機 (standalone) WPS 或者 WESB 6.2.0 版本的伺服器,您可以考慮通過文件系統實現 BPC 和 SCA 匯流排的持久化存儲;但在集群環境,尤其是生產系統中,還是推薦使用更高性能的數據存儲器(例如 DB2,Informix 或者 Oracle 等)來持久化消息數據。

配置 WPS 使用文件存儲器實現消息持久化

當您決定以文件存儲器方式實現消息引擎持久化時,您必須在創建概要文件的時候就進行配置。具體步驟如下所示:

1. 用概要文件管理工具創建一個新的單機 WESB 或 WPS 概要文件時,請選擇概要文件創建選項 -> 創建高級概要文件,如圖 1 所示:

圖 1. 概要文件創建選項

2. 在資料庫配置頁面,選擇”使用用於消息傳遞引擎 (ME) 的文件存儲庫”選項,如圖 2 所示:

圖 2. 概要文件資料庫配置

3. 當該概要文件創建成功之後,BPC 和 SCA 消息傳遞引擎就會使用文件存儲器實現消息持久化,而 CEI 消息傳遞引擎仍將使用本地的 Derby Embedded 資料庫作為存儲器。

設置數據緩衝區的大小

消息的可靠性對於任何消息傳遞系統來說都是一個非常重要的因素。在 WPS 中, JMS 消息具有服務質量屬性,您可以通過這個屬性來指定消息傳遞的可靠性級別。在配置可靠性級別時,您需要全面考慮對於可靠消息傳遞以及系統性能的需求,因為消息傳遞的速度和可靠性是此消彼長的。例如,如果您希望在任何情況下傳遞消息,那麼可以將消息設置有保證持久類型的,但此種消息的傳遞速度也是最慢的。您可以在創建匯流排目的地 (bus destination) 時指定消息可靠性,您可以參照參考資料 1 中的步驟設置。

在 WPS 和 WESB 中,您可以對消息指定下列五種可靠性選項(也稱為傳遞選項)。這些選項按可靠性遞增順序如下表 1 所示:

表 1. 消息服務可靠性級別列表

消息類型

可靠級別描述

最大努力非持久

當消息傳遞引擎停止或發生故障時,將廢棄該消息。如果用於發送消息的連接變為不可用狀態時,或者當系統資源不足時,也可能會廢棄消息。

快速非持久

當消息傳遞引擎停止或發生故障時,將廢棄該消息。如果用於發送消息的連接變為不可用狀態時,也可能會廢棄消息。

可靠非持久

當消息傳遞引擎停止或發生故障時,將廢棄該消息。

可靠持久

當消息傳遞引擎發生故障時,可能會廢棄消息。

有保證持久

不廢棄消息。

持久化的消息始終會保存到某種形式的持久化數據暫存器中(比如上文提到的文件存儲器或數據存儲器),而非持久化消息通常存儲在內存中。將消息存入磁碟或者數據存儲器進行持久化的頻率將影響系統的性能。對於最大努力非持久類型的消息來說,系統永遠不會將它們存入磁碟或者數據存儲器中;對於快速非持久和可靠非持久消息來說,只有當系統資源耗盡時才會將它們存入磁碟或者數據存儲器;而對於可靠持久以及有保證持久消息而言,系統永遠都會將它們存入磁碟或者數據存儲器里。可靠持久消息和有保證持久消息的區別在於,可靠持久消息的持久化是非同步的,而有保證持久消息的持久化是同步的。如果消息引擎在非同步存儲可靠持久性消息完成之前就停止了,則可能會造成該消息的丟失。

下面介紹的兩個變數可以控制內存中數據緩衝區的類型和大小,用於在內存中保存上述五種類型的消息。數據緩衝區有固定的大小,而預設值可能無法滿足某些密集消息傳輸應用的需求,您可以根據自己的需要進行配置。

DiscardableDataBufferSize 變數定義了儲存最大努力非持久性消息的數據緩衝區的大小,以位元組為單位。最大努力非持久性消息的服務質量決定了消息數據不會被存入數據存儲器中,並且當消息的容量過大溢出了數據緩衝器的大小時,該條消息將被丟棄。此變數預設的大小是 320000 位元組。當消息傳遞引擎將數據添加至此緩衝區時,例如,當消息傳遞引擎從客戶機接收到最大努力非持久消息時,消息傳遞引擎可能會廢棄緩衝區中已包含的數據以便騰出空間。此行為使消息傳遞引擎能夠廢棄最大努力非持久消息。

而 CachedDataBufferSize 變數指定了儲存除最大努力非持久性消息之外其它四種類型消息的數據緩衝器大小,以位元組為單位,此變數的大小預設值也為 320000 位元組。此數據緩衝區包含服務質量屬性優於”最大努力非持久”的數據和存放在數據存儲器中的數據。高速緩存數據緩衝區的用途是通過將消息傳遞引擎本來需要從數據存儲器中讀取的數據高速緩存在內存中來提高消息傳遞引擎的性能。當它將數據寫至數據存儲器以及從數據存儲器中讀取數據時,消息傳遞引擎會嘗試將該數據添加至高速緩存數據緩衝區。消息傳遞引擎可能會廢棄緩衝區中已包含的數據以便騰出空間。

您需要根據自身的需求設置這兩種緩衝器的大小。您可以在管理控制台 -> 服務集成 -> 匯流排 -> 匯流排名稱 -> 消息傳遞引擎 -> 消息引擎名 -> 其他屬性 -> 定製屬性中對每一個消息引擎進行設置,如圖 3 所示,設置一個名稱為 sib.msgstore.discardableDataBufferSize 的變數並定義它的大小為 40000000:

圖 3. 設置 DiscardableDataBufferSize

和名為 sib.msgstore.cachedDataBufferSize 的變數並定義它的大小為 10000000,如圖 4 所示:

圖 4. 設置 CachedDataBufferSize

上面圖例中給出的建議值可以在消息大小為 1KB 的應用程序環境中達到較好的性能。如果您的應用環境中消息數據更大,則需要相應的調高上述兩個緩衝區的大小。

配置環境實現消息引擎的故障轉移

消息引擎在運行時,會通過 TCP/IP 方式與後台數據存儲器相連,並通過消息引擎的 ME_UUID 以及 INC_UUID 對數據存儲器中的 SIBOWNER 表鎖定,保存為一行中的一對唯一標識。當消息引擎啟動時,它使用可以確定唯一性的標識來獲得並維護它的互斥鎖定。當正在運行的消息引擎突然主動關閉連接時(網路故障或宕機),資料庫方面不會主動探測連接狀況,所以不會釋放對 SIBOWNER 表上的互斥鎖,導致其餘伺服器上的可用消息引擎無法獲取對該表的互斥鎖,以致於無法順利啟動。您可能會在消息引擎日誌中看到如下清單 1 中所示的錯誤信息:

清單 1. 消息引擎故障轉移失敗錯誤信息

[3/9/09 18:07:54:327 CST] 00000086 SibMessage I [SCA.SYSTEM.widCell.Bus:default.AppTa

rget.000-SCA.SYSTEM.widCell.Bus] CWSIS1538I:

The messaging engine, ME_UUID=2025B17928C161D

6, INC_UUID=303A303AEAB3EDD7, is attempting to obtain an exclusive lock on the data

store.

[3/9/09 18:07:59:343 CST] 00000086 SibMessage I [SCA.SYSTEM.widCell.Bus:default.AppTa

rget.000-SCA.SYSTEM.widCell.Bus] CWSIS1546I:

The messaging engine, ME_UUID=2025B17928C161D

6, INC_UUID=303A303AEAB3EDD7, has lost an existing lock or failed to gain an initial

lock on the data store.

[3/9/09 18:08:04:227 CST] 00000086 SibMessage I [SCA.APPLICATION.widCell.Bus:default.

AppTarget.000-SCA.APPLICATION.widCell.Bus] CWSIS1538I:

The messaging engine, ME_UUID=F1FF9

3EDD8DCD63B, INC_UUID=7CF47CF484B974F5, is attempting to obtain an exclusive lock on

the data store.

[3/9/09 18:08:09:329 CST] 00000086 SibMessage I [SCA.APPLICATION.widCell.Bus:default.

AppTarget.000-SCA.APPLICATION.widCell.Bus] CWSIS1546I:

The messaging engine, ME_UUID=F1FF9

3EDD8DCD63B, INC_UUID=7CF47CF484B974F5, has lost an existing lock or failed to gain an

initial lock on the data store.

[3/9/09 18:08:11:237 CST] 00000086 SibMessage I [CommonEventInfrastructure_Bus:defaul

t.AppTarget.000-CommonEventInfrastructure_Bus] CWSIS1538I:

The messaging engine, ME_UUID=D

65CBBE3A63BDFD6, INC_UUID=6FAA6FAA85818EDB, is attempting to obtain an exclusive lock

on the data store.

[3/9/09 18:08:14:465 CST] 00000086 SibMessage I [CommonEventInfrastructure_Bus:defaul

t.AppTarget.000-CommonEventInfrastructure_Bus] CWSIS1546I:

The messaging engine, ME_UUID=D

65CBBE3A63BDFD6, INC_UUID=6FAA6FAA85818EDB, has lost an existing lock or failed to

gain an initial lock on the data store.

[3/9/09 18:08:18:398 CST] 00000086 SibMessage I [BPC.widCell.Bus:default.AppTarget.00

0-BPC.widCell.Bus] CWSIS1538I:

The messaging engine, ME_UUID=B5290700DB25A3BE, INC_UUID=14

96149685818EF1, is attempting to obtain an exclusive lock on the data store.

[3/9/09 18:08:19:144 CST] 00000086 SibMessage I [BPC.widCell.Bus:default.AppTarget.00

0-BPC.widCell.Bus] CWSIS1546I:

The messaging engine, ME_UUID=B5290700DB25A3BE, INC_UUID=14

96149685818EF1, has lost an existing lock or failed to gain an initial lock on the

data store.

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營