質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.42%
ロードバランサー

ロードバランサー【負荷分散装置】は、複数のサーバへアクセス要求を分散する装置です。 要求を分散することで各サーバが快適な応答速度を保つことを目的としており、 アクセスの多い大規模サイト等は、この装置により 複数のサーバに負荷を分散する事で安定な運用が可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

16144閲覧

サーバーのアクセス数/リクエスト数制限の実現方法について教えて下さい。

QazOkm

総合スコア12

ロードバランサー

ロードバランサー【負荷分散装置】は、複数のサーバへアクセス要求を分散する装置です。 要求を分散することで各サーバが快適な応答速度を保つことを目的としており、 アクセスの多い大規模サイト等は、この装置により 複数のサーバに負荷を分散する事で安定な運用が可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2016/09/09 09:07

編集2016/09/09 09:51

###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の方だけアクセス数を制限できればと考えております。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2016/09/09 09:37

アクセス数やデータの内容、ユーザーがアクセスが多いため利用できないことがあってもいいのか? など不明点が多く、アプリやAPIの概要を知らない人が回答できる内容ではないと思います。 もう少し具体的な情報を提供できないでしょうか?
guest

回答2

0

ベストアンサー

以下の条件であれば、iptables の hashlimit で制限できるかもしれません。

・EC2インスタンスが Linux
・EC2インスタンスから DB へのリクエストは 1リクエスト/1接続で、毎回 TCP ハンドシェイクを行なう(keep-alive ではない)
・DB に接続できない場合の処理をアプリケーション側で適切に行なっている。

iptables -A OUTPUT -p tcp --syn -d (DBサーバーIP) --dport (DBサーバーport) \ -m hashlimit --hashlimit-name db_outbound_limit \ --hashlimit-mode dstip,dstport --hashlimit-upto 2/sec -j ACCEPT iptables -A OUTPUT -p tcp --syn -d (DBサーバーIP) --dport (DBサーバーport) -j DROP

2つの EC2インスタンスから外部 DBサーバーへの接続を、それぞれ 2回/1秒 に制限します(2サーバーで 4回/1秒)。

2回/1秒 を越えた接続は TCP接続待ちになります。
この待ちの際のアプリケーション側の挙動がどうなるかはアプリケーション次第なので、どうなるかわかりません。
接続待ちが多くなってタイムアウト時間を過ぎてエラーとなるか、逆にタイムアウト時間が長く、接続待ちでネットワークソケットを使い切ってしまうかもしれません。

投稿2016/09/10 09:32

TaichiYanagiya

総合スコア12161

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

QazOkm

2016/09/12 14:28

詳細な情報をありがとうございます! タイムアウト等の問題が発生する可能性があるのですね、、 参考にさせていただきます。
guest

0

通信経路や回線速度の問題があるので、「単位時間あたり○○アクセス」を直接設定するのは難しいと思います。
アプリケーションサーバやDBサーバが何をお使いか書かれていませんが、同時セッション数を制限するパラメータは存在すると思います。
それと現在の単位時間あたりのアクセス件数の統計情報を突合しつつチューニングする、というやり方になるのではないでしょうか。

ただ、アクセス制限をかけるとしたらアプリ側からだと思います。
アプリ側であれば、アクセス数があふれた際に「混みあっております」などと何かレスポンスを返す仕組みが取れると思いますが、DB側にのみアクセス制限をかけると、アクセスが集中したときのユーザビリティが悪くなることが考えられます。
(アプリが反応していないように見えるとか、応答が極端に遅く見えるとか)

一つ疑問なのが以下のくだりで、

「うちのサーバーには1秒間に5リクエストまでしか来ないように制限してくれないと、アクセス制限をかける」と言われてしまいました。

このサーバ管理者は本当に困っているのでしょうか?それともそこまで強い言い方ではないのでしょうか。
というのも、15,000アクセス/日だと単純計算すると0.17アクセス/秒程度にしかならないなぁ、と思ったからです。
(単純平均というのが乱暴なのは分かっていますが)

投稿2016/09/09 13:50

ynakano

総合スコア1894

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

QazOkm

2016/09/12 14:30

詳細な情報をありがとうございます! やはりユーザビリティが悪くなる問題があるのですね、、 >このサーバ管理者は本当に困っているのでしょうか?それともそこまで強い言い方ではないのでしょうか。 出来れば的な感じはあったので、ちょっと相談をしてみたいと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.42%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問