TIBCO JMSをより能力的に最適化するためにどのようなステップをとることができますか?
-
14-11-2019 - |
質問
TIBCO-EMS JMSを利用して、メインサーバーとの間で多数のメッセージをクライアント接続に渡すハイスループットシステムを実行しています。私たちはいくつかの統計をしました、そしてJMSがたくさんの待ち時間を引き起こすことを決定しました。TIBCO JMSをより慣習的にするにはどうすればよいですか。このトピックについて良い議論をするリソースはありますか。
解決
永続的なメッセージを使用する必要がない場合は、非永続メッセージの使用が1つのオプションです。 永続性が必要な場合でも、永続的なメッセージではないメッセージを使用することができ、クラッシュが異なる復旧アクションを実行するのが良いことがあります(すべてのメッセージを再送信する)
:
- クラッシュはまれです(回復が時間がかかるので)
- クラッシュを簡単に検出できます
- 重複メッセージを処理できます(クラッシュの前にどのメッセージが配信されたかをわからないかもしれません。
EMSは、持続的なメカニズムも提供していますが、弾丸証明は、古典的な保証配達を提供します。 これらには以下が含まれます:
- 「完全に1回」メッセージ配信の代わりに「少なくとも1回」または「1回まで」配信を使用することができます。
- アプリケーションが要求する前にクライアントがメモリにメッセージを取得する前のフェッチメカニズムを使用できます。
他のヒント
EMSはボトルネックになされてはいけません。私はテストをしました、そして私達は私達のサーバー上でスループットのシトロードを得ました。
ボトルネックがどこにあるかを判断する必要があります。メッセージのプロデューサまたは消費者の問題です。待ち行列上にメッセージが移植されます。
あなたはどのようなシナリオをしていますか。
パブ/ supまたは返信を要求する? 一時的なキューを積んでいますか。一時キューが多すぎると、パフォーマンスの問題が発生する可能性があります。 (主に彼らが正しく何かを閉じなかったので彼らが残るとき)
あなたはそうであれば、永続的な加入者を持つトピックに公開していますか。トピックをキューと読みから読み上げてください。永続的な加入者は、すべてのメッセージのコピーがある人を見つける必要があるため、パフォーマンスで少しのHiccupを引き起こす可能性があります。
送信プロセスに1つのセッションがあることを確認して、そのセッションを実行します。各操作に完全なセッションを開かないでください。可能な限り再利用。消費者のために同じことをしなさい。
あなたが終わったら閉じることを確認してください。 EMSは物事を明確にしません。あなたが接続をするならば、あなたのアプリを閉じているならば、接続はまだそこにあり、リソースを吸っています。
クラッシュの偶数の失われたメッセージの許容誤差を確認してください。クライアントACKを実行している場合は、メッセージを処理した場合は問題になりません。その後、自動的に切り替えます。また、あなたが使用しているのであれば(TEMS - TIBCO EMS)セッション確認に問題があります。そのため、メッセージ全体で処理されたときにのみメッセージはクライアントACKからDUPSをOKしていて、より良く機能していたものに切り替えます)