「達人が教えるWebパフォーマンスチューニング」という本を執筆しました #ISUCON本 #isucon

ISUCON」は、LINE株式会社の商標または登録商標です。

本を書きました。6/4発売です。電子版も同じくらいの時期に発売予定です。

複数人による共著で私は以下の章を執筆しています。

  • 6章 リバースプロキシの利用

  • 7章 キャッシュの活用

  • 8章 押さえておきたい高速化手法

もちろん他のすべての章についてもレビュアーとして参加しています。

この記事ではこの本を書くときに私が考えていたことを書きます。著者全体の総意というわけではないので、その前提でよろしくお願いします。

私とISUCON

ISUCONは4から毎年参加しています。9予選6本選では運営をしました。

ISUCONのベンチマーカーに関する情報GoでISUCONを戦う方法など、ISUCONに関する情報を複数発信しています。notify_slackというISUCONで便利なCLIツールも趣味で開発しています。

本の特徴

本書はISUCONの問題を解けることを目標にしながらも、それは題材の1つであり、根底にはWebサービスをどう開発・運用していくかがテーマにあります。例えばTOEIC対策をテーマにしつつ、英語学習全体の話をする本を想像してもらえたら近いかもしれません。

Webサービスはリクエストやユーザー数が少ないタイミングではどう作っても問題が顕在化することはあまりありません。DBのレコード数が少なければどんなSELECT文を実行しても一瞬で終わりますし、アプリケーションコードがどんなに非効率でもリクエスト数が少なければ問題にはならないことがほとんどです。

なので最初はWebサービスのパフォーマンスに対する知識がない人が実装し、そのコードをしばらく運用してから問題が顕在化するWebサービスがほとんどというのが実体です。

サービスがある程度使われれば必ず直面する問題なので、こういったパフォーマンスに関する知識はWebサービスを作るなら持っておくべき知識だと私は思っています。

しかし「ならどうすれば学べるのか?」と聞かれるとこれまではかなり難しかったです。例えばデータベースのインデックスに関する知識ならばデータベースに関する本を読めば得られましたが、インデックス以外にも知っておきたい知識はたくさんあります。ざっくり知っておきたい知識としてデータベースのこと、アプリケーションの実装、OSの挙動などなど、本当に多岐に渡ります。そしてそれらのことは相互に依存しているため理解もしづらいですし、幅広い知識がなければ実際の業務で問題が発生する箇所の特定すら難しいです。

こういったことを学ぶにはやはり実践して問題を解決していく経験がなければ学べません。そこで本書では実際にISUCONの問題を実践してみて、ISUCONの問題を解く際に知っておきたい内容を解説しつつ、実際のWebサービスの運用に関する事例についてもいくつか解説をする内容になっています。

実践する問題ですが、2016年に私が中心に開発した社内ISUCONの問題を使用しつつ、そこから話を広げていくスタイルになっています。

付録Aでは実際にこの問題を解いていくとどうなるのかについて解説されています。この付録でそれまでに解説した内容を実際に適用していく過程を学べます。分からない内容があれば当然解説している章を紹介しているので、その章に戻って学ぶことができるようになっています。

ISUCON本家の問題を使わなかった理由ですが、個人的には以下の点があると思います。

  • ここ数年のISUCONの問題は難易度が上がっており、最初に解いてみる問題としてはつらい部分がある

  • この社内ISUCONの問題はISUCONの問題として作ったわけではなく、新卒研修用に作った問題なので初心者でも取っつきやすい

  • ISUCON4とISUCON5の問題を参考に作った(私が運営に関わったISUCON6の直前に作ったので)ため、それぞれの問題のエッセンスが学べるような構成になっている

  • 執筆が開始した2021年にリポジトリの整備が行われ、容易に使える環境が整備されていた

  • 執筆者の1人である私がリポジトリのオーナーなのでリポジトリ側に変更を入れたい時も柔軟な対応が取れる

一部ISUCON本家の問題も書籍の中で紹介しています。本書を読み終わった後はぜひ本家の問題にも挑戦してみて欲しいと思います。

なお本書の中ではWebパフォーマンスを向上するにはどういった知識が必要で、紹介したミドルウェアではどういうことを気にして設定すべきなのかを紹介するのに留めていて、個別のミドルウェア・技術・クラウドサービスについて深く掘り下げることはあまりしていません。個別の技術を学びたい場合は本書の中でも別の本をいくつか紹介しているので他の本で学んで欲しいと思います。個別の技術について学ぶきっかけになればうれしいです。

個人的な思い

私が学生の時に「サーバ/インフラを支える技術」という本を読みましたが、正直インフラ周りの経験がないので当時はピンと来なかったことを覚えています。その後社会人としてインフラの経験を少ししてから読み直して、すごく楽しく読めたことを覚えています。この本はリアルな事例を学べるので非常にいい本だと思っています。ただ流石に内容が古すぎるので若い人にお勧めしづらかったです。

そこで私としてはリアルな事例を学べつつ、実際に手を動かせる環境が与えられるような本があればいいなとずっと思っていました。そうすれば経験が浅い人でも実践から学べますし、実際のリアルな事例を学べて実際の業務でも活用できるはずです。それによりいわゆる知の高速道路を色んな人に提供できるのではないか、そしてそれがISUCONの問題を活用することで提供できるのではないか、そう思っていました。

しかしそのような本を書くのは非常に幅広くかつ深い知識を持っている必要があり、私一人では絶対に書くことができないことは明白でした。しかし1人では無理でもこのメンバーであれば完成できると感じました。

実際にこの本の内容が難しい部分として、それぞれの章が相互に参照している部分があることが挙げられます。特に私が書いた章と「9章 OSの基礎知識とチューニング」は相互に参照していたり、微妙に内容が重複していたりします。しかしどう書いても相互に参照せざるを得ず、このことはWebパフォーマンスの本質的な難しさを表しているように思います。

そんな本質的な難しさを抱えているため、今回の機会を逃せばWebパフォーマンスをテーマに多岐にわたる内容を解説する本は出ないかもしれないと思っていました。この本の執筆に私が関わることで、Webパフォーマンスに関する業界内の知識を底上げできるかもしれない、そのことで社会に対して私が貢献できるかもしれない、と感じました。

経験がなくても実際に手を動かして問題を解いて雰囲気をつかむことで、幅広い分野を理解する必要性を理解してもらいつつ、ISUCONの問題を解く上ではあまり関係ないが、実際の運用に関わる話題にも興味を持ってもらえればと思います。

また最近はクラウドが一般的だからISUCONの内容は役に立たないのでは?みたいなことを言われることもあります。しかし何か問題が起こったときに解決するためにはISUCONの内容は今でも有用ですし、クラウドのサービスも適切に使用するためには様々な知識が必要です。

そのことを示すために内容やコラムでオブジェクトストレージサービスの適切な使い方やCDNの活用方法についても解説しました。クラウド時代のインフラやWebパフォーマンスを学びたい人が今手に取るべき本として活用されたらと思っています。

最後に

本の執筆は大変な割に全く儲からないので、社会的意義を感じないなら関わらない方が私個人の利益としてはよいです。それでも関わろうと思ったのはこの本に社会的意義を感じたからです。

昔作った社内ISUCONの問題がまさか書籍の題材になるなんて、作っている当時は夢にも思っていませんでした。元々新卒研修用に作ったという出自から本の題材として使いやすかったことがむしろ功を奏したというところでしょうか。

私は当初書こうとしてた内容と全然違う内容を書くことになったり、途中迷走していたところでレビュアーの方に厳しいフィードバックを多数もらったことで何とか持ち直せました。レビューしてくれた方々にはこの場で感謝したいと思います。ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?