🔩 ねじき教室 Go と Web の教室

Part 6

ISUCON に挑む

30秒でつかむ 測って、いちばん遅い場所だけを直す
測って、いちばん遅い場所だけを直すベンチマークを計測し、最大のボトルネックを一つ直し、もう一度計測します。1計測数字を取る2改善1か所を直す3再計測効果を見る
  1. 計測 数字を取る
  2. 改善 1か所を直す
  3. 再計測 効果を見る

いよいよ本題です。 渡されたアプリを速くする作業は「計測してボトルネックを特定し、そこだけ直す」の繰り返しです。 この Part では計測結果の読み方と、ISUCON で最頻出の改善パターン(N+1 の解消、インデックス、キャッシュ)を練習します。

この Part の所要時間は 4〜6 時間が目安です。 終えると、計測結果からボトルネックを選び、N+1 の解消、インデックス、キャッシュを試して効果を測れます。 ここで扱う改善の順序や判断基準は、ISUCON での実戦上の目安です。

  1. ISUCON のルールと戦い方 競技の形式と 8 時間の使い方、チーム内での役割分担を押さえます。
  2. 推測するな、計測せよ alp とスロークエリログの集計を読み、どこを直すかを決める練習をします。
  3. N+1 問題 ループの中のクエリが DB への往復を N 回に増やす、ISUCON 最頻出のボトルネックを直します。
  4. インデックスで速くする スロークエリを EXPLAIN で確かめ、インデックスを張り、速くなったことを確認する手順を型にします。
  5. キャッシュ 同じ結果を毎回作らない。オンメモリキャッシュの実装と、「いつ消すか」「再起動で消える」という 2 つの難問を扱います。
  6. pprof でボトルネックを探す SQL でもエンドポイント単位でもなく Go のコード自体が遅いとき、CPU プロファイルで犯人の関数を特定します。
  7. 素振りと過去問 練習環境の入手先、素振りの型、本番前のチェックリスト。この教室の締めくくりです。