ゴールと ISUCON
読了目安 約4分
この教室が目指す ISUCON というコンテストの姿と、そこまでの学習の道のりを説明します。
- 競プロ 正解を作る
- Webサービス 動いている
- ISUCON 測って速くする
この章の目次
この教室のゴールは、ISUCON に参加して、アプリケーションのコードと SQL の改善でチームに貢献できるようになることです。
この教室の読み方
この教室では、仕様として決まっている事実と、ISUCON で役立つ実戦上の目安を区別して書きます。 Go、HTTP、SQL などの仕様を説明する箇所では、成立する条件も含めて扱います。
一方、「ISUCON ではよく使う」「まず疑う」といった表現は、過去問や練習で再現しやすい手順を示すものです。 すべての問題や Web サービスに当てはまる仕様ではありません。 大会の制限時間、チーム人数、利用できるツールも開催回によって変わり得るため、参加時にはその回の公式レギュレーションを確認してください。
ISUCON とは何か
ISUCON は、お題として渡された Web サービスを、制限時間 8 時間でどれだけ高速化できるかを競うコンテストです。 名前は「Iikanjini Speed Up Contest(いい感じにスピードアップコンテスト)」の略で、LINEヤフーなどの企業が開催してきました。
開始と同時に、すでに動いている Web サービスが一式渡されます。 中身は、アプリケーションのコードと、データベースと、それらが動いているサーバーです。
スコアを測るのは、運営が用意したベンチマーカーというプログラムです。 ベンチマーカーはサービスに大量のアクセスを送り、時間内にさばけた量をスコアにします。 好きなタイミングで何度でも実行できるので、「改善を入れては測る」の繰り返しが基本の流れになります。
ISUCON の開催情報や過去問題は 公式サイト にまとまっています。
競プロと比べると
競プロでは、問題文が「正解」を定義していて、白紙からコードを書き、提出して合っていれば得点になります。 基本は個人戦です。
ISUCON でも、計算量の直感はそのまま効きます。 「このループは O(N²) だから、N が増えると破綻する」という見立ては、改善作業でも中心にあります。
違うのは、それ以外のほぼすべてです。
- 問題の形:白紙から正解を書くのではなく、すでに正しく動いているものを、壊さずに速くします。
- 読む量と書く量:他人が書いた数千行のコードを読んで、直すべき場所を探します。書く量より読む量のほうがずっと多い競技です。
- 戦い方:個人ではなく、3 人までのチームで作業を分担します。
- 対象:アルゴリズムの問題ではなく、Web アプリケーションとデータベースでできた、実際のサービスと同じ構成のシステムです。
足りないのはアルゴリズムの力ではなく、Web アプリケーションとデータベースについての知識です。 この教室は、その足りない部分を埋めるために書かれています。
この教室の到達点
この教室を終えたときに、次の三つができる状態を目指します。
- 渡された Web アプリケーションのコードと SQL を読んで、何をしているか説明できる。
- 計測結果を見て、ボトルネック(全体の速度を決めてしまっている、いちばん遅い箇所)がどこにあるかを言える。
- N+1 問題の解消、インデックスの追加、キャッシュといった定番の改善を、自分の手で実装できる。
N+1 問題やインデックスは Part 4 以降で順に説明するので、いまは分からなくてかまいません。
学習の道のり
Part 1 から Part 8 まで、次の順番で進みます。
- Part 1 Go の基礎:struct、エラー処理、goroutine など、競プロで書く Go と Web 開発で書く Go の差分を埋めます。ページ内のエディタで、すぐ手を動かせます。
- Part 2 Web の仕組み:ブラウザに URL を打ってから画面が出るまでに何が起きているかを、言葉で説明できるようにします。
- Part 3 Web サーバーを書く:ブラウザからのアクセスに応えるプログラムを、Go で実際に書きます。
- Part 4 データベースと SQL:データの保存と取り出しを学びます(ISUCON の遅さの原因は、多くの場合データベースの使い方にあります)。
- Part 5 ミニ掲示板を作る:ここまでの内容を組み合わせて、ISUCON で渡されるものの縮小版にあたる小さな Web サービスを作り上げます。
- Part 6 ISUCON に挑む:計測でボトルネックを見つけ、定番の改善を当てはめる練習をします。
- Part 7 性能の理論:負荷と処理時間から、どの資源が先に限界へ達するかを見積もります。
- Part 8 スケールの理論:データの置き場所や台数を増やす方法を、その代償とともに比較します。
所要時間と必要な環境は、トップページの一覧で確認できます。