web-dev-qa-db-ja.com

JMSを使用する場合とRESTを使用する場合

特定の問題の非同期/同期の性質に加えて、MOM(この場合はJMSを選択した)が負荷分散などの追加機能を無料で提供することを考慮すると、RESTまたはその逆?

ありがとう

40
jmdev

常にRESTを使用します。これは、現在利用可能な最も近代的で高度でスケーラブルな統合アプローチです。 RESTベースのサービスは、ハードウェアまたはソフトウェアHTTPロードバランサーで簡単に実現され、JMSのロードバランシングと同様に無料と見なすことができます。

MOM (メッセージ指向ミドルウェア) は簡単に拡張できません(ただし、ニーズに合わせて十分に拡張できます)。 RESTはWebスケールで機能します。

MOMには スケールの経済 はありません。データ取得要求の場合、特定のデータが要求されるたびに、別のメッセージをサーバーに送信し、サーバーが応答する必要があります。 REST=ベースのシステムでは、同じデータに対するリクエストは HTTPキャッシュ によって処理できます。これは、リクエストの量が時間とともに増加するにつれて、MOMベースシステムは、リクエストと同じレートでサーバーの負荷が増加することを確認します。REST=ベースのシステムは、リクエストよりも遅いレートでサーバーの負荷が増加することを確認します.

MOMは、配信が保証された「ファイアアンドフォーゲット」メッセージであなたを誘惑しますが、 連鎖の管理の問題 で噛むだけです。

MOMは、サーバーがダウンしているときにゆっくりと失敗する(つまり、タイムアウトを待つ)ため、同期要求/応答に対してひどいです。リクエストが失敗する場合、すぐに失敗するようにします。サーバーがダウンしている場合、RESTベースのサービスへのHTTPリクエストは(TCP接続で)すぐに失敗します。

MOMは非同期の要求/応答メッセージングに役立ちますが、要求と応答の間に状態を保存する場所の問題が残ります(ヒント:オプションは ファイルまたは通常のデータベース =、 メッセージ または NoSQLデータベース )。多くの場合、追加の実装作業は、非同期性の認識された利点の価値はありません。また、RESTベースのサービスは、本当に必要な場合は非同期リクエストをサポートします。 202 Accepted は、この状況での友人です。

最後に、キャッシングを使用すると、REST=ベースのシステムでプルベースの統合を実装できます。これは、サポートがはるかに簡単です。たとえば、システムAからシステムBにデータを移動したいとします。 MOMのアプローチは、AからBにメッセージを送信することです。ARESTベースのアプローチは、Bが新しいデータをポーリングするRSSフィードなどのAのデータフィードサービスを作成することですRSSリーダーが新しい記事をポーリングするのと同じ方法です。MOMの例でBが失敗した場合、サポートチームはメッセージキューを監視して、オーバーフローしないことを確認する必要があります。 REST例、サポートチームはBのバックアップについて心配する必要があります。Aが失敗した場合、ほとんど違いはありません。MOMの例では、Bは気にしません。 。RESTの例では、BはAがダウンしていることを知っていますが、ダウンしているときは明らかにAからの新しいデータがないので気にしません。非常に縫い目が必要です非効率的ですが、HTTPキャッシングによりこれは問題になりません。

つまり、JMSサーバーに投資する代わりに、優れたキャッシングHTTPロードバランサーに投資します。

48
Tom Howard

これら2つのテクノロジーを比較することはできません。

[〜#〜] rest [〜#〜]は、ステートレスリソースにアクセスするための体系的な方法を提供するサービス/パターンです。

MOM Systems/JMSは、システム間でメッセージを共有するために設計されたパターンです。信頼できる方法でデータを入力、出力します。


JMSをRESTと実際に比較することはできません。これは、JMSがさまざまな問題を解決するためです。


しかし、あなたの質問がもっと進んでいるなら、JMSキューにRESTインターフェースが必要ですか?そのすべての状況では、REST= JMSのメッセージをキューに入れるロジックネッセサリーからシンクライアントを保護します。たとえば、Android JMSを通信したいクライアントがある場合、メッセージを「休憩」にプッシュするよりもはるかに難しい変換し、JMSにプッシュできるインターフェイス。

20
Nix