達人が教える Web パフォーマンスチューニング 〜ISUCON から学ぶ高速化の実践
タツジンガオシエルウェブパフォーマンスチューニング イスコンカラマナブコウソクカノジッセン
- 著者:
- 藤原 俊一郎 / 馬場 俊彰 / 中西 建登 / 長野 雅広 / 金子 達哉 / 草野 翔(フジワラ シュンイチロウ / ババ トシアキ / ナカニシ ケント / ナガノ マサヒロ / カネコ タツヤ / クサノ ショウ)
- 出版社:
- 技術評論社
- 出版日:
- 2022年06月04日頃
- ISBN:
- 9784297128463
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
LINE 株式会社が主催する Web サービスのパフォーマンスチューニングコンテスト、ISUCON (Iikanjini Speed Up Contest) で技術を競い合ってきた著者が Web サービス高速化のための考え方とノウハウをわかりやすく解説。
本書では、お題となる Web サービスをひとつ用意して、手を動かしながら高速化手法を学んでいきます。Web サービスがどのくらいの負荷に耐えられるか、どのくらいの負荷で不具合が起こるかを検証し、不具合が起こる原因を突き止め、改善していきます。また、負荷に対応する方法だけでなく、負荷を発生させる方法 (ベンチマーカーの作成方法) も紹介します。
本書を読んで、Web サービス高速化について理解を深め、性能を向上させましょう。
技書の森解説
Web サービスが遅いときに、どこから計測し、何を根拠に手を入れ、どこで止めるかを、実際のアプリを相手に一通り体験できる実践書が『達人が教える Web パフォーマンスチューニング』 (藤原 俊一郎、馬場 俊彰、中西 建登、長野 雅広、金子 達哉、草野 翔 著、技術評論社、2022 年 6 月発売) です。副題は「ISUCON から学ぶ高速化の実践」で、版元の紹介では、Web サービスのパフォーマンスチューニングを競うコンテスト ISUCON (Iikanjini Speed Up Contest) で技術を競い合ってきた著者が、高速化のための考え方とノウハウを解説すると案内されています。著者紹介によれば、著者には ISUCON の出題や問題作成を担当した経験を持つ人も含まれています。
private-isu を題材にした全 9 章と付録の構成
本書は、お題となる Web サービスを 1 つ用意し、手を動かしながら高速化の手法を学ぶ形をとります。題材は private-isu という Web サービスで、Chapter3 で登場します。Chapter1 のチューニングの基礎知識で、高速な Web サービスとは何か、負荷とキャパシティをどう考えるかを押さえたあと、Chapter2 でモニタリングを扱い、Chapter3 の基礎的な負荷試験、Chapter4 の k6 を使ったシナリオを持つ負荷試験とアクセスログの解析へ進みます。中盤は Chapter5 のデータベースのチューニング (インデックス、N+1 など)、Chapter6 の nginx を使ったリバースプロキシの利用、Chapter7 のキャッシュの活用、Chapter8 の押さえておきたい高速化手法 (静的ファイルの配信、HTTP ヘッダーによるクライアント側のキャッシュ、CDN など) と続き、Chapter9 で Linux のプロセス管理、ネットワーク、ディスク I/O、カーネルパラメーターといった OS の基礎知識とチューニングに至ります。付録 A は各章の技法を private-isu に適用する攻略の実践、付録 B は ISUCON のベンチマーカーが何をするのかと、その実装です。
計測から始め、ボトルネックを 1 つずつ外す
パフォーマンスチューニングで最も多い失敗は、遅い原因を推測で決めて、効果の小さい箇所に手を入れてしまうことです。Web サービスの応答時間は、リバースプロキシ、アプリケーション、データベース、OS とネットワークのどこか一番詰まっている箇所に支配されるため、そこを外さない限り他を速くしても全体はほとんど変わりません。本書がモニタリングと 負荷試験 を前半に置き、データベースや nginx の調整をその後に並べているのは、まず計測で詰まっている箇所を特定し、直したらもう一度測るという順序を身につけさせるためだと読めます。データベースの章で扱われる N+1 問題 は、一覧を表示するたびに要素の数だけ追加のクエリが発行される典型的な劣化で、データ量が少ない開発環境では気付きにくく、負荷をかけて初めて表面化しやすい問題です。また、負荷に対応する方法だけでなく負荷を発生させる側、つまりベンチマーカーの作り方まで扱う点は、試験の結果を正しく読むために、試験の道具の仕組みを知っておく意味があります。
Web アプリの構成と Linux の基礎がある人に向く理由
読み進めるには、Linux のコマンド操作と、Web サービスが リバースプロキシ、アプリケーションサーバー、データベースといった層で構成されることの基本的な理解があると、各章の手順を自分の環境で再現しやすくなります。版元は、Web サービスやアプリケーションの動作が重くて困っている人、ISUCON に出場してみたい人、出場したことはあるが良い成績を収められなかった人を想定読者に挙げています。一方で、特定のクラウドサービスのマネージド機能の設定手順や、フロントエンドの描画速度の改善を中心に知りたい人には、本書の重心はサーバー側にあるため目的がずれます。2022 年刊の本なので、ツールやミドルウェアの細かな設定値は手元のバージョンの公式文書と照らし合わせて読むのが安全です。
それでも、計測して詰まりを見つけ、直して測り直すという考え方は道具が変わっても古びません。本番のサービスが遅くて原因の当たりを付けられずにいるバックエンドの開発者や、ISUCON に挑戦して何から手を付けるべきか分からなかった人にとって、1 つのアプリを相手に計測から OS の調整までを順に通せる本書は、性能改善を勘ではなく手順で進められるようになるための一冊として、元を取りやすい選択です。
言及した記事 (23 件)
【最新技術に振り回されない】 低レイヤーに強くなるための鉄板コンテンツ集
♡ 1078CPU, コンパイラ, OS, システムプログラミング, 低レイヤISUCON初心者のための勉強方法
♡ 117isucon, パフォーマンスSE 3年目で読んだ技術書52冊
♡ 80技術書, Se, 新人プログラマ応援未経験からエンジニアになって1年9ヶ月経った現在地
♡ 17ポエム, 就活, 新人プログラマ応援, 若手エンジニア, AdventCalendar2025ISUCON本で初めてのパフォーマンスチューニングに挑戦してみた
♡ 11isucon, パフォーマンスチューニング, 初学者, ISUCON本【👷♂️環境構築編👷♂️】ISUCON本に載っているprivate-isu (Iscogram) をWSL上でsystemdを使って作りパフォーマンスチューニングする
♡ 9Go, MySQL, nginx, Memcached, isuconWeb系エンジニア5年目にやったこと
♡ 7エンジニアのキャリア, 初学者向けnginx・リバースプロキシについて
♡ 7nginx, プロセス, リバースプロキシ, C10K問題ISUCON13 初参加体験談
♡ 6isucon, パフォーマンス, isucon13EC2とLinuxパフォーマンス分析入門
♡ 4Linux, サーバー, 監視, OS, パフォーマンス
この本に興味がある方におすすめ
関連する本
関連記事
マンガで学ぶプログラミングはアリなのか
マンガ形式のプログラミング入門書は、ちゃんと学べるのか。マンガ本の強みと弱み、活用法を正直に解説します。
データベース本ガイド - SQL から設計まで学べる技術書の選び方
データベースの基礎から設計、パフォーマンスチューニングまで学べる技術書の選び方と学習順序を紹介します。
Linux 本ガイド - コマンドライン / しくみ / 性能の 3 層で選ぶ技術書
Linux を学ぶ技術書の選び方を 3 層 (コマンドラインの操作 → カーネルのしくみ → 性能と運用) で整理。新しい Linux の教科書や [試して理解] Linux のしくみなどの定番書の使い分けと、学ぶ順番を解説します。
関連用語
フォーマッター
ソースコードのスタイル (インデント、改行、スペース) を自動的に統一するツール
Conventional Commits とは - コミットメッセージ規約の書き方と導入手順
Conventional Commits はコミットメッセージに feat/fix 等の型を付与する規約。CHANGELOG 自動生成やセマンティックバージョニングとの連携方法を実例で解説
JSON
JavaScript 由来の軽量なデータ交換フォーマットで、Web API のデファクトスタンダード
Well-Architected Framework
AWS のベストプラクティスに基づいてワークロードを評価 / 改善するための 6 本柱のフレームワーク
リンター (Linter) とは - 静的解析ツールの役割と導入方法
リンターはソースコードを静的解析してバグやスタイル違反を検出するツール。ESLint / Biome / Ruff など言語ごとのリンターの比較と CI への組み込み方を解説
LaTeX
数式や論文を美しく組版できる文書作成システム。学術分野で広く使われる