EAI/ミドルウェア:インラインまたは参照による巨大なメッセージ
-
18-09-2019 - |
質問
大量のデータ (MBytes?) を扱うメッセージまたはリクエスト/レスポンスを処理するための優れたプラクティスはありますか?GBytes?) ミドルウェアまたは EAI システム経由で、ミドルウェアが巨大なデータ BLOB を転送するが処理しないと仮定して?
一貫性を保つためにメッセージとともにデータを転送しますが、おそらくシステム間で大量のデータを数回コピーすることになります。
データをストアまたはデータ リポジトリ (ファイル システム、データベースなど) に保持し、データへの参照を転送しますが、メッセージとデータの間の密接な結合は失われます。
この問題に対する一般的な解決策は何でしょうか?これは EAI またはミドルウェア製品によってどのようにサポートされますか?
解決
私の経験では、メッセージのサイズを制限することは良いことです。私が知っている環境 (Websphere MQ、SonicMQ) では、ほとんどのメッセージに対して 5 ~ 10 MB が適切な値であることがわかりました。多くの場合、サイズが 100 MB までのメッセージがほとんどなくても問題ありませんが、メモリ消費量などを考慮する必要があります。ほとんどのメッセージング API、特に JMS では、少なくとも一度はメッセージを完全にメモリ内に保持することになるため、並列処理を開始するときに頭痛の種が生じる可能性があります。
回避策として次の 2 つの方法を使用します。
- 使用 メッセージシーケンスパターン いくつかの追加を加えて:ほとんどの場合、完全性を確保するために、すべてのシーケンス番号の参照を含むトリガーを送信します。
- データへの「リンク」を送信する
通常、メッセージに構造化データが含まれる場合は常に最初のソリューションを使用し、メディア配布の場合は 2 番目のソリューションを使用します。
最初のソリューションについても、特定のソリューションを提供するのではなく、カスタム実装でこのロジックを実装する傾向があります。そのため、特定のメッセージング システムに束縛されません。
他のヒント
それは、あなたはあなたが疎結合を失ったように、動作しますが転送を開始するためのメッセージでのみ参照を送信元と送信先のシステムの間の直接接続を行うことが現実的である場合。
ブックエンタープライズ統合パターンによると、あなたはメッセージシーケンスパターンを実装することができます。
などTIBCOなどEAIシステムとの私の経験で。それはかなりあなた次第データを任意に大量に処理するために私たちの方法を把握する。