質問: ### **1秒間にリクエスト出来る数を制限する方法を教えて下さい。** 現在、AWSでEC2を2台構成でロードバランサーを使用しています。 アプリからAPIを通してこのAWSにアクセスしてきた際に、外部の別のDBサーバーにアクセスをし、 そこからデータを取得してアプリにデータを返す処理を行っています。 今回困っているのが、外部のDBサーバーの管理者から、「うちのサーバーには**1秒間に5リクエストまでしか来ないように制限**してくれないと、アクセス制限をかける」と言われてしまいました。 アプリからうちのサーバーにアクセスがきた時に制限をかけるのか、それとも外部DBサーバーにアクセスする際に制限をかけるのか、 どのように実現するのかが経験が無くわからないため、どなたか教えていただけないでしょうか? 因みに、サーバーはCentOS6.5で、外部DBサーバーへはAWS DirectConnectを使用しています。 何卒、よろしくお願い致します。 【追記】 CHERRY様 ご指摘頂きありがとうございます。 詳細な情報を記載させていただきます。 ``` 現在のアクセス数:1日あたり 大体10,000 〜 15,000アクセスになります。 ユーザーがサーバー負荷でアクセスできない状況は避けたいです。 可能であれば制限を超えてきたアクセスに関しては待ち?の状態にして、順次レスポンスを返すように出来ればと考えています。 APIの内容に関してですが、 外部のDBサーバーに本の情報が格納されており、新刊情報や検索APIが叩かれた時にその外部DBサーバーへアクセスして 情報を取得し、うちのサーバーで整形してアプリ側へデータを返す流れになります。 その他にユーザー登録のAPIもあります。 また、うちのAWSサーバーには管理画面も稼働させており、 APIの方だけアクセス数を制限できればと考えております。 ``` よろしくお願い致します。
回答: 通信経路や回線速度の問題があるので、「単位時間あたり○○アクセス」を直接設定するのは難しいと思います。 アプリケーションサーバやDBサーバが何をお使いか書かれていませんが、同時セッション数を制限するパラメータは存在すると思います。 それと現在の単位時間あたりのアクセス件数の統計情報を突合しつつチューニングする、というやり方になるのではないでしょうか。 ただ、アクセス制限をかけるとしたらアプリ側からだと思います。 アプリ側であれば、アクセス数があふれた際に「混みあっております」などと何かレスポンスを返す仕組みが取れると思いますが、DB側にのみアクセス制限をかけると、アクセスが集中したときのユーザビリティが悪くなることが考えられます。 (アプリが反応していないように見えるとか、応答が極端に遅く見えるとか) 一つ疑問なのが以下のくだりで、 >「うちのサーバーには1秒間に5リクエストまでしか来ないように制限してくれないと、アクセス制限をかける」と言われてしまいました。 このサーバ管理者は本当に困っているのでしょうか?それともそこまで強い言い方ではないのでしょうか。 というのも、15,000アクセス/日だと単純計算すると0.17アクセス/秒程度にしかならないなぁ、と思ったからです。 (単純平均というのが乱暴なのは分かっていますが)