Webパフォーマンスチューニングで大切なこととは?
――今回の書籍執筆を通じ、ISUCONからの学びをうまく言語化できたんじゃないかと思っています。改めてWebパフォーマンスチューニングにおいては何が重要だと思いますか?
藤原:ボトルネックを見つけるための監視、観測が重要ですね。「推測するな、計測せよ」という格言があるのですが、みんななかなかできないんですよ。実際、自分が業務でパフォーマンス・チューニングするときも、いきなり計測する手法が見えてるわけでないんですよね。
今までの経験から迅速に切り分けられる場合はいいのですが、そうじゃない場合は仮説を立てて、実際にやってみて、当たりかハズレかを探っていく試行錯誤をしています。
ただ、ボトルネックの可能性が100個あるときに、当たりそうな10個を選ぶとこは、経験と勘が効いてきちゃうんです。いろいろやっていくと、その勘も磨かれていくので、1回見つけたことは次から計測できるようになると思います。
金子:そうして見つけたボトルネックになっている箇所、そしてボトルネックをどうしたら解消できるのか、なぜ今の実装がマズいのか自分自身で言語化し、理解することも重要ですね。
馬場:予選出場者のブログを見ていると「これが正解だったのか」というコメントをよく見るのですが、そもそもパフォーマンスチューニングに正解って何もないよな、と思います。
藤原:特に今回のISUCON12予選の問題は正解がなくて、どんな解き方でも予選突破できるんですよ。いろんな方法で突破できる道があるので、正解が一つに定まっているものではないです。8時間後までにどれだけその高速化できるかっていうことだけを考えるゲームなので。これが、ISUCONのいいところだと私は思います。
草野:僕がチューニングをする上で大事だと思っているのは、「困る経験をする」ということです。実際に負荷で困ったことがないと勉強する気にならないので、そういう意味でも実際に手を動かしてみてほしいです。僕もISUCON3でボロ負けしてからインフラをやろうと思ったので、困ってみるのはすごく大事だと思っています。幸いこの本は、自分のアプリケーションを困った状態にするための方法も書いてくれているので、一度困ってみるのは重要です。
長野:ISUCONって安全なんですよね。色々試行錯誤して失敗しても会社が潰れることはないんですよ。そういった場でうまく学べるといいと思います。
馬場:金子さんもそうですけど、問題を公開したりベンチマーカーを公開したり、過去問できる環境を用意したり、そういう積み重ねが環境を作って、みんなが学べる状態になっていますよね。
金子:自分が公開した問題で学んでくれて、本家ISUCONも出ました、という話を聞くと嬉しいです。
中西:私が最初にISUCONに出場したときは学生の時で、自分が優勝したときも学生でした。その後、学生の上位入賞がすごく増えてきたなと思います。業界の知識の継承が進んでいくのはすごくいいことですね。
――書籍の「こんな方におすすめ」の中に「ISUCONに出場したことはあるが、良い成績を収めなかった方」とありますが、本書の活用のポイントを教えていただけますか?
藤原:ISUCONに初めて参加した際は、まず何をしたらいいか分からないことが多いはずです。この本は、そうした状況を解消してくれる効果があると思います。
草野:とりあえず買って、付録Aをやってみると、自分が分からないところがはっきりしてくると思います。そうすると、Google検索で調べられるようになる。Google検索ができるようになると勝ち筋に入ってくると思います。この本は、分からないことをはっきりさせるために使うと便利な本だと思います。
馬場:用語の意味や、分からないジャンルがはっきりするわけですよね。
金子:例えば、データベースのインデックスを知らないという人もいるし、インデックスは知ってるけどそこから先が分からないという人もいます。付録Aを読むことで、「ここまでは分かるけど、ここから先は全然知らない」ということが出てくるんですよね。そういう使い方をしてくれるといいんじゃないかなと思います。