uzullaがブログ

uzullaがブログです。

#ISUCON本 こと「達人が教えるWebパフォーマンスチューニング」について

達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践を献本いただいた、なお、私は書籍のレビュアーである。

(注釈 最近こういうのどこまで公開しておかないといけないのかよくわからんけど書いておく、金はもらってないが、献本はいただいた。いや、本をもらう以上に自分のレビュー作業に工数はかかっているので得をしているわけではないし、増版しても俺の懐はあたたまらない。注釈終わり)

さて、献本いただいたから書く、レビュアーだから書く、というわけではないのですが、実際面白い本であることには間違いないので、エントリを書いてみる。

まとめ

ISUCONにこれで勝てるわけではない。

期待していた皆様(?)、残念ながら?レビューをしている段階でうっすら知っていたのだが、「これはISUCONに勝つテクが記載された本」ではない。

ISUCON優勝したことがない私ではあるが(とはいえ、レビュアーになったのは多分本戦にでたことはある…ギリギリ…という経歴があったから…なのか、まあなんとなく誘ったらレビューしてくれそうなきやすさがあったのだろうか、まあそれはどうでもよい)、この本を読んでも優勝はできんぞ、と思う。

ぶっちゃけISUCONに勝つなら、絶対にISUCONの過去問をやりまくった方が良い。優勝はできないかもしれないが、まず予選を突破するにはそれが一番必要である、必要なものはこの書籍ではない、経験の数と手の速さが重要。そしてネットには「こうやってここまで点数をのばしました!」というエントリにあふれているので、「この書籍にしかない魔法」はない。

なので、この書籍を読むだけでは、おそらく強くはなれない。よって、その目的、あるいは目論見で購入した人については残念でしたと言わざるをえない。まあ、それなら最初に(出版前に)読んでいる私が優勝できるはずなので、当たり前なのだが。

では、なにが書かれているのか?

その前に、この本をISUCONで勝つために使うにはどうすればよいかの話をしておきたい。

付録からよんでほしい。あなたがISUCONに一度も出たことがなかったり、手も足も出なかった経験があるならば付録の「攻略ログ」は大変役立つのではないか。いわゆる「素振り」の一つが掲載されている。

(優勝したことがない私が言うのも何だが)ISUCONに勝つには素振りが必要である、いや優勝常連と言えるfujiwaraさんは「練習したことない」っていってるじゃん!と突っ込まれるとこれはもうなにもいえねえな…とおもったが(実際このエントリ放り投げようかとおもったのだがw)、まあここはもうそこは無視することにした。(結局普段の生活が練習なのだろうし!!)

夢のない話だが、結局数をこなさんといかんのである。

さて、話をもどし、付録を読むと「わかる」事として、「できる人がなにやってるのかわけわからない」だと思う。もしわかるようなら、対象読者ではない(むしろわかる事がわかってない可能性もあるが)。

なんかしらないけど最初から答えを知っているように解いているようにしかみえない、わかる、俺もISUCONで他人のムーブをみているとそういう感覚にしばしば陥る。しかし実際にはそうではなく、みな「ここがわるいんだろうなー」という勘をもって一つ一つ検証し、それを改善している…らしい。らしいっていうか、すくなくとも私はそうである。

で、そういう考えをもって、糸口を拾い、最初に戻って読んでみると「勘所が並んでいる」ということに気づくと思う。第一章については「全体的な考え方」そして、それに続く各章はそれらを実際にそうなのか検証し、ブレイクダウンしていき、一般的な解法の例を解説している。

一端のエンジニアなら、正直「あーN+1ってなんかきいたことあるわ」「Indexね、張るよね」というものが並んでいると思う、それについて粛々と主にチューニングについての側面で解説されている。

「なぜIndexがあると速いのか」「Btreeだから当然だよね」こういう会話がなされているとBtreeの実装方法に話がいってしまいがちだし、そこで終わってしまうのが常であるが(?)、このISUCON本ではそこにはあまり深入りせず(とはいえ、結構しっかり解説している)、BtreeでPkeyや各行が特定されたあとにどのようにデータリーフをたどるかということが解説されているし、「なぜ」(たとえばORDER BY 狙いのIndexとか)そうするか、ということが(あらゆる手法の一部ではあるが)解説されている。

こういう解説は当然さがせばあるのだが、ここにあるのだ、そこがこの本の素晴らしいところだと思う。

同様に、アクセスログの解析による低速なエンドポイントの見つけ方、alpやtopなどの定番ツールをつかえばいいのは「聞いたことがある」となると思うが、実際にそれを潰していくことについて解説されているエントリや書籍はすくないのではないか。

その他にも、ウェブ、というかHTTPならではの「実際に速度改善する」という切り口で統合的に書ききった書籍はあまり類を見ないと思う。いやないわけではないのだが、DB高速化などに特化していて本書籍のようにウェブアプリケーションチューニングの切り口で揃えているものは珍しいかと思う。(すくなくとも、今私がぱっと思いつかない、DBだけとか、キャッシュだけとかならまあ)

このあたりがこの書籍の良いところで、おそらく実際にあなたの役立つ所かなと思う。

ということで

ウェブアプリケーションの高速化をしたいなら、したことがないなら、ぜひとも読んでみていただきたいなと思う。

もちろん世の中にはパフォーマンスの改善手法は数多あり、ぶっちゃけ金を無限につっこめば無限にスケールするというパワープレイがあるし、要件仕様のほうを変更してパフォーマンスを伸ばすということも普通におこなわれている。

しかしISUCONというのはそれらを封じて「自らの技術で」改善するという競技であるからしてそれでは通用しないのである。

そして現実世界では、それらは組み合わせで改善がおこなわれると思う。っていうか俺もしている。

つまりは「スケールアップすれば勝てるっしょ!」とか、「そんなの実装できても無理〜!」とか言わず、エンジニアリングで解決するという、じつにかっこいいことにトライできるのである。(そのあたりに興味がない人はそもそもISUCONという単語に魅力は感じないだろうが…)

まあ、現実世界ではISUCONみたいなことをするより長期的な視点でDBは正規化するし、新規機能開発にリソースを全振りすることを求められることも多いと思うのでこれがすべてだとか、あらゆるウェブエンジニアがこのようにすべきなどというつもりはない。

ということで、「(現実とつながっているが、究極的には現実と違う)エンジニアのかけっこ(障害物競争??)」について面白いなと思ったらぜひともISUCONに挑戦してみてほしいし、もしその時に「自分には経験がないからなー」というときにはこの本の付録から読んだりしてトライしてみてほしいってことである。

isucon.net

なお、現在ISUCON12は第二次受付を控えている。

https://isucon.net/archives/56701778.html

毎年人気が上昇し、ISUCON12 予選申込みの第一次受付は開始4分で枠売り切れという異常な人気になってしまったので、ぜひ参加したい人には気合をいれて申し込んでみてはいかがか。(第三回まであるらしい)

あるいは、出場に興味がなかったとしても、「自分がかけっこでどれくらい速そうか?」というのはなかなかおもしろい事だと思う…どうですかね?しかも、その練習をしたら自分の業務にも役立つかもしれない(すくなくとも、高速化に関する脳内の引き出しは増えるだろう)

ということで、何のおすすめになったのかわからなくなったが、一人、あるいは友達とやる分には変に気合をいれなくいいのである、所詮かけっこなのだから、変に斜に構えたことは考えず、興味があればやってみてはいかがだろうか?

当方はISUCON12参加予定です、では予選でお会いしましょう! (本当ならここで「本戦で」とか書いてみたいエンジニアです、私もがんばります…)

(ギョーム方面各位:本エントリは寝る前の一瞬でかかれたので仕事にはほぼ影響しておりません、大丈夫です(???))