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

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

PHPerKaigi 2022

PHPerKaigi 2022 の参加&登壇&スタッフをやってました。

f:id:uzulla:20220415184822p:plain

phperkaigi.jp

感想

はーーやっとおわった!!!

そして今日は金曜日、明日は休み、マジで?休みってあんの?!

俺は自由だ!!!!

(嘘です、明日も仕事します)

オンラインとオフライン

今回、PHPerKaigiはハイブリッド開催ということで、オンライン、オフラインの開催となりました。現地にくることもできるし、昨年同様にニコ生+Discordなどでの参加も可能ということです。

これがいったいどう転がるか全く読めなかったんですが、まあまあ、予想よりはよくできたんじゃないかと思います。オンラインの人が楽しめないとか、オフラインに人が全くこないとか、色々不安だったんですが、まあ、100点満点かはともかく、実験的な試みとして成功したのではないか?と思います。

おそらく今後もこのスタイルはあり続けるんじゃないかとおもっていて、主催のtomzohさんはどんどんハードル上げていくな、大丈夫か?みたいなことは思いつつも、全国の人、現地の人が楽しめるイベントが続くのではないでしょうか。

どうでもいいけど(?)オンラインでボイチャチャンネルつくってたんだけど、利用者がめっちゃすくないんよな、人がいないのか、あるいは話すというのはハードルが高いのか、色々あるけどずっとつないでてくれる人ひとりくらいいるかな〜っておもってたけど、甘かったか。(某yapcではできたので、やっぱりトークモンスター当てておかないとだめか)

登壇

www.instagram.com

私はPHPerKaigiで合計20時間くらいトークしたと思います。番宣Youtubeと、突撃!スポンサーブースと、「俺は見た!全部のトークを!」です。まあどれもpaddingなコンテンツであるのですが、なんかしら登壇するという意味ではできたんじゃないかなと思います。

楽しんでもらえましたかね?テスト放送は(都合上)ライブ感あふれる(グダりもある)ものでしたが、UNIONがPHPにはきたが、つじつま合わせでおわらせないでね、というエモい話をしたつもりです。Discordでは感想もいただけたので相応にはよかったのかなと思います。

「全部のトークみた!」についてはマジで感想もほぼないので、あれをみてどういう感想をいだいたのか不明ですが、もし何かの役に立ったなら幸いです。やくだった!とかいわれると来年も全部の動画をみることになるんだろうなと思いますが(いや、それでなくてもスタッフ業務で全部の動画見ることになりそうだが)

あとは、「突撃!」はどうでしたかね、あれ本当に突撃なので、ブースの人が引いてたのが印象に残ります。いやだってせっかくブースあるんだからさ、インターネットの向こう側の人にもとどけたいじゃん?

最後に番宣Youtubeですね、力技としかいいようがないPHPerKaigiの番宣でしたが、結構な人があれをみて来てくれたっぽくて、タッチポイントを増やしてみようという試みは成功だったのかなと思います。くっそ大変だったけど!!22本?くらい動画つくったからね、まあ手間はかけないようにしたけど。

スタッフ業

f:id:uzulla:20220415185243p:plain

私はまあ、いうて何をするということはもう無いですね、久々の開催だったので勘がもどるか最後まで不安だったんですけど、非常口と防災設備まわりについて思いだしたら後はどうにかなりました。

基本、なんかあったときの予備なので、実質何もやってません。まあちょいちょい指示出しみたいなのはしましたけど、Todoとタイマー代わりですね。ガッチリ仕切ればもう俺は予備役でよいのではないか。

あ、ノベルティ制作はやりましたね、ステッカーと箱は(9割くらいは)私の担当でした。

若い衆

www.instagram.com

まあ若いというのはカンファレンス歴が若いという意味なんですが、なんやかんや新人を何人か(10人くらい?)さそえたかなと思います。

コミュニティやカンファレンスって、究極的にはあってもなくても世界は回るんですけど、すでにあるものだし、うまく活用していってもらえればなとおもいます。

しかし、やっぱりカンファレンスの登壇(あるいは、大企業)って権威あるんですね(あるいは私の説明が下手な可能性も高い)トークをきいて「○○○○ってそういうことだったんですか?」って俺んところに質問しにきた若い衆には、嬉しいとともに、苦笑がありますね。

俺も元来カンファレンス登壇する側やぞ!(大企業のプロパーではないが…)

ただ、新しい視点みたいなものができたなら幸いだなーと思ってみております。

飲みには行かず

f:id:uzulla:20220415185407p:plain

1日目が終わった後に「全部見た!」動画をつくらんと「全部の動画を見返す」という業をする直前に一本だけ一人さびしくのみました。

カンファレンスなんだから懇親したいんですけど、去年のオンラインより懇親できなかったですね!!

もちろん廊下では色々な人と話したんですけど(話せなかった人も多かったんですけど)、懇親してぇ〜〜。

頼む、だれか俺を懇親にさそってくれ。できれば送迎付きで。

まとめ

  • 新しい試みが多すぎて色々大変だったが、まあまあいけたんちゃうか?改善してこ!
  • 若い衆を何人ももちこんで、彼らの変化を感じられたのは良かった
  • コミュニティに人を増やすには地道な努力が必要であることを再確認した
  • 「オンラインカンファレンスの猛者」みたいなのがもうちょっといると、オンラインももりあがるのか?となった

ほんじゃあまた、次回!