マイクロサービスRESTまたはAMQP、どちらの場合


15

マイクロサービスアーキテクチャに関する多くの記事を読みましたが、AMQPまたはRESTをいつ使用すべきか疑問に思いました。

サービス間の疎結合は良いことであり、その場合AMQPが良い選択であるように思えます。しかし、AMQPを使用する場合、これはRESTエンドポイントが不要になることを意味します(ただし、HATEOASコンセプトが失われることを意味します)。

しかし、RESTは本当に私のサービスを構築するのに良い方法ですか?原因エンドポイントを使用しません...この場合、一方が他方より優れていますか?

いつどちらを使用すればよいですか?

回答:


10

RESTを破棄すると、単なるHATEOASをはるかに超えて失われます。マイクロサービスが公開されている場合(少なくとも1日公開される傾向がある場合)、RESTとSOAP以外を使用すると問題が発生します。

  • 一部の開発者はAMQPを使用したことがないため、

  • AMQPを使用した人もいますが、多くの場合、RESTとSOAPにはるかに精通しています。

  • 一部の言語のAMQPライブラリは特に単純ではありませんが、

  • サービスの手動実験は非常に限られています。CURLを使用してAmazon S3へのリクエストを行うことができます。S3のAMQPバリアントを使用したい場合、マシンに何をインストールする必要がありますか?

  • RESTとSOAPのデバッグは簡単です。HTTP交換を追跡して分析するだけです。AMQP交換をデバッグするためにどのツールを使用すべきかわからない。

AMQPは優れていますが、イベントに基づく交換という非常に特定の目的のために行われています。AMQPでRPCを実行することは技術的には可能ですが、それは主な目的ではありません。

非同期の側面も重要です。サーバーにリクエストを送信している間、アプリのユーザーインターフェイスをブロックしたくない場合があります。場合によっては、必要以上に物事が難しくなることがあります。ローカルのものが破損しているためにAmazon S3からファイルバックアップを復元し、バックアップを復元する必要がある場合、続行する前にバッチファイルのジョブを完了するには必然的にCURLが必要です、同期操作(特定のタイムアウトを使用)は完全に理にかなっています。

主要な操作のためにRESTを保持します。

  • 製品の入手、

  • 請求書の保存、

そして、メッセージングが実際に意味をなすタスクにAMQPを使用します。

  • 9月からのすべての請求書を処理し、レポートを表示する準備ができたらアプリに通知します(操作に通常2〜10分かかることを前提としています)。

    ここでのAMQPの利点は、非同期の側面です。10分間保留されているHTTP要求は、タイムアウトやその他の問題を引き起こす可能性が高くなります。

  • サポート担当者、データベース管理者、監視チーム、このデータベースを使用するアプリケーションの開発者など、関心のあるすべての人にバックアップが破損したという情報を送信します。

    ここでのAMQPの利点は、とりわけ、アプリケーションを変更せずにサブスクライバーを追加できることです。これにより、バックアップを追跡し、破損したものを検出するとアラートをトリガーします。


¹パブリックWebサービスは、必ずしも社外のユーザーが使用するわけではありません。大規模または中規模の企業では、サービスは同じ会社の他の部門で使用されることが多く、サードパーティが使用するものと同じ要件があります。同じ会社であなたのサービスを呼び出す人のことを聞いたからといって、セキュリティの問題を悪用しないという意味ではありません)、適切に文書化する必要があります英語を知っている)など


AMQPを使用して依存オブジェクトをロードするのはどうですか?課金サービス(大規模なマイクロサービスアーキテクチャ)に関連するユーザーのように、非同期性とREST REST hateoas(同期)アクセスの強さは?
トーマストーマス

5

両方を使う。

RESTスタイルのJSON Webサービスは、javascript、iosなどとの相互運用性に優れています

AMQPは、長時間実行されるプロセス、イベント、およびマイクロサービスのオーケストレーションに最適です。

ただし、どちらも実際のサービスの単なる通信ラッパーであり、同じサービスを複数の方法で公開できます。

AMPQはWebsocket上で適切に公開できます。Websocketは、目を凝らすとRESTエンドポイントによく似ています。


1
「目を細めたら」笑、それは素晴らしかった。
イアンダンカン

0

RESTは、コンポーネント間の相互運用性に特に適した標準テクノロジーです。これは重要な部分であり、他の誰かが利用できるWebサービスを作成するのに最適です。ただし、カスタムプロトコルよりも効率が低いという点で、このような相互運用性の通常の問題があります。

サービスが自分でしか消費されないバックエンドアーキテクチャを作成している場合は、好きなプロトコルを使用できます。相互運用性の高いプロトコルを使用することで制約がなくなります。MQまたはより緊密に結合されたパフォーマンスの高いものを使用できます。どちらを使用するかは、ユースケースによって異なります。メッセージバスは、クライアントが送信するメッセージの受信者を気にしないデータを処理する分散サービスセットに非常に適しています。


2
私が懸念している限り、彼らには相互の目的があることに同意しません。(一般に)AMQPを公開インターネット経由で公開しないでください。1つのことに対する認証機能がはるかに少ないため、通常、一般のインターネットユーザーはアクティビティからの応答を求めています。この理由から、RESTはパブリックインターネットの使用に最適です。ただし、最大の違いは、AMQPは非同期(動作のような同期は可能ですが、MQの目的ではありません)、RESTは同期です(返されるの202は非同期を決定しますが、なぜRESTを使用したのでしょうか?
ジミー・ホッファ

補足として、ユーザーがポーリングする代わりにリアルタイムのプッシュを取得できるようにWebSocket使用のためにAMQPを公開することが、実際に公開AMQPを行う理由です。繰り返しますが、目的を超えて、消費者がプッシュを取得できるようにRESTを実行しません。これは、RESTが実行できないことに対してAMQPを使用する別のシナリオです。
ジミーホファ

@JimmyHoffa私は彼が彼のウェブサーバーやクライアントなどをウェブ上ではなく内部LAN上のマイクロサービスにフックするために何を使うべきかを尋ねていたと思った-したがって、RESTはそれには適しているが、あなたが使用しているすべてがあなたの下にある場合コントロール、好きなものを使用できます。
gbjbaanb

ええ、それは確かに理にかなっています。私は彼の質問を別様に読みました。彼はマイクロサービスのアイデアについて読んだようで、AMQPとRESTを選択する関連する理由を理解していません。内部的には何でも使用できますが、内部でもAMQPとRESTを使用する特定の理由があります。非同期が必要なサービスは内部でAMQPを使用する必要があり、同期サービス(純粋な処理サービスと考えてください:Raw Data in-> Processed data out)はRESTである必要があります。両方のIPC技術には明確な長所と短所があります。それらを知っているので、回答に記載してください。:)
ジミー・ホッファ

0

AMQPは、ポイントツーポイント通信もサポートしています(たとえば、python-qpid-protonチュートリアルを参照)。REST !=HTTP なので、それを使用してRESTfulインターフェースを実装できます。

AMQPはHTTPよりもはるかに優れたパフォーマンスを発揮します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.