ゴールと ISUCON
読了目安 約3分
この教室が目指す ISUCON というコンテストの姿と、そこまでの学習の道のりを説明します。
この章の目次
この教室のゴールは、ISUCON に参加して、アプリケーションのコードと SQL の改善でチームに貢献できるようになることです。
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 6 まで、次の順番で進みます。
- 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 に挑む:計測でボトルネックを見つけ、定番の改善を当てはめる練習をします。