初のオンライン開催となった「ISUCON10」レポート ──総合1位のtakonomuraさんが、ISUCONへの愛を語る!
Webサービスを限界まで高速化するチューニングバトル「ISUCON」
今回で10回目の開催となったISUCON。年々イベントの知名度も上がり、今回の予選500組の枠は、募集を開始した45時間後には埋まってしまうという人気ぶりだ。
お題となるWebサービスを限界まで高速化するチューニングバトルであるISUCONは、最も高速化したチームが勝者となる。チームの構成人数は3人まで。もちろん単独での参加も可能だ。だが、予選から本選まで参加者の変更、人数追加は許されていない。 (※予選は3人で本選は2人、というように人数が減るのは可)
ISUCONの運営はLINEが務め、問題作成は予選をリクルート、本選をクックパッドと宇宙海賊が担当。クックパッドCTOの@mirakuiさん、ソフトウェアエンジニアの@sora_hさん、そして、元クックパッド社員で現在、宇宙海賊代表の@rosylillyさんは、ISUCON9の優勝チーム「白金動物園」のメンバー。そして予選と本選のインフラは、サイバーエージェントが提供した。
本選のライブ配信が始まったのは午前9時半。約10時間に及ぶ長丁場のイベントが始まった。今回のイベントのMCを務めたのは、LINEのDeveloper Successチームで技術広報などを務めている、ISUCON運営実行委員会の一人、櫛井優介@941さんだ。
競技開始10分前に、本選の問題が発表される
本選の問題が発表されたのは、競技開始の約10分前。本選の問題を発表したのは、白金動物園の@mirakuiさん。「解きごたえのある問題」にすべく、問題制作にかかった時間は約2~3カ月。毎日夜9時半にZoomをつなぎ、進捗を話しながら問題制作に取り組んだという。
本選問題は「eXtreme Speed Up CONtest『XSUCON』ポータルの高速化」。XSUCONのポータルのチューニング。言語はRuby、Go、Node.js、Rustが参考実装に用意された。
「近年のISUCONでは、ポータル運営自体もISUCONだねと言われているので、それを問題にしました。未来のパフォーマンスチューニングは一瞬で終わる。負荷走行も一瞬で終わり、選手たちは1秒の内に何度も研究をしていくことになると思います」(@mirakuiさん)
そして10時、競技が始まった。今回、本選に進んだのは33組91人(内、学生は28人)。490組1209人(内学生の参加者は245人)の予選参加者からの中から、狭き門を勝ち抜いてきた強者たちだ。
本選開始後、櫛井さんと@sora_hさんが33組のチーム紹介スライドを紹介。学生ソロチームとして参加したtakonomuraさんは、ISUCON9の準優勝者。チーム紹介のボードには「今年こそ優勝」との文字。それを見た@sora_hさんは「我々はtakonomuraを絶対倒すという意気込みで問題を作った」と明かす。
リクルート古川さんによる予選問題の解説と講評
本選参加チーム以外にも、並行チームが同じ問題にチャレンジするチャレンジ企画も用意され、4チームが参加した。並行チームの中にはISUCONの運営会場で参加したチームもあり、午後に行われた運営会場ツアーでは、並行チームが問題に取り組む姿も紹介された。
そのほかにも、競技が終了する18時までの間に、予選問題の解説や過去ISUCONの思い出をゲストと一緒に振り返るコーナーや本選出題チームとのトークセッションを開催。さらに結果発表の前には協賛企業による採用に関するLTが行われた。
予選問題の解説と講評を行ったのは、リクルートの古川陽介さん。予選の問題は「ISUUMO」と呼ばれる椅子に合う物件を検索するサイトのチューニング。リクルートの賃貸情報サイト「SUUMO」を基に作っていたため、問題作成の前にまずは「許諾が必要だった」と古川さん。実際に社内で起きていたパフォーマンス問題に近い課題を設定した。
上位にいけるポイントとなったのが、実際のアプリにも搭載している「なぞって検索機能」の改善。チューニングポイントはいくつかあり、例えばトップ画面で常に最安の椅子と物件を検索するAPIの部分。「SQLにindexが効いていないので、ボトルネックになっている。
これはジャブ的な問題だが、indexを効かせるだけで点数が上がります」と古川さんは解説。詳しい内容を知りたい方はISUCONブログ「ISUCON10 予選問題の解説と講評」のご一読を。
過去ISUCONの思い出をtagomorisさんと振り返る
過去ISUCONの思い出を、ゲストと一緒に振り返るコーナーのゲストはtagomorisさん。ISUCON創設者であり、ISUCON1、2、5の出題者、かつISUCON3、4で優勝している。
「ISUCON発想のきっかけになったのは、チューニングガソンというWebアプリケーションのパフォーマンスを競うイベントだった」と、tagomorisさんは振り返る。
同イベントはOSやDBなどのパラメータだけでチューニングするのだが、対象となるソフトウェアが詳しいかどうかで、結果が出てしまうものだった。
「もの足りなくて、なんでもありのWebアプリケーション高速化バトルをやってみたらどうかと、社内Wikiに書いたのがきっかけ。とはいえ、イベントを主催するとは言いづらい。そこで当時CTOだった池邉さんに、自社サービス用に購入し、スタンバイ状態にあったサーバーを使いたいとお伺いを立てたところ、OKをもらえた。そして、ISUCONを立ち上げることになりました。だから、ikebeさんはISUCONの名誉会長なんです(笑)」(tagomorisさん)
ISUCON問題の変遷に関する話で盛り上がった櫛井さんとtagomorisさん。ISUCONの過去問ができたのは、大きな転機になったという。
「ISUCON初期は、実際の現場で高負荷を味わったことがあるかないかが、問題を解決するスキルに直結していた。過去問ができたことで、現場がなくても負荷を手に入れることができましたね」(櫛井さん)
tagomorisさんも「以前は業務で培ったスキルをISUCONに活用する形だったが、今はコンテストで高得点をとれる技術が業務に使える。どちらに傾くかは微妙なバランスで、コンテストとして確立していくとこういう流れになる」と語る。
昨今、学生チームが活躍できるのも、過去問ができたことが大きいようだ。
ISUCON10の運営側の裏話も
午後は、ISUCON10インフラチームの@whywaitaさんがゲストとして登場。予選と本選のインフラをサイバーエージェントが提供に至ったのか、その裏話などが紹介された。
@whywaitaさんはISUCON8の優勝チームのメンバーで、ISUCON9の時からインフラ提供をしたいと考えていたそうで、「そのときは社内調整に失敗した」のだとか。今年は念願叶って、ISUCON10のインフラ提供が実現したが、「予選の前から当日にかけては、胃が一番痛くなりました」と@whywaitaさん。
予選は2時間遅れの開催。@whywaitaさんは予選終了後にエゴサーチをしてみたそう。「でもインフラは話題に上がっていなかった。みなさん問題が良かったという話で盛り上がっていたので安心した」と@whywaitaさんは笑顔を見せる。
櫛井さんも「みんな楽しかったという気持ちしかなかったと思う」と相づちを打つ。その後も今回、ISUCONで使ったサーバをどうするか、サイバーエージェント賞のSFP+モジュールの使い方などについて語られた。
続いてISUCONポータルサイトやサポートチャット、本選問題など幅広く担当した@sora_hさんが出演。サポートチャットについて回答漏れがないようにしようと思ったが、「予選ではトラブルがあり、思った通りに運用できなかった」と@sora_hさん。
だが、本選ではレギュレーション通りに運用できている。櫛井さんがすごいと思ったのが今回のチャットに採用された「Discord」。@sora_hさんはDiscordの課金ユーザーとして応援している。
Discordはゲーム向けのボイスチャットとして有名だが、「ゲーム以外にも使えるというメッセージになったかも」と@sora_hさん。このとき競技時間は残り1時間に迫っていた。スコアの集計も担当している@sora_hさんは「頑張ります」と言い残し、持ち場に戻った。
17時にスコアボードの更新がストップされ、競技者が追い込みをかける中、スタジオには出題者の@mirakuiさんが登場。今回の問題にかけた思い、取り組んだことなどについて語られた。
「良い大会にしようという気持ちで問題を作った。本番用のものをいかに簡略化して問題に落とし込むか、そこに苦労しました」(@mirakuiさん)
総合1~3位まで学生チームが独占。一人チームによる総合1位は史上初
そして、いよいよ結果発表。総合1位はtakonomuraさん。総合2位はAzeitチーム。総合3位はがんもどきチーム。総合1~3位までを学生チームが独占した。
しかも優勝したtakonomuraさんは、一人での参加。「学生、しかもソロチームが総合1位を獲得するのは初の快挙」と櫛井さんも驚きを隠せない様子。「今後は社会人枠を作らなければならないのでは」と冗談が飛び出すほど、衝撃の結果となった。
出題チームの@mirakuiさんは、以下のように講評した。
「今回はベテランが活躍する大会になると思っていたが、最終的には学生が1~3位を独占する結果に。takonomuraさんはISUCON9でも2位を取っていたので、彼をコテンパンにしてやろうと思っていたが、逆にボコボコにされた。今回は最も多いコードの問題。それを学生が問題をうまく読み解いてスコアにつなげていった。最終的にぼくらも想定していなかった高いスコアが出た。すばらしい大会になったと思う」
takonomuraさんは、「よく覚えていないけど、いろいろやりました。ダッシュボードの最新スコアをチームテーブルに入れたりn+1をつぶしたり、indexを入れたり。サーバーが3台あったので、1台をWebとベンチマーカーAPI用に、1台をWeb専用に、最後の1台をDB専用にしました。3台あるサーバのスペックが異なっており、2台目のメモリが2GB積んであることに、終了10分前まで気づかなかったことが悔しかった」と語った。
最後に並行チームのスコア(参考値)を発表し、ISUCON10は終了。非常に盛り上がった大会となった。
総合1位を獲得したtakonomuraさんに単独インタビュー
後日、改めてtakonomuraさんにインタビューを実施した。 takonomuraさんは、筑波大学 情報学群 情報科学類の1年生。周りの大人からは「若さゆえのミスが一切ないことから、人生3週目なのではないか」と言われるほどの落ち着きぶりが魅力の1つだ。
──総合1位を勝ち取った感想をお聞かせください。
takonomura:本当に優勝できるとは思わなかったので、とにかく嬉しかったです。最後の1時間で、自分のチームは2倍にスコアが伸びていましたが、他のチームも一気に伸びているだろうという不安もありました。発表されるまではドキドキでした。
──今回の作戦・秘策はありましたか?
takonomura:昨年の本選、今年の予選もそうでしたが、大会が終わった後に必ず反省会をしています。去年の本選での反省点は、問題が大きくて解ききれなかったこと。もっとできることがあったのに、やりきることができませんでした。
重要なところをやり残すと、スコアが伸びないので、今年は重要な部分を早く見つけようと思っていました。CPUにボトルネックがあればそれを解決するなど、あらかじめメモしておいて、覚えておくようにしました。本番中は冷静ではなくなりますからね。そうしたことが優勝につながったと思います。
──グループではなく一人(単独)参加の理由は?
takonomura:一人チームでの参加はISUCON9から。理由は受験があったので、チームを組むと練習する時間をとるのが難しかったからです。昨年は2位になったこともあり、今年はリベンジしたくて、最初から一人で参加しようと決めていました。
実は、ISUCON8は同じ学校の3人グループで参加して、予選敗退しました。それまで関わりがあまりなかった「ISUCONをやりたい人」を集めたので、コミュニケーションが円滑にいきませんでした。3人のメリットが発揮できなかったのです。
でも、一人ならコミュニケーションをとる手間がありません。ただ、今回は一人でできる限りのことができましたが、もっと高いレベルに行くにはやはり仲間が必要だと思います。
一人でミスをすると、ロスが大きくなりますが、3人なら一人がロスしても他の人は作業ができているので、取り返すことができますからね。
──ISUCONの利用言語はGoでしたが、普段はどんな言語を使っていますか?
takonomura:バイト先のクックパッドではRubyを使うことが多いですね。ちなみにプログラミングは小学生の頃から始めました。
──他のプログラミングコンテストに参加したことはありますか?
takonomura:プロコンは参加したことはありますが、アプリからインフラまでサービスの総合的なことが学べるISUCONが大好きで、今はISUCONにしか参加していません。
──将来、目指していることがあれば教えてください。
takonomura:まだ、将来のことは考えていませんが、大学でいろいろな知識を得て、決めていければと。ISUCONに参加したことで、パフォーマンスチューニングや計測する基盤にも興味を持ったので、これから学んでいきたいと思っています。
「ISUCONは運営者・参加者からもすごく愛されているイベント」
続いて、ISUCONの運営者である櫛井さんにもインタビューを実施した。
──学生が1位~3位を占めたことに対する感想を聞かせてください。
櫛井:そもそもISUCONはブログやSNS、チケット予約という題材からもわかるように、プロ向けのコンテストとして始まりました。しかし最近は、ベンチマーカーや過去問が公開されていったことで、これまで社会人でしか体験できなかった負荷を、学生でも擬似的に体験できるようになりました。
ISUCON6の頃から「いずれ学生の方が強くなるのでは」と言われるようになり、事実、ISUCON8で学生チームが優勝しました。学生チームが強くなるのは予想の範囲内でしたが、一人チームが優勝チームするとは誰も思っておらず、今回はとにかく衝撃でした。
takonomuraさんが言うように、一人だとコミュニケーションコストはありません。ですが、正しい戦略で最も正しい選択をし続けないと優勝にはたどりつけないんです。ISUCON10の本選問題はボリュームが非常に多い。問題の全容を掴み、マニュアルを読み込むまでに2時間かかるほど。そこからどこに問題があるのか探していき、3人チームだと一人は司令塔、DBを触る人、アプリケーションを触る人と役割を分けて、全員で取り組むのが一般的と言われています。
takonomuraさんは、どの役割も適切に突き進むことができています。マラソンで例えると全速力で走り続けたようなもの。それを彼はやり遂げた。すごいとしか言えません。
この櫛井さんの言葉に対して、takonomuraさんは次のようにコメントしてくれた。
takonomura:ISUCONでは計測が重要です。3人チームであれば、マニュアルやソースコードをよく読んでから修正していくと思うんです。しかし、一人ではソースコードとマニュアルを読み込むと時間が足りなくなる。そこはあっさり済ませてます。とにかく計測してボトルネックを見つける。そこを改善して計測すると、別の箇所が跳ね上がるので、また改善していく。それを繰り返して、スコアにつなげていきました。
──17時以降、大きく順位が変動しました。舞台裏では何が起こっていたのでしょう。
櫛井:最後の1時間は自分のスコアしか更新されなくなるので、順位が変動しているかはわかりません。また。競技終了後に再起動試験をするので、そこで安定的に動かないとスコアが出ずにFailとなります。
リスクは高いけどハイスコアを目指すのか、安定性を求めてスコアはそこそこでやめておくのか、チームによって戦略が異なってきます。takonomuraさんは、17時の時点では2万点台とそれほど高くありませんでしたが、最後の1時間で倍の4万8000点台をマークしました。
今までやってきたことが正しくがっちりはまらないと、こういう上がり方はしません。本当にすごいと思いましたね。また、ISUCON10アフターイベントのカルトクイズでも、takonomuraさんは圧倒的な知識とISUCON愛で優勝しました。SASUKEで言うところの完全制覇。もう僕ら運営もお手上げ状態です(笑)。
──最後に、ISUCON10の総括・感想をぜひ!
櫛井:ISUCONが始まってから10回目、本選をオンラインで実施するというチャレンジもあり、メモリアルな大会になりました。本来なら会場で集うことで味わえる空気感や緊張感、終わった後の開放感を、どうオンラインで味わえるか。そのために企画したのが、本選のライブ中継です。
長時間話し続けることができるか不安でしたが、結果的に11時間放送し、7時間話しっぱなし。なんとか喉は大丈夫でした。オンラインで開催したことで、新しい時代に向けたイベントができたと思います。結果については学生チームが上位を独占したのは良いことだと考えています。
ISUCONの運営者は30代、40代が中心なので、今までのインターネットを作ってきた人たち。一方takonomuraさんをはじめ、上位を占めた学生は、これからのインターネットや社会を作って行く人たち。そういう異なる世代をつなげるイベントになったと思います。
今回、優勝したことでtakonomuraさんの知名度も上がり、新しいスターが誕生しました。そういう場所を作れたことにも達成感があります。新たな参加者も増え、イベントもいい感じに育っています。運営からも出場者からも愛されているISUCON、来年の開催が今から楽しみです。
ISUCONに関心を持った方は、ぜひ来年チャレンジしてみよう。