本節提供效能調校的一些背景資訊。
訊息傳送應用程式的效能取決於應用程式和 Message Queue 服務之間的互動。因此,最佳化效能需要應用程式開發者和管理員共同的努力。
最佳化效能的程序從應用程式設計開始,然後是部署應用程式,接著再對訊息服務進行調校。效能調校程序包括以下階段:
定義應用程式的效能需求
設計應用程式時必須考量影響效能的因素 (特別是可靠性與效能之間的取捨)
建立基準效能測量
調校或重新配置訊息服務以最佳化效能
以上略述的程序通常是反覆的。在部署應用程式期間,Message Queue 管理員應評估訊息服務是否符合應用程式的一般效能需求。如果效能評定測試符合這些需求,管理員可以根據本章說明調校系統。但是,如果效能評定測試不符合效能需求,則可能需要重新設計應用程式或修改架構部署。
一般而言,效能是指訊息服務從產生器傳送訊息到用戶的速度和效率之測量結果。但是,您可能會依您的需要關注效能的不同方面。
系統可支援之訊息產生器、訊息用戶或同步運作連線的數目。
每秒導入訊息傳送系統的訊息數目或訊息容量。
從訊息產生器傳送特定訊息到訊息用戶所需的時間。
訊息服務的整體可用性,或者在負載量較大或失敗時訊息服務緩慢降低的程度。
訊息傳送的效率,亦即與已使用之運算資源相關的訊息流量測量結果。
通常這些不同方面的效能都相互關聯。如果訊息流量高,則表示訊息不太可能積存於代理程式中;因此,延時時間會比較短 (單一訊息可迅速傳送)。但是,延時可取決於很多因素:通訊連結的速度、代理程式處理速度,以及用戶端處理速度等。
無論如何,會有數個不同方面的效能。對您最重要的方面通常取決於特定應用程式的需求。
效能評定是針對訊息傳送應用程式建立測試套件,並且為此測試套件測量訊息流量或其他方面效能的程序。
例如,您可以建立一個測試套件,讓數個訊息產生用戶端使用數個連線、階段作業和訊息產生器,以某個特定速率,將標準容量的永久性或非永久性訊息傳送到數個佇列或主題 (這些都取決於您的訊息傳送應用程式設計)。同樣地,此測試套件包括數個訊息使用用戶端,這些用戶端會使用數個連線和階段作業,以及在測試套件實體目標中以特定確認模式使用訊息的特定類型訊息用戶。
使用標準的測試套件,您可以測量訊息產生和使用間所需的時間或平均訊息流量速率,並且可以監視系統以觀察連線執行緒用法、訊息儲存資料、訊息流量資料和其他相關度量。在效能受到不良影響之前,您就可以迅速增加訊息產生的速率、訊息產生器的數目或其他變數。您可以達到的最大流量為您訊息服務配置的效能評定。
使用此效能評定,您可以修改部分測試套件的特徵。請謹慎控制所有可能影響效能的因素 (請參閱影響效能的應用程式設計因素),您可以對變更其中某些因素會如何影響效能評定進行記錄。例如,您可以將連線數目或訊息容量增加 5 倍或 10 倍,然後記下效能所受的影響。
反過來,您也可以保持以應用程式為基礎的因素不變,而以某種控制方法變更代理程式配置 (例如,變更連線特性、執行緒池特性、JVM 記憶體限制、限制運作方式、檔案式與 JDBC 型永久性... 等等),並記錄這些變更對於效能所產生的影響。
應用程式的效能評定會提供資訊,這些資訊在您要藉由調校訊息服務增加已部署應用程式的效能時會有所幫助。效能評定可以更加準確地預測一個變更或一組變更的效果。
一般來說,效能評定應在受控制的測試環境中執行,並且要時間足夠長以讓訊息服務穩定執行。(啟動時,及時 (Just-In-Time) 編譯會將 Java 程式碼轉為機器碼,這會對效能造成不良影響。)
部署並執行訊息傳送應用程式之後,請務必建立基準使用式樣。您必須知道尖峰需求出現的時間並可以將需求數目化。例如,需求通常會因一般使用者的數目、作業層級、每天的時間或所有這些因素而有所變化。
若要建立基準使用式樣,您必須長時間監視訊息服務,查看下列資料:
連線數目
儲存於代理程式中 (或特定實體目標中) 的訊息數目
傳入和傳出代理程式 (或特定實體目標) 的訊息流量
使用中用戶數目
您還可以使用度量資料中提供的平均值與尖峰值。
檢查這些出乎設計意料之外的基準度量是非常重要的。經由此動作,您會檢查用戶端程式碼是否正常運作:例如,連線未處於開啟狀態,或使用的訊息未處於未確認狀態。這些編碼錯誤會耗用代理程式資源,並且可能對效能有很明顯的影響。
基準使用式樣可幫助您判斷如何將系統調校到最佳化效能。例如:
如果某個實體目標的使用頻繁程度比其他實體目標高出許多,則您可能需要將此實體目標的訊息記憶體限制設定得較高,或者據此調整限制行為。
如果所需的連線數目明顯大於最大執行緒池容量允許的大小,那麼您可能要增加執行緒池大小,或調校共用執行緒模型。
如果尖峰訊息流量遠大於平均流量,則可能會影響您在記憶體不足時使用的限制運作方式。
一般而言,您對使用式樣的瞭解越多,您調校系統用於未來需求的式樣與計劃的能力越好。