イントロダクション
特定の Web サーバへ短期間に大量のアクセスが実行されると、正常な応答が返せなくなるということが発生します。特に、普段あまりアクセスが無いような Web サイトの Web サーバだと、日ごろから大量のアクセスを処理しているような Web サイトから紹介された(リンクをはられた)場合に、あっという間に高負荷になってしまいます。
Web サーバが高負荷時になる例)
- Yahoo! ニュースで紹介された
- 有名な 2ch まとめサイトで紹介された
- テレビのニュースで紹介された
Webサーバの高負荷時の処理として、指定時間後に表示するという仕組みが興味深い
Web サーバが高負荷になると発生すること
Web サーバが高負荷時になると発生する現象として、次のようなものがあります。(1) Web ページの表示が遅くなる
(2) Web ページ内の画像などのリソースがなかなか表示されない。もしくは表示されない
(3) 高負荷時用のページ(高負荷のため、正常にページを表示できないことを表示するもの)が表示される
(4) Web ページが読み込み中のままになり、ブラウザの画面が真っ白になる
(5) 読み込めなかったことを示すブラウザのエラー画面が表示される
このような状態に遭遇すると、どうしてもブラウザのリロードボタンを押して、ページを再読み込みしたくなります。
その結果、
1.Web サーバが高負荷時になると、Web ページが正常に表示できなくなる
↓
2.リロードが実行される
↓
3.更に、Web サーバの負荷が高くなる
↓
(1.へ戻る)
といった負の連鎖が発生します。
その結果、Web ページの表示が遅くなったり、Web ページのリソースが欠ける程度で済んでいた場合であっても、Web サーバが応答を返せなくなるような負荷にまで発展してしまう可能性があります。
ユーザによるページの再読み込みを抑止する仕組み
Web サーバの高負荷時における興味深い動作を、最近見ました。それは、指定時間後に自動的にページを表示してくれるというものです。
その時の動作を以下に示します。
高負荷時の Web サーバの Web ページをブラウザで表示する
↓
「30 秒後にページを表示します。」という画面が表示される
↓
1 秒ごとに、「x 秒後にページを表示します。」の x の部分が減っていく
↓
カウントが 0 になったら、正常に Web ページが表示される
高負荷時の Web サーバにおける、 ユーザによる過度なリロードを防ぐ為の動作 |
これは、素晴らしい仕組みだと思いました。
素晴らしい仕組みと感じた理由を、以下に列挙します。
(1) 表示までの時間を明示することで、安心して待てる
ユーザ側としては、その Web ページがいつ正常に見られるのかわからないために、リロードを繰り返してしまいます。
そのため、正常に見られるまでの時間を秒数(しかもカウントダウンして)で示してもらえると、安心です。
(2) カウントダウンを表示することで、処理が正常に動いていることを可視化できる
ユーザとしては、そのような異常時において、処理が正常に動いているのか(フリーズしてしまっていないのか)という点に不安を感じます。
そのため、Webページ上でカウントダウンが表示されることで、処理が正常に動いているという安心感をユーザに与えることができます。
カウントが 0 になったのに、ページが正常に表示されなければ何かトラブルが発生していると認識することができます。
また、カウントダウンはサーバ側とは関係なく行うことが出来ますし、サーバ側とは関係なく(JavaScriptで)行うわけですが、"動きのない"異常を知らせるページの前で待っていることほど、不安を感じることもないでしょう。
(3) リロードすると、待ち時間がリセットされそうなので、待った方が良さそうに感じる
「30 秒後にページを表示します。」という画面でリロードを試した時にどのような動作になるのか試していないため分かりません。
しかし、直観として待ち時間が初期値(ここでは 30 秒)に戻ってしまいそうに感じました。
そのため、ページをリロードするよりも、このまま待った方が良さそうだと感じました。
上記の理由により、ユーザの過度なリロードによって、Web サーバの負荷が必要以上に増加してしまうという問題を解決しているように見えました。
まとめ
Web サーバの高負荷時における興味深い動作として、指定時間後に表示するという仕組みを取り入れているところを見かけました。ユーザのリロードによる更なる負荷を抑制するための仕組みとして、とても良いものだと感じました。
コメントを投稿 (ここをクリックしてコメント投稿フォームを表示)
コメント投稿機能について