1

現在、2つのアプリを実行しています...

1 つは、フロントエンドに多数のサービスを提供する REST API レイヤーです。もう 1 つは「翻訳アプリ」です。JSON オブジェクトを (http POST 呼び出しを介して) フィードし、そのオブジェクトに対してデータ変換とマッピングを実行して、REST レイヤーに返すことができます。

私の状況は、多数のオブジェクトに対してこれを行いたいということです。私が望むフローは次のとおりです。

ユーザーが特定の形式で 100,000 個のオブジェクトを要求 -> REST レイヤーがデータベースからそれを取得 -> 各 JSON データ オブジェクトを変換サービスに渡して書式設定を実行 -> それぞれを REST レイヤーに戻す -> REST レイヤーが新しいオブジェクトをユーザーに返す.

私がやりたくないのは、100,000 回の異なる呼び出しで tranlate.example.com/translate を呼び出したり、1 つの巨大な POST 要求でメガバイトのデータを渡したりすることです。

したがって、明らかな答えは、データを翻訳アプリにストリーミングしてから、データをストリーミングして戻すことです。

アプリ間でデータをストリーミングするための多くのソリューションがあるようです: websocket (socket.io) を開く、2 つの間の生の TCP 接続を開く、または Node の HTTP 要求と応答データは実際にはストリームであるため、それを利用できます次に、正常に変換されたときに JSON オブジェクトを発行します

私の質問は、2 つのアプリ間でデータをストリーミングするためのベスト プラクティスはありますか? 「REST」モデルを維持するには、http(req, res) ストリームを使用し、長寿命の接続を開いたままにしておく必要があるようです。提供できるサンプルはどれも素晴らしいでしょう。

4

1 に答える 1

4

これは、メッセージ キューの最適な使用例の 1 つです。基本的に、翻訳サービスによって翻訳されるデータのキューと、すでに翻訳されてユーザーに送り返す準備ができているデータのキューを作成します。REST レイヤーと翻訳レイヤーは、該当するキューに対して発行およびサブスクライブし、データが入ってくると処理できます。これには、REST と翻訳レイヤーを切り離すという追加の利点があります。つまり、後で複数の翻訳レイヤーを追加して処理することが簡単になります。必要に応じてロードします。

RabbitMQを見てください。他にもたくさんのオプションがあります。

于 2014-12-18T17:15:42.113 に答える