ISUCONとは何か?
お題となるWebサービスを、決められたレギュレーションの中で限界まで高速化を図るチューニングバトル、それがISUCONです。(公式ブログより)
参加者は、お題として与えられたWebシステムを高速化します。ただそれだけです。
参加者の経歴、勤めている会社がどれだけ大きいか、それらは何の役にも立ちません。単にもっとも高速化できた人やチームが勝ちなのです。
もちろん学生も参加OKです。現に2019年と2018年は学生が優勝しています。
ISUCONはLINEが運営している
ISUCONはLINEが運営しています。2019年のISUCON9(末尾の9は9回目の意味)はさくらインターネットとメルカリが問題作成にあたり、アリババクラウドが実行環境を提供しています。
ちなみにISUCONという名称は「Iikanjini(いい感じに) SpeedUp Contest」の略です。これが仮に関西の企業であれば「ええ感じに」となってESUCONとなっていたかもしれません。
LINEというイマドキの企業が運営し、名前もゆるい感じなのですが、中身はガチなチューニングバトルです。
ISUCONの賞金と、過去の優勝者
ISUCONは、優勝賞金が100万円です。
賞金は優勝のみで、その他の賞は何ももらえないようです。
また、上位には社会人ばかりでなく、学生も食い込んでいるようです。
ISUCONの流れ
ISUCONは予選と本選があります。
予選はオンラインで行われます。予選を通過したチームが本選へと進みます。本選へ進む条件は以下のとおりです。
- 両日それぞれ上位5チーム、計10チーム
- 上記を除いて、2日間トータルでスコア上位20チーム
合計30チームが本選へと進みます。
本選は会場に集まり、朝10:00から8時間、昼食や休憩をはさんだ熱い戦いとなります。2019年度の会場はLINE 新宿ミライナタワーでした。
参加資格
基本的に誰でも参加できます。現役エンジニアだけでなく、学生も参加可能です。現にISUCON9の2位は高校生1人チームです。
ただし、運営側としてはできるだけチームで参加してほしいとのことです。
ISUCONの「中身」は?
ここでは、ISUCONのお題について、言語や過去問をざっと見てみましょう。
ISUCONのお題の言語
お題は複数の言語で用意されています。チームが得意な言語を選択できます。言語と選択比率はこんな感じです(公式ブログより)。
Go | 261組 | 49.4% |
Ruby | 102組 | 19.3% |
Python | 65組 | 12.3% |
PHP | 54組 | 10.2% |
Node.js | 39組 | 7.4% |
Perl | 6組 | 1.1% |
Visual Basic | 1組 | 0.2% |
Go言語がもっとも選択されています。なぜJavaがないのか不思議ですが。
本選の比率も触れておきましょう。
Go | 23組 | 71.9% |
Ruby | 5組 | 15.6% |
PHP | 2組 | 6.3% |
Python | 1組 | 3.1% |
Perl | 1組 | 3.1% |
やはりGo言語が多いですね。ちなみにISUCON9の優勝チームはRubyを選択しています。よって、Go言語が多く選択されているからといって、それ以外で優勝できないという訳ではないようです。
お題のソースはGitHubに上がっているので、誰でも見ることができます。
https://github.com/isucon/isucon9-qualify
ISUCON9の過去問(予選)
出題形式やチューニング方針は予選と本選で大きく変わらないので、予選で解説します。
予選のお題は、椅子を売りたい人と買いたい人をつなげるフリマサイト「ISUCARI」でした。
お題のアプリだけで完結せず、決済と配送は外部APIに投げて処理をします。フロント側はReactを使ってSPAで実装されています。
Ubuntu 18.04 LTSをベースに、データベースはMySQL、リバースプロキシはnginx、アプリケーションサーバはGoという構成になっています。
アリババクラウドに3台のサーバを使います。
ISUCON9のチューニング例
では実際にどうすれば高速化できるのでしょうか?
nginxはデフォルト設定のままなので、見直してチューニングします。HTTP/2を有効にするなどが代表的なチューニング例です。
サーバは3台まで使えます。そのうちインターネットからアクセス可能な1台に対して負荷をかけて検証します。よっていかに残り2台に負荷を分散させるかを考える必要があります。
データベースのインデックス追加も有効な手段です。デフォルトではインデックスが不足しており、検索条件に対する効果的なインデックスを付加するだけでもかなりの速度向上が期待できます。
またN+1問題も含まれています。これは比較的わかりやすい改善ポイントではないでしょうか?
ISUCONはチーム力がとても大事!
ここまで読んでお分かりのとおり、オレ(わたし?)アプリが専門だからインフラはよく分からない、などと言っていられる余裕はありません!
1人で戦うなら、それこそフルスタックエンジニアでないといけませんが、そんな人はそうそうにはいません。よって、ここで大事なのがチーム力です。
1人でアプリの全体を見るのはとても困難で時間もかかります。しかしそれぞれの分野の専門家が集まってチームを組めば、分担して作業ができます。
開発言語が得意な人、データベースが得意な人、サーバやネットワークに詳しい人、それらが集まれば最強チームのできあがりです!
好成績が出たときの喜びも、みんなで分かち合うことができるのです。
その代わり、賞金も分かち合うことになりますが。
ISUCONだけじゃない!プログラミングを競う大会
ISUCONだけがプログラミングを競う大会ではありません。その他の大会も見てみましょう。
AtCoder
AtCoderは、オンラインで参加できるプログラミングコンテスト(競技プログラミング)のサイトです。リアルタイムのコンテストで競い合ったり、約3,000問のコンテストの過去問にいつでも挑戦することが出来ます(公式サイトより)。
出題内容はアプリまるごとではなく、題意をみたすプログラムを作りなさい、といった純粋なプログラミング問題で、ISUCONのようなアプリ丸ごとではありません。
ランキングが公表されているので確認してみると、全世界から参加していることが分かります。上位100位内に日本人は19人ランクイン(2020年2月時点)しており、学生が多いようです。
ちなみにトップは、ロシアとポーランドの間に位置するベラルーシ共和国の大学生です。グローバルですね。
PG BATTLE
PG BATTLEは、1チーム3名による企業・学校対抗プログラミングコンテストです。作品を提出して審査する方式ではなく、出題された問題を解くプログラムを90分間に4つ書いてオンライン提出するガチ勝負です(公式サイトより)。
3名のチームメンバーが挑む問題の難易度は「ましゅまろ」「せんべい」「かつおぶし」と分かれていて、申し込み時に選択します。硬いほうが難しいと考えてください。
3人の点数の合計点で競います。チームではありながら個人のガチ勝負で、メンバー間での相談は禁止されています。
問題はAtCorderと同じく、テーマが与えられてそれを満たすプログラムを作ります。どちらかというとアルゴリズム勝負といった感じです。
PG BATTLEの魅力はチーム戦の面白さに加え、賞品の豪華さもあるでしょうか。Twitterでも話題になっていたようです。
まとめ
プログラミング学習というと、どうしても孤独になりがちで、どの程度成長できたかも分かりづらいです。
これを機に、いつものプログラミングに他人と一緒に勉強する、競うというエッセンスを加えてみてはいかがでしょうか?
- カテゴリ:
- キーワード: