負荷を掛ける日々
皆さんこんにちは! SATTで開発業務に携わっております『てっかまき』です。
最近自席でウインドウをたくさん開いて”怪しいツール”を使っているように見えますが、
その実態はなんと『Webサイトに負荷』を掛けています。
DoS攻撃!? F5アタック!?
いいえ、負荷テストをしています。
※もちろん、本当に利用されているサイトではなく検証用のサイトで行っています。
負荷テストとは何なのか
負荷テストとは、システムに対して高い負荷を掛けた状態で、そのシステムが正常に動作するかどうかを確認する試験です。
例えばですが、人気のチケットが取りたいような時に、
チケットの販売サイトのサーバーが落ちている(不安定・停止)状態になったことはありませんか?
(最近だと某水の呼吸の映画のチケット販売サイトが凄まじく重かったです)
平常時は普通に動いているようなサイトでも、同時に大量のユーザーからのリクエストが来てしまうと、それを処理しきれずにエラーが発生してしまう場合があります。
チケット販売なら仕方がない(仕方がなくない)ですが、
学び〜との受講中などにエラーが発生してしまうと大問題となってしまいます。
このようにWebサービスもある程度の負荷に耐えられることで初めて動いていると言えるのです。
しかし、一人でF5キーを連打しても大した負荷を掛けることはできません。
そのため、ツールを使って数千人規模のユーザーが受講しているという状況を再現し、システムが正常に動作するのかをテストしている、というのが事の真相です。
パフォーマンスも大事
さて、サーバーが落ちなければそれでよいのかといいますと、それも違います。
例えば、リンクをクリックしても、次のページが表示されるまでに何分もかかってしまうようでは意味がありません。
実は負荷テストでは処理時間も重要な観点となっています。
ここで最後に覚えてもらいたいのがN+1問題です。
これはパフォーマンス改善の中でも特に重要な問題です。
何のこと?という方のために、なるべく簡単な例を使ってご説明いたします。
データベースという情報の貯蔵庫から、
3人のユーザーの受講履歴を引っ張りだすことを例にします。
この場合、
@ユーザーが誰が何人いるかを検索する。→AさんBさんCさんの3人がいることが分かる。
AAさんの受講データをください。→Aさんの受講履歴を抽出する。
BBさんの受講データをください。→Bさんの受講履歴を抽出する。
CCさんのデータをください。→Cさんの受講履歴を抽出する。
というように1回の命令+人数分の命令=4回の命令をしてしまうのが、実は問題なんです。
一見すると問題が無いようにも見えますが、これがユーザーが1万人いるサイトだとどうでしょうか?
そう、10001回の命令が必要になります。
じゃあ、10万人だったら... 100万人だったら...ということになりますよね。
これを解決するための方法は簡単な一例ですが、
@ユーザー誰がいるかを検索する。→AさんBさんCさんの3人がいることが分かる。
AAさんBさんCさんのデータをください。→AさんBさんCさんの受講履歴を抽出する。
という処理に直すだけです。
こうすると、たった2回の命令にすることができます。
例え1万人いるサイトだったとしても10万人いるサイトでも100万人のサイトでも2回の命令で処理が終ります。
一見すると言葉のトリックのようなことを書いていますが、
こういった命令回数の積み重ねは負荷テストの中でも特に注意すべき観点となっています。
このような無駄な処理を発見するのも、負荷テストを行う理由になるんですね。
多人数で受講するなら是非学び〜とを!
eラーニングシステムを多人数で受講されたい方は、ぜひ学び〜とをお願いします!