Yuki Watanabe's Blog

Yuki Watanabe's Blog

2019年に経理からエンジニアに転身した人のブログ

『達人が教えるWebパフォーマンスチューニング』を読みました

『達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践』(以下、ISUCON本)を読み終えました。書籍ではアプリケーションコードは Ruby 実装を中心にパフォーマンスチューニングを解説していますが、私は書籍を片手に Go のアプリケーションコードを対象に、一通りチューニングを試しました。その際のコードは以下にあります。書籍のハンズオンを通して非常に得るものが多かったので、本書の魅力と学びについてまとめます。

github.com

読み始めの動機

ISUCON本を読み始めたきっかけは二つあります。1点目は、日々の業務でパフォーマンス改善を担当しているものの知識が断片的で、体系的に幅広く学びたいと考えたこと。2点目は、過去に知人と ISUCON に参加したものの 0 点という悔しい結果で終わった経験から、ISUCON で高得点を得るためのノウハウを得たいと感じていたことでした。

感想

本書は ISUCON を題材としたハンズオン形式で、パフォーマンスのボトルネックを探し出し出し改善するための幅広い手法を学べます。APM を使わずに top、mysqldumpslow、alp、pt-query-digest といったコマンドベースのモニタリングを行う点は私が担っている業務とは異なりますが、出力された情報を読み取りボトルネックを探し出す点は実務さながらでした。最初は 1000 点にも届かなかったスコアが最終的に 25 万点へ伸びていき、この過程はとても刺激的で楽しむことができました。私はMacとDocker Composeの環境で実行しており、スコアはマシン性能やマシンの使用状況に左右されるため絶対的な値ではありませんが、数値が可視化される面白さは大いにありました。負荷試験には ab コマンドと k6 を使い、特に k6 は業務利用のイメージが湧いたため今後積極的に導入したいと感じました。

書籍では ISUCON 向けの最適化を解説しながら、実務とのギャップが生まれる部分にはコラムで補足を入れてくれる点も親切だと感じます。たとえば負荷試験の適切な実行時間など、実務での運用に直結する話題が丁寧に述べられています。

苦労した点

書籍は AWS EC2 環境を前提にしているため、Mac 上の Docker Compose 環境へ読み替えるには多少の調整が必要でしたが、本文やダウンロードしたリポジトリの内容を手がかりにすることで大きく詰まることはありませんでした。また、書籍のコードとリポジトリのコードに差分があり、そのままでは動かない箇所がありました。

あと、これは個人的な失敗談ですが、 Docker Compose で開発している場合、アプリケーションコードを変更するたびに build が必要な点に遅れて気付き、変更した修正が反映されずスコアが伸びずに悩んだこともありました。

Go 実装をチューニングしていく過程では、以下のブログを参考にさせていただきました。(感謝)

blog.stenyan.jp

最後に

本書を通じて、アプリケーションやミドルウェアのパフォーマンス問題のボトルネックを探し出し解決する基礎力を養えたと思います。今後は低レイヤーの知識を広げるために、『詳解 システム・パフォーマンス 第2版』などの関連書籍を継続的に読み進めていくつもりです。