ISUCON×gihyo.jpスペシャル

年々進化するチートシートと万全の準備体制でついに栄冠を獲得!ISUCON12優勝チームNaruseJun特別インタビュー

2022年8月27日に開催されたISUCON12オンライン本選。本選には全30チーム・84名の挑戦者が進出し、チームNaruseJunがその栄冠を獲得しました。今回、NaruseJunのメンバー、大橋滉也氏とーふとふ⁠、澤田一樹氏sekai⁠、岸本崇志氏takashiの3名にISUCON12の頂点に立った気持ちについて伺いました。

写真1 NaruseJunのメンバー。左から大橋滉也氏(とーふとふ)、澤田一樹氏(sekai)、岸本崇志氏(takashi)。チーム名のNaruseJun(なるせじゅん)は、sekai氏が好きなアニメ映画のヒロインの名前から取ったもの。澤田氏が、ISUCON以前の別の大会出場時から使っているぐらい気に入っているチーム名とのこと
写真1

ISUCON12本選テーマは、椅子生産を題材にしたゲーム型

ISUCON12本選のテーマは、椅子を効率良く生産する、育成型放置ゲーム「ISU CONQUEST」の高速化。サーバ5台で構成されたWebアプリケーションをチューニングするというもので、全30チームが8時間をかけてパフォーマンス向上に取り組みました。

前回2位から、念願の優勝

まず、前回2位から、念願の優勝となりました。3人それぞれ、優勝できた感想を教えてください。

とーふとふ
競技中から上位にいたこともあり、得点凍結前あたりから最後の運営側でのブラウザチェックで引っかからなければいけると思いました。そして、優勝が発表されたときの素直な感想は「ようやく獲れた」ですかね。去年のリベンジ(2位)ができて嬉しかったです。
写真2 大橋滉也氏(とーふとふ
写真2
takashi
競技序盤から、チームでの取り組みがしっかりできていたので、最後のチェックに引っかからなければ優勝できると思っていました。無事優勝できて嬉しいです。
sekai
2人と同じですね。ただ、凍結後、もしかしたら自分たちがやり残していたチューニングで逆転されるかもしれない、という思いは少なからずありました。NaruseJunが優勝チームと発表されてホッとしています。ただ、私は優勝発表時、寝ていまして、スマホにメンバーからの通知が来ていて知りました笑改めて、念願が叶った、というのが率直な気持ちです。

苦い思い出のゲーム型課題を克服

今回の課題、⁠ISU CONQUEST」はいわゆるゲーム型の課題でした。この課題を受けて何か思ったこと、意識したことはありましたか?

とーふとふ
私とsekaiさんが初めてISUCONに参加した、ISUCON7もゲーム型(MOゲーム)で、予選は通過できましたが本選でコテンパンにやられました。ので、ゲームということについてはあまり良い印象がなかったです苦笑
takashi
本選発表時の動画を観て、そのクオリティの高さに驚きました。⁠すげー!」と思いましたね。ちょっとした手違いで本選参加者に伝わった情報があって「本選はゲームに関連するものかもしれない」ということに気付いていました。
sekai
ゲーム型課題が来そうだと聞いて、やはりISUCON7を思い出しました。自分自身、ゲームのバックエンドに触れたことがなかったこともあり、少し不安はありましたね。
写真3 澤田一樹氏(sekai
写真3
とーふとふ
イベント開始時の急峻なスパイクやバズを想定したユーザ数の増加など、いろいろ考えていました。今回はゲームの高速化が課題だったため、バックエンドのチューニングをどのようにするか、3人で考えてスタートしています。

予選→本選の準備期間~豊富な経験の蓄積を最大限に活用

オンライン予選(7月23日)から本選(8月27日)まで1ヵ月強の時間がありました。チームとして具体的に準備したこと、取り組んだことなどはありますか?

sekai
今回は、事前に1回集まって練習会をしました。
とーふとふ
私たちが今の3人のチームになって3回目、初回から数えると6回目のISUCON参加ということもあって、ノウハウが溜まっています。私たちはそれをチートシートにまとめていて、それを毎回見直して、アップデートしていますね。練習会では、それをもとにいわゆる素振り(チューニングのデモ)を行いました。チートシートには、ISUCONのどのような問題にも対応できる形で
  • 初動
  • 改善
  • ブラウザチェック確認
に関するTipsをまとめています。
写真4 チームNaruseJunのチートシートを大公開!
写真4
sekai
準備の話とは少し逸れますが、それこそ最初にISUCONに参加したときは、課題発表から方針を決め、実際に手を動かすまでの時間がかなり長かったです。ただ、このチートシートをアップデートしていくにつれ、その時間が短縮され、今は、ほぼすぐに手を動かすところに入れるようになっています。
とーふとふ
この3人になってからは、初動に関しては、私がドキュメントの読解、takashiがリポジトリの準備・チェック、nginxの設定確認など、sekaiさんはAnsibleの設定および各種計測ツールの準備、という形でほぼ決まっていますね。それから、pprof(Goのプロファイフィングツール)と連携して動く、pproteinという私たち独自のツールを準備して、初動が完了します。ここまで行えば、最低限必要となる管理・計測および共有が可能となるので、そのあとはそれぞれが動き出して、レビューをしながら改善ポイントを決めて、役割を分担して取り組む流れです。

今回の改善はDBに注目、そして、地道なN+1の解消やキャッシュの活用も

本選前からすでに本選がスタートしている(できている)という印象を受けたチームNaruseJunの事前準備。このチートシートは、参加回数の多さ、ノウハウの蓄積の賜と言えます。続いて、実際に今回行った改善のポイントについて、3名それぞれに伺いました。

sekai
私は当初からDBに注目していました。というのも、計測が取れた時点でDBが重く、インデックスがきちんと張れているかなど、クエリを見ていたところ、どうやら(ゲーム内)ユーザ間のインタラクションがないと気づきました。そこで、ユーザごとにテナントを分けられるのではと仮説を立て、複数台あるサーバを活用しようと、DBの水平分割を改善のポイントとして取り組みました。
takashi
私はゲームのアプリケーションの中身の改善を担当しました。計測結果を見ると、ログインボーナスやプレゼント受け取りといったイベント処理のクエリが重かったので、その軽減を行うよう、N+1の解消、クエリ軽減を行うチューニングを実直に行いました。
写真5 岸本崇志氏(takashi
写真5
とーふとふ
序盤はドキュメントやテキストまとめを行っていました。そのあと、リクエストごとにユーザがBANされるかどうかのクエリが重かったのでRedisを使って改善しようと思ったんですが、結局、時間がかかって使えませんでした。余談ですが、毎回、ISUCON終了後のブログを読んだり、話を聞くと、Redisを使って高速化しているので、今回こそはと思って、結局今年も使いませんでした苦笑
sekai
本来なら練習でやっておくべきことで、いきなり本番でやるのは無謀だと止めたんですが、結局使いきれませんでしたね笑
とーふとふ
その後、僕はマスターデータをキャッシュするようにして高速化を図りました。

少しドタバタがあったようにも思いますが、それでも、お話を伺っていると3名が順調に改善に取り組み、チームとして良い結果につながったと思います。ちなみに、どこかのタイミングで今回こそ優勝できる!と思いましたか? あるいは、順位凍結後、優勝の自信はどのぐらいありましたか。

とーふとふ
まず、特別賞[1]をクリアできたとき、よし!と思いました。
sekai
特別賞は嬉しかったものの、午後の時間がまだまだあるので、特別賞の時点では気が抜けませんでした。ただ、私たちのチームが300,000点直前(15:23時点)で、他のチームがまだ100,000点ぐらいだったときに、このままいければ、という気持ちになりました。

そのまま凍結時点でトップだったわけですが、改めて、このときはまだ優勝の確信はなかったのでしょうか?

とーふとふ
スコアとしては30%ぐらい優勝できると思いました。ただ、ブラウザチェック(以前の再起動試験)で失格しているトラウマがあるので、正直残りの70%は不安でした。
sekai
私も同じような感覚です。もう少し細かく言えば、スコアとしては40%ぐらいの自信で、残り30%は他チームの追い上げ、30%がブラウザチェックの心配がありました。発表されるまで、まったく確信はなかったです。
takashi
私も2人と同じです。40%ぐらいの自信、あとは、とにかくブラウザチェックが怖かったですね。

ISUCONとは、チームNaruseJunをつなぐもの

改めまして、優勝おめでとうございます。最後に、3人にとってのISUCONとは、そして、次回に向けたコメントをお願いします。

とーふとふ
私はNode.jsからGo言語をメインに使うようになりました。ちょうどISUCONに参加しはじめた時期がGo言語でのサーバサイド開発をはじめた時期と重なるので、サーバサイドの勉強はISUCONとともにあります。サーバサイド開発はISUCONより前からも行っていましたが、それでも、自分のエンジニア人生にISUCONあり、そう言える大会です。毎回、参加するたびに自分がやるべきこと、そして、知識が増える素晴らしいコンテストです。
sekai
ISUCONを一言で言うと筋トレでしょうか。誤解を恐れずに言えば、ISUCONで出てくる課題は今っぽくない、昔ながらのパフォーマンスチューニングが問題の肝となっています。いわゆる、クラウドネイティブではないのが特徴です。それらをふまえ、自分自身の基礎を見つめ直すきっかけとなる大会で、参加するだけで(エンジニアとしての)基礎体力が付くと感じています。エンジニアリングの泥臭さを実感できる、それがISUCONです。
takashi
私もISUCONの印象は前の2人に似ています。自分も大学生からISUCONに出始め、Go言語、Webバックエンド、サーバを学び始めた時期と、ISUCONに参加している時期が重なります。ですから、自分のGo言語のスキル、サーバ開発の腕は、ISUCONの参加回数とともに蓄積されています。

さて、いよいよ次回は例年通りであれば問題作成側にまわるわけですが。

とーふとふ
正直まだアイデアはないです。
sekai
先ほどのISUCONの印象にもつながるのですが、とにかく問題を出すとなるとバランスが難しいですね。挑戦する人たちがびっくりするものを出したいという気持ちと王道から外れてはいけない気持ち、その調整が重要と考えています。
takashi
新要素をどこまで入れられるか、それを今から考えるのが楽しみです。

弊社の宣伝っぽく恐縮です笑 予選突破時のインタビューでISUCON本(⁠⁠達人が教えるWebパフォーマンスチューニング~ISUCONから学ぶ高速化の実践』⁠」について伺ったところ、お守りになったとお答えいただきました。本選ではどうでしたか。

とーふとふ
予選中と同様、手元にお守り的に置いていて優勝できました笑

ありがとうございました。

ISUCON公式Blog
URL:https://isucon.net/

おすすめ記事

記事・ニュース一覧