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

Part 9

ISUCON 実践編

ここまでで揃えた道具を、本物の問題に当てます。

題材は ISUCON 12 予選の ISUPORTS です。 各章に課題があります。 コードと計測結果を先に見て、自分ならどう直すかを決めてから解答例を読んでください。

載せているスコアと計測値は、すべて実際に動かして測ったものです。 定石どおりに直しても効かなかった回も、そのまま載せています。

この Part の所要時間は 4〜6 時間が目安です。 終えると、渡されたコードから遅い箇所を計測で特定し、直して効果を確かめられます。 読むだけなら追加の環境は要りません。

  1. 題材を読む ISUCON 12 予選 ISUPORTS の構造と、データが 2 か所に分かれている事情を押さえます。
  2. 【課題 1】計測結果からどこを直すか決める 初期実装のアクセスログとスロークエリログを読んで、最初に手をつける場所を選びます。
  3. 【課題 2】インデックスが足りない 1 万 9 千行を読んでいたクエリと、インデックスが 1 つも無いテーブルを直します。
  4. 【課題 3】N+1 を消したのに速くならない 教科書どおりの N+1 を 2 か所直して、スコアがほぼ動かなかった回の記録です。
  5. 【課題 4】1 行ずつ書いている CSV の 1 行ごとに MySQL へ書きに行っていた処理をまとめて、スコアが 3.5 倍になった回です。
  6. 【課題 5】pprof で見る、取りすぎているデータ ログに出ない SQLite の処理を pprof で測り、必要な分だけ取るように書き換えます。
  7. 【課題 6】毎リクエストの固定費を削る 全リクエストが必ず通る認証処理と、開発用のままになっている設定を見直します。
  8. 振り返りと、残っているもの 7 倍までの道のりを一覧で確認し、まだ手をつけていない場所を見ます。