2017-01-07 4 views
1

RESTベースのWebサービス(POST)を非同期で作成することは、一度に何千もの要求を処理する最善の方法です(要求を処理するサーバーが1つしかないことに留意してください)。一度にRESTベースのWebサービスで何千ものリクエストを処理する方法は?

編集: ジャージに間違ったタグが付けられています。 例:私は非常に短い時間(約60秒)内に10万人のクライアントによって消費されるはずの、残りのベースのWebサービスを持っています。私は、サーバーの複数のインスタンスを展開することが許可されている場合、ロードバランサを使用してすべての着信要求を処理し、それに従って適切に委任できることを理解しています。しかし、私は1つのインスタンスだけを使用するように制限されています。この制限内でどのようなデザインを選ぶことができますか? 私は、サーバがこの負荷から解放され、それ自身のペースで要求を処理できるようにするために、要求を非同期(クライアントに即座に応答しない)にすると考えることができます。 今のところ、メモリの制限を無視できます。 これがあなたの疑いを明確にしているかどうか教えてください。

+0

詳細を教えてください。残りのリクエストが非同期でサーバーによって行われた場合、クライアントに値を返す方法はありますか?非同期とは、サーバーをスケールアップするためのNIOベースのアプローチを意味し、Jerseyとは何の関係もありません。それでは、これにも限界があります。そしてAFAIKこのアプローチでも、一度に何千ものリクエスト(まったく同じ時刻)が可能でない可能性があります。 –

+0

あなたはその質問についてもっと精巧にする必要があります。答えは、あなたの選択したデータストレージに依存します。 Redis(https://redis.io/commands/incr)などの高度なキー値保存サービスを見て、APIのレート制限に関するドキュメントを読んでください。他のオプションは 'nginx'です - これは速く、設定ファイルを変更することで簡単に設定できます。 – KuboAndTwoStrings

+0

@AtlasShruggedこんにちは..ご意見ありがとうございます。私はより多くの説明で質問を編集しました。これがあなたの疑いを解消することを願っています。 –

答えて

1

非同期という用語は、別の場所では異なる意味を持つ可能性があります。 Webアプリケーションコードの場合、ノードやNetty/AkkaなどのNonblocking I/Oサーバーを参照することができます。これは、HTTPリクエストが同じワーカースレッドで時間多重化する方法です。コールバックを書く場合、または非同期または将来の構文を使用する場合は、非ブロッキングI/Oであり、時には非同期と呼ばれることもあります。

しかし、ノンブロッキングI/Oを実装するノードでREST APIを実行できますが、APIまたは全体のアーキテクチャはまだ完全に同期しています。たとえば、写真を取り込んで画像のサムネイルを作成し、その画像のURLをSQL Dbに保存してS3に保存するAPIエンドポイントPOST/photosがあるとします。イメージが処理されて保存されるまで、REST APIは最初のPOSTからブロックされる可能性があります。

2番目の方法は、サーバーがフォトプロセスをジョブとして受け入れてすぐに戻ることです。その後、サーバーはメモリまたはネットワークベースのキューに写真を格納し、後で他のワーカースレッドによって処理されるようにすることができます。実際、古いJava 7やJettyのようなブロッキング・サーバーでも、この非同期アーキテクチャーを実装できます。

関連する問題