RESTまたは多層異種システムのメッセージキュー?


9

Client application-> Front-end API cloud server->のような3層システム用のREST APIを設計していますuser's home API server (Home)

Homeはホームデバイスであり、Front-endWebsocketまたは長い投票(これは、RESTに違反している最初の場所です。後でさらに悪化します)を介した接続を維持することになっていますFront-endほとんどの場合、Client要求をHome接続にトンネルし、一部の呼び出し自体を処理します。にHome通知を送信することがありますClient

Front-endHome基本的に同じAPI を持っています。LAN経由で直接Client接続している可能性がありますHome。この場合、それ自体にHomeいくつかのClientアクションを登録する必要がありFront-endます。

このシステムでのRESTの長所は次のとおりです。

  • RESTは人間が読める形式です。
  • RESTには、動詞(CRUDなど)、名詞、および応答コードのプロトコルオブジェクトへの明確に定義されたマッピングがあります。
  • HTTP上で動作し、可能なすべてのプロキシを渡します。

RESTコントラは次のとおりです。

  • リクエストとレスポンスのコミュニケーションスタイルだけでなく、パブリッシュサブスクライブも必要です。
  • 3層通信エラーを処理するには、HTTPエラーコードでは不十分な場合があります。必要な接続が壊れていて、あるはずだったことを知るためだけに、非同期呼び出しにFront-end戻る場合があります。202 AcceptedHome503
  • Homeにメッセージを送信する必要がありますClientClientポーリングするFront-endか、接続を維持する必要があります。

我々は考えているWAMP / アウトバーンを、それがすでにメッセージキューのように見ていることを私を襲ったとき、機能をパブリッシュ/サブスクライブを取得するのWebSocketの上に。

一種のメッセージングキューをトランスポートとして評価する価値はありますか?

メッセージキューの逆のように見えます:

  • CRUD動詞とエラーコードをメッセージレベルで自分で定義する必要があります。
  • 「メンテナンスコストが高い」と書いてありますが、どういう意味ですか?

これらの考慮事項はどのくらい深刻ですか?


1
クラウドサーバーが混在しているのはなぜですか?それがするすべてのように聞こえるのは、それがホームサーバーと同じマシン上でもっともらしいように生きるべきだと私に思わせるリダイレクトです...
ジミー・ホファ

3
メッセージキューを分析するときは、それらのほとんどがプライベートLAN用に最適化されていることに注意してください。低遅延、制御されたクライアント、保護されたネットワークなど、キューをインターネットに公開すると、セキュリティ上の大きな問題になる可能性があります。
ハビエル

@Jimmy Hoffa有効なポイント、ありがとう。その通りですが、完全ではありません。これは一般的なデータベース、ストレージなどです。@Javierありがとう、それは答えの良い部分です。
Victor Sergienko 2013年

ホームサーバーは、一部のユーザーの自宅とクラウドのフロントエンドで実行することを目的としていますか?家はフロントエンドに接続し、クライアントはフロントエンドを介してメッセージを家に送信します。私があなたのデザインを正しく理解していれば、神の答えを出すことができます。
Michael Brown

@Mike Brown丁度。してください。
Victor Sergienko 2013年

回答:


5

接続性がある場合は、メッセージキューを使用します。ただし、特定の構造と形式のメッセージを送信するには、独自のプロトコルを定義する必要があります(難しいタスクではありません)。

メンテナンスの問題は、通常、クライアントとサーバーが別々に構築されるため、両端が同じメッセージ定義を使用するように注意する必要があることですが、十分に整理されていない場合は、RESTで使用するのと同じXMLを使用してください。サービス。

インターネットを介した接続の問題があり、ポート80とhttpのみで「単方向」通信がある場合は、RESTスタイルのシステムがおそらく最適です。送信してポーリングするか、コールバックデータを取得するためにWebSocketを取得しますが、通常はシステムをクライアント/サーバーとして設計します。接続を取得できる場合は、メッセージングシステムが最適です。

メッセージングシステムにはZeroMQを使用します。フォールトトレラントシナリオを含め、あらゆるシナリオでねじれるように構成できます。しかし、それがhttp動作するかどうかはわかりません。


ありがとう。@Javierコメントの後に見つけたもの:ØMQは暗号化自体をサポートしていないようですatm:zeromq.org/area : faq#toc8 RabbitMQはサポートしています:rabbitmq.com/ssl.html
Victor Sergienko 2013年

接続性があるかどうかわかりません。HomeユーザーのホームデバイスでありClient、Wi-Fiまたは3Gを介したスマートフォンです。質問の大きな部分の1つは、NATトラバーサルメソッドについての私の無知です。
Victor Sergienko 2013年

5

アウトバーンはあなたがやろうとしていることにうまく適合しているようです。他にも利用可能なツールがあります。Windows Azureサービスバス(Java、.NET、PHP、Python、NodeJS、Rubyのクライアントフレームワークを備えています)を確認してください。

組み込みの休憩メッセージは便利ですが。アプリケーションが基本的なCRUD操作よりも大きくなることがわかります。たとえば、アプリケーションが銀行システムである場合。の代わりに

Acct 54321のバランスを更新=バランス-20.00 Acct 98765のバランスを更新=バランス+ 20.00

あなたはおそらく単一のメッセージが欲しいでしょう

アカウント54321からアカウント98765に20.00を転送

この障害をRESTではなく今すぐに発見するのが最善です。アプリケーション内でメッセージングのためのよりリッチなモデルを作成する方法について説明しているGreg Youngのイベントセントリックをチェックしてください。


どうもありがとう。確かに、私たちはCRUDを超えてしまうかもしれませんが、間もなくではありますが、ドメインは非常に単純になりました。ちなみに、この本はまだ発行されておらず、グレッグのブログでいくつかの資料を見つけようとしています...マイクロソフトのテクノロジーを使用する必要がないのは良いことだと思います。
ビクターセルジャンコ2013年

彼の本がまだ出ていないのを待ってください...彼はそれについてとても長い間話していました...私が知っている別の技術的な著者のように聞こえます。: ">
マイケルブラウン

1
参考までに、RESTアプローチは、作成する転送リソースを持つことです。または、通過することも通過しないこともできるTransferRequestです。RESTは扱いにくい場合がありますが、これはその1つではありません。
JacekGorgoń15年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.