isucon-book-cover

書籍「達人が教える Web パフォーマンスチューニング〜ISUCON から学ぶ高速化の実践」は、ISUCON というパフォーマンスチューニングコンテストの問題から、手を動かして Web サービスの高速化を学べる本です。
ちなみに ISUCON は「いい感じにスピードアップコンテスト」の略称みたいです。本書籍ではピクシブ株式会社が開催した社内 ISUCON のprivate-isuを使ってチューニングの練習をします。
ISUCON のコンテストで題材となっている問題は通常の Web サービスと同様の技術で作られているので、業務や個人開発の Web サービスにも適用できます。
そもそもなぜサービスは高速である必要があるのか、チューニングの基本的な手順、関連コマンドを使用してログを記録しボトルネックを探す…と順を追って説明されていたので、ISUCON 初心者の僕でも説明が頭にすっと入りました。

おすすめの読者

  • 業務や個人で Web サービスを開発しているが、利用者が増加するに伴い動作が重くなり困っている
  • パフォーマンスチューニングの手法に興味がある方
  • ISUCON に始めて参加する方、勉強してみたい方、高成績を収めたい方

構成

  1. チューニングの基礎知識
  2. モニタリング
  3. 基礎的な負荷試験
  4. シナリオを持った負荷試験
  5. データベースのチューニング
  6. リバースプロキシの利用
  7. キャッシュの活用
  8. 押さえておきたい高速化手法
  9. OS の基礎知識とチューニング
  • 付録
    • private-isu の攻略実践
    • ベンチマーカーの実装

チャプターごとに感想を書こうと思います。

Chapter1 チューニングの基礎知識

Chapter1 ではそもそも高速化とは何か?の話から始まりました。
高速な Web サービスとは?その利点は?といったことや、速度を測る指標、パフォーマンスチューニングの基礎的な話が書かれています。
漠然と高速化はするべきと捉えていましたが、明確な理由とその手法について知れました。
Web サービス構造を把握するときにマクロ視点とミクロ視点の両方で見ることが大事ということが面白かったです。
マクロ視点でおおよそのボトルネックを把握し、少しずつ詳細の構造を把握し最終的に原因箇所を発見する方法は直感がしっかり言語化されていました。

Chapter2 モニタリング

Chapter2 では実際にボトルネックを計測するモニタリングの手法についてです。
この作業が失敗すると、見当違いな箇所を修正して意味がないものとなってしまうので非常に重要な項目となります。
モニタリングに関する考え方から、実際に用いるツールの紹介まで記述されていて為になりました。

Chapter3 基礎的な負荷試験

ここから private-isu の環境を利用した説明の章になります。
この章では実際に private-isu の環境を構築して、サービスの負荷試験を行います。
Chapter1 で勉強した理論の説明と、nginx のログの意味がマッチして特に楽しいチャプターでした。
また CPU 使用率を調査しボトルネックとなる DB を調査するといった内容も含まれています。
この章でパフォーマンスチューニングの手順を体感することができました。
コラムでは違いが少し難解なレイテンシとスループットの関係性について解説されています。

Chapter4 シナリオを持った負荷試験

Chapter3 の試験では単一の URL に対するアクセスでしたが、実際のユーザーは「ログインページにアクセス -> ログイン -> ユーザー情報を更新」といったようにシナリオを持って行動をします。
それに合わせた負荷試験を行い、パフォーマンスを計測しました。
より本番環境に沿った負荷試験となっています。

Chapter5 データベースのチューニング

Web サービスと切り離せないデータベースのチューニングを本格的にします。
RDBMS/NoSQL/…と広く普及しているデータベースの解説から入り、チューニングのためのデータベースの設定から、計測結果の読み方まで細かく解説されています。
データベースに詳しくない僕でも理解しやすく、スラスラ読めました。

Chapter6 リバースプロキシの利用

アプリケーションサーバーとクライアントの中間に入るリバースプロキシの使い方と高速化の説明になります。
初心者だと「リバースプロキシは何故いるのか?」となりやすいと思うので、気になった方にはぜひ読んで欲しい解説だと思いました。

Chapter7 キャッシュの活用

キャッシュを利用してパフーマンスの向上を目指します。
キャッシュはデータの不整合などのバグを生みやすく、扱いの難しさがあります。
これをミドルウェアの memcache などを利用して上手くアプリに実装しようといった内容です。
僕はキャッシュを日常的に聞きますが、実装は知らなかったのでとても新鮮な内容でした、

Chapter8 押さえておきたい高速化手法

他に押さえておきたい重要な高速化のテクニックの紹介をする章となります。
例えば静的ファイルをアプリケーション側から配信していた場合の対処方法などがあります。

Chapter9 OS の基礎知識とチューニング

一つレイヤーを下げて Linux OS の説明とチューニングテクニックになります。
どのアプリでも OS の上に動いているプロセスなので、ここを避けることは難しいです。
システムコールやプロセスなどといった基本的な Linux の知識から、Linux カーネルパラメータを調整するところまでやります。

付録

前半では Chapter1~9 までの知識を総動員して private-isu のチューニングを実践します。

後半では ISUCON で使われているベンチマーカーを自作します。
ISUCON の作問や社内 ISUCON のベンチマーカー担当になった方におすすめです。

全体の感想

僕は ISUCON 初心者ですが、チューニングの基礎をしっかり学べたと思います。
よくパフォーマンスチューニングは計測から始めるということは知っていたのですが、それを知識と実践を合わせて解説されていたのは良かったです。
また、普段/etc 配下の設定ファイルをいじることが少なく、それらに少なからず抵抗感がありました。
ですが nginx や mysql の設定をいじり実際に変更を反映させることで、苦手意識が減ったように感じます。
今後チューニング関連に関わる時に、この本の内容を参考にしてみようと思いました。

ISUCON12 の感想

今年度は HUIT から5チームが 7/23 日に開催された ISUCON に参加しました!
僕も参加したので、最後にその感想を書いて締めようと思います。
結果としては惨敗でしたが、非常にいい経験が得られました。
何よりこの本から得たパフォーマンスチューニングの基本の流れは忠実にこなせていたと実感しています。
アクセスログ,スロークエリ,top コマンドによるボトルネック解析自体はスムーズに環境設定からできました。
反省点はボトルネックを発見するまでは良かったのですが、それをどう修正するべきかで悩んでしまいました。
事前にチームメイトで何回か ISUCON 本を用いて勉強会をしたのですが、そこでは解析がメインで未知のボトルネックを改善する練習を怠っていました。
来年はそこを重点的に学んで、また予選に臨もうと考えています。

Updated: