C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: 同時ダウンロード時の負荷分散について


(過去ログ 101 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■60294 / inTopicNo.1)  同時ダウンロード時の負荷分散について
  
□投稿者/ うえちゃん (1回)-(2011/06/27(Mon) 11:58:03)

分類:[.NET 全般] 

環境:VisualStudio2008(C#・ASP.NET)、IIS7.0


既存のWEBサーバーにデータダウンロード用のサイトを追加しようと考えています。
コード自体は簡単に実装できるのですが、気になるのは「ネットワークの負荷」です。

大サイズファイルのダウンロードを考えているので、複数のクライアントが同時に
ダウンロードを始めると、過負荷によって、他のWEBページを参照しているクライアントに
影響があるのではないか(固まる等)と懸念しています。

そこで、このようなケースで負荷を分散するにはどのような方法があるのか知りたく
質問させていただきました。

いま思いついたもので、同時ダウンロードの最大件数を管理するというのを考えてみました。

・ダウンロード開始時にDBにレコードを追加(カウントアップ)、終了時にレコード削除する。
・レコードが最大件数に達している場合は、ダウンロードを開始せず、数分後にリトライしてもらう。
・ダウンロード中は、1分位の間隔で該当レコードの最終更新日時に現在時刻(タイムスタンプ)を記録する。
・DBを監視するプロセスを別に設け、最終更新日時に現在時刻と2分以上の乖離がある場合はレコードを削除する。

このような仕組みなら可能な気がしますが、他に簡単に出来るものがあればご教授いただきたく。
よろしくお願いします。

引用返信 編集キー/
■60297 / inTopicNo.2)  Re[1]: 同時ダウンロード時の負荷分散について
□投稿者/ 774RR (596回)-(2011/06/27(Mon) 12:36:40)
俺は IIS は知らないんだけど Apache なら mod_bwshare とかあるし、
わざわざ自作しなくても、もう既にあるんぢゃないかな・・・

帯域制限 IIS でごっごる様にきいたら
http://d.hatena.ne.jp/river34/20100407

引用返信 編集キー/
■60302 / inTopicNo.3)  Re[2]: 同時ダウンロード時の負荷分散について
□投稿者/ 逆運の覇者 (21回)-(2011/06/27(Mon) 13:43:14)
どれほどのユーザー数とマシンスペックかは知らないが、
一分置きに接続数分のDB検索が一斉に始まるのか。
胸が熱くなるな。
引用返信 編集キー/
■60303 / inTopicNo.4)  Re[3]: 同時ダウンロード時の負荷分散について
□投稿者/ うえちゃん (3回)-(2011/06/27(Mon) 14:05:21)
774RRさん、逆運の覇者さん、ご意見ありがとうございます。

やはり自作は現実的ではないのですね。。

確かにWebサイトのプロパティに帯域制限なる項目がありました。
最大同時接続数も設定できるようなので、ここで設定して動きを見てみたいと思います。

気になるのは、最大同時接続数というやつですかね。
例えば、あるクライアントがダウンロードしている最中にネットワーク断が発生した場合、
どのくらいの時間待てば、現在の同時接続数が減るのでしょうか?

引用返信 編集キー/
■60304 / inTopicNo.5)  Re[4]: 同時ダウンロード時の負荷分散について
□投稿者/ 774RR (597回)-(2011/06/27(Mon) 14:38:21)
ネットワーク断と簡単に言うが 何を持ってネットワーク断とするのかは判断困難。
状況の良くない ADSL で再ネゴとかしてると数分単位で切れるのはごく普通の話。
チャンネルかぶっている状況下での無線接続などでも同様。

とりあえずネットワークセッションタイムアウト=ネットワーク断と定義することにすると、
セッションタイムアウト値は IIS の設定にあったはず。
工場出荷値は20分だったような気がする。

引用返信 編集キー/
■60306 / inTopicNo.6)  Re[4]: 同時ダウンロード時の負荷分散について
□投稿者/ 逆運の覇者 (22回)-(2011/06/27(Mon) 14:42:41)
私の考えるところは、
「すべての要求に対して、頻発的に処理をするべきではない」
言い換えれば、
「量の多い処理を無駄に発生させることはない」
ということです。

ユーザーがダウンロードしたときにユーザーに関するデータをセッションに書いておき、
次のダウンロードのときにそれをチェックするような処理をできるならば、
そうして処理を減らすべきだということです。

ユーザーの接続数や接続した時間などのユーザー情報はセッションで管理されているでしょう。
引用返信 編集キー/
■60309 / inTopicNo.7)  Re[5]: 同時ダウンロード時の負荷分散について
□投稿者/ うえちゃん (5回)-(2011/06/27(Mon) 15:49:47)
774RRさん、逆運の覇者さん、またまたコメントありがとうございます。

IISの設定(サイトの詳細設定)にある「最大同時接続数」と「接続のタイムアウト(秒)」を使うことでなんとかなりそうです。
#デフォルトはそれぞれ「4294967295」と「120(秒)」でした。
#アプリケーションではなくサイト単位の設定なので、ダウンロード専用のサイトを設ける必要がありますが。。

試してみたところ、最大同時接続数を超えて接続を試みるとクライアント側に503が返ります。
また、接続中のクライアントのネットワークケーブルをブチっと引っこ抜き、上記タイムアウト
時間を経過すると、現在の同時接続数が元に戻ります(切断された)。

これでなんとか胸が熱くなるな想いをさせずに済むかもしれません。

お二人ともアドバイスありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -