個人的には重要度でいうと (高) 3 = 5 > 6 > 8 ≥ 7 > 2 > 1 > 9 >> 4 (低) というイメージ
Chapter 1 チューニングの基礎知識
最近の web サービス開発でチューニングがいかに重要か、つまりは ISUCON の魅力的なことを語っている
またチューニングをどうやっていくかということを簡単に述べている
- 推測せず計測する
- 推測で改修を加えない、必ず計測してボトルネックを特定してから手を動かす
- 公平に比較する
- 1つずつ比較する
- 改修は1つの部分にのみ行い、その前後での比較を行う
- ボトルネックだけにアプローチする
- ボトルネック以外を改善させても効果は見えづらい。ボトルネックを解消したらまた別の場所がボトルネックになる
- ボトルネックの特定は外側から順番に
- ボトルネック対処の基本3パターン
- 解決 (処理の変更、web アプリの修正)、回避 (処理を不要にする、処理結果をキャッシュする)、緩和 (設定変更、スケールアップなど)
- 負荷試行→結果確認→改善→負荷試行→結果確認→改善…
- (感想)
- それはそうという感じ、機械学習でも同じ
- この章を読んで得られるものはほぼない
Chapter 2 モニタリング
どのように遅くなっているかを見ないと改善できないよね、なので監視しようという話
- CPU 利用率
- top
- %cpu(s) の us が used, id が idle
- メモリ利用率
- モニタリングのツール
- プル型とプッシュ型がある。プル型はエージェントをアプリサーバーに忍ばせておき、それを外部から叩くことでメトリクスを取得する。プッシュ型はアプリサーバーに忍ばせたエージェントが一定間隔で外部にメトリクスを送信する。
- 本書では Prometheus (プル型) を紹介している。エージェントは node_exporter
- http://HOST:9000 でアクセス
avg without(cpu) (rate(node_cpu_seconds_total{mode≠”idle”}[1m]))
で CPU 利用時間を表示
- (感想)
- 取ったログをどう使うかはこの章ではあまり言及されないのでイメージが沸かない
Chapter 3 基礎的な負荷試験
private-isu という pixiv の社内 ISUCON での過去問を使ってベンチマークを走らせ、何が遅いのかを確認する。今後の章でも private-isu を使う