質問: 一般公開されている外部のWeb APIを利用したWebアプリケーションを開発します。 Webアプリケーションにて利用者に入力されたキーワードをそのWeb APIに渡すと、Web APIからキーワードに関連したデータが返却されます。 そのWeb APIは1秒間に1回のリクエスト制限があります。 したがって複数の利用者からの同時大量アクセスがあった場合、リクエスト制限が発生します。 そこで、Web APIへのリクエストを1秒間1回に収めるために、Webアプリケーションへのアクセスを順番待ちで捌くような制御をする必要があると考えています。 下記のような対策方法案があります。 1. DBに順番待ちテーブル(窓口の整理券のような役割)を設ける 2. クライアントからリクエストを受けたら順番待ちテーブルに新規レコードを追加 3. 順番待ちテーブルのレコード数から待ち時間を決定(例:自分より前に3人並んでいたら待ち時間は3秒間) 4. サーバー側では待ち時間分スリープ処理を実施した後にWeb APIへリクエストを実施し、クライアントへレスポンスを返す 5. 順番待ちテーブルから対象レコードを削除 この対策方法(設計)は適切でしょうか? APIリクエスト超過に対して他に良い対策が思いつかず、この対策方法・設計で進めていいのか悩んでいます。 よろしくお願いします。 ※システム構成 ------- * ロードバランサにWebサーバ複数台(Nginx)をぶら下げます。 * データベースサーバ1台(MySQL) * PHP ※その他 ---- * Web APIへのリクエストを節約するためWebサーバではキャッシュを利用します。 * 定期バッチ処理などでWeb APIからデータを取得しておくことで、Web APIへのリクエスト数を抑える方法は現実的でないため考えていません。
回答: うえでコメントした内容を図にしてみました。 !画像の説明をここに入力