#はじめに
昨年、「 はじめてのAPIサーバー負荷試験で得た最低限の負荷試験知識」という記事を投稿しましたが、あれに追記する意味合いでこの記事をかきました。
今回のテーマは負荷試験でつかう想定値は大きければ大きい程良いよね!っていう意見に対して考えた事をまとめます。
#大は小を兼ねる意見
負荷をかける時の目安として、想定値を出すという話しを前回の「はじめてのAPIサーバー負荷試験で得た最低限の負荷試験知識」で書きましたが、 想定値とはリリース後に大きな負荷にも耐えられる環境を作る為の指標になります。
そこで、こんなやり取りがあったとします。
ある日、負荷試験をする為に想定値を出した資料を見ていると、負荷試験のゴールである目標値が大きい事に気がつきました。
自分:「この、目標値の計算の元になっているDAUの想定値が大きい気がするのですが、この数値は正しいですか?」
相手:「正直、正しいかどうかはわからないですが、これだけ捌ければ爆発的にヒットした場合も耐えられるだろうと数値になっています」
自分:「んーそれは大きすぎる気がしますね」
相手:「しかし、これだけ耐えられれば安心できるので、なんの問題も無いようにおもうのですが?」
自分:「んー...(うまく説明できない...)」
この時、悶々としながらも 「これだけ捌ければ爆発的にヒットした場合も耐えられるだろう」 という言葉に確かにそうだなーと思いました。
まさに大は小を兼ねるという意見です。
しかし!それではダメなのです。
ちゃんと現実的な想定値を出す事は大事なのです!
では、なぜ想定値が多いとダメなのかを考えたので、まとめてみます。
#なぜダメなのか?
修正コストがかかる
まず、サーバー1台あたりのスループットが出た所で、必要台数分を掛け算した分だけスループットが出るわけではありません。
実際には増やせば増やす程、コネクションだったりロックだったりデータ量だったり、色々な所が原因で劣化は起きます。
そのため、想定値を膨大な数値で出した時に、どこかに問題がおきてうまく捌けなくなる事もあるかと思います。
しかし、もしかしたら正確な想定値なら問題なく捌けるかもしれません。
想定数が大きすぎて問題が起きている可能性を考えた時に、本当に修正コストをかけるべきかどうかが問題になります。
クラウドサーバー等の場合、負荷試験環境を維持しているだけでも多額の費用がかかるので、ここは極力必要以上な時間とコストはかけたく無い所です。
まぁ、時間と予算が潤沢にあるならば話しは別ですが。。。
##ロングラン試験の結果にも影響
これは上の「修正コストがかかる」の内容と一緒ですが、台数が多い事で想定よりも劣化が早く現れ、修正してからまたロングランテストの繰り返しになります。
かなり時間のかかる工程ですが、想定数の算出はここにも影響してくる事が考えられます。
かなりの時間とコストがかかってしまう事が考えられますね。
まぁ、ここも時間と予算が潤沢にあるならば無問題ですが。。。
##正確に必要なスペックを算出できない。
例えばAWSなどのクラウドサーバーの場合、必要なスペックによってインスタンスサイズを決定します。
だいたいは負荷試験の結果によってインスタンスサイズを決めると思うのですが、ここでも想定数の見積もりが多すぎると、インスタンスサイズの選定を見誤ってしまいます。
そうすると、実運用時に必要以上のスペックの環境を運用する事になり、無駄に出費が多くなってしまいます。
これは、リリース後にも響いてくる事なので、影響度は大きいと思います。
と考えをまとめましたが、こんな風に特にコストが増えるというデメリットが大きいです。
#どうやって算出すれば良いの?
想定数が大きい事で抱える問題が分かった時に疑問に感じるのは、「大きすぎない想定値ってなんなのさ!」って事だと思います。
ここで言える事は、大きすぎない想定値とは現実的に無難な数値であると言う事です。(苦笑)
例えば新規のアプリで、プロモーションもなにもしないのに、「想定DAUがうん百万で、目標RPMが100万RPMです!」って言うのはあり得ないです。
この数値に時間とコストをつぎ込んでも、杞憂に終わるでしょう。
どういうプロモーションをうち、どれくらいの流入を見込んでいるのか、そこをしっかり加味した上での数値なら、それが一番現実的な数字なんだと思います。
#まとめ
結論、負荷試験に使う想定値は大きければ大きい程良いわけではありません。
持て余す程の時間と潤沢な資金があれば別ですが。。。
基本的には限られた時間とコストで負荷試験を行いたいというのが一般的だと思います。
必要以上の準備をしても無駄にコストと時間がかかってしまうというデメリットを考え、どれだけ現実に近い想定を出し、コストと時間の節約を行いつつ、安全性を担保できるかが勝負になってきます。
もしかしたら、経験を積めば積む程現実的な数値がだせるのかな〜?と思いつつ、今後も負荷試験については学んで行こうと思います。