2022年8月27日に開催されたISUCON12オンライン本選。本選には全30チーム・
ISUCON12本選テーマは、椅子生産を題材にしたゲーム型
ISUCON12本選のテーマは、椅子を効率良く生産する、育成型放置ゲーム
前回2位から、念願の優勝
まず、前回2位から、念願の優勝となりました。3人それぞれ、優勝できた感想を教えてください。
- とーふとふ
- 競技中から上位にいたこともあり、得点凍結前あたりから最後の運営側でのブラウザチェックで引っかからなければいけると思いました。そして、優勝が発表されたときの素直な感想は
「ようやく獲れた」 ですかね。去年のリベンジ (2位) ができて嬉しかったです。 - takashi
- 競技序盤から、チームでの取り組みがしっかりできていたので、最後のチェックに引っかからなければ優勝できると思っていました。無事優勝できて嬉しいです。
- sekai
- 2人と同じですね。ただ、凍結後、もしかしたら自分たちがやり残していたチューニングで逆転されるかもしれない、という思いは少なからずありました。NaruseJunが優勝チームと発表されてホッとしています。ただ、私は優勝発表時、寝ていまして、スマホにメンバーからの通知が来ていて知りました笑改めて、念願が叶った、というのが率直な気持ちです。
苦い思い出のゲーム型課題を克服
今回の課題、
- とーふとふ
- 私とsekaiさんが初めてISUCONに参加した、ISUCON7もゲーム型
(MOゲーム) で、予選は通過できましたが本選でコテンパンにやられました。ので、ゲームということについてはあまり良い印象がなかったです苦笑 - takashi
- 本選発表時の動画を観て、そのクオリティの高さに驚きました。
「すげー!」 と思いましたね。ちょっとした手違いで本選参加者に伝わった情報があって 「本選はゲームに関連するものかもしれない」 ということに気付いていました。 - sekai
- ゲーム型課題が来そうだと聞いて、やはりISUCON7を思い出しました。自分自身、ゲームのバックエンドに触れたことがなかったこともあり、少し不安はありましたね。
- とーふとふ
- イベント開始時の急峻なスパイクやバズを想定したユーザ数の増加など、いろいろ考えていました。今回はゲームの高速化が課題だったため、バックエンドのチューニングをどのようにするか、3人で考えてスタートしています。
予選→本選の準備期間~豊富な経験の蓄積を最大限に活用
オンライン予選
- sekai
- 今回は、事前に1回集まって練習会をしました。
- とーふとふ
- 私たちが今の3人のチームになって3回目、初回から数えると6回目のISUCON参加ということもあって、ノウハウが溜まっています。私たちはそれをチートシートにまとめていて、それを毎回見直して、アップデートしていますね。練習会では、それをもとにいわゆる素振り
(チューニングのデモ) を行いました。チートシートには、ISUCONのどのような問題にも対応できる形で -
- 初動
- 改善
- ブラウザチェック確認
- に関するTipsをまとめています。
- sekai
- 準備の話とは少し逸れますが、それこそ最初にISUCONに参加したときは、課題発表から方針を決め、実際に手を動かすまでの時間がかなり長かったです。ただ、このチートシートをアップデートしていくにつれ、その時間が短縮され、今は、ほぼすぐに手を動かすところに入れるようになっています。
- とーふとふ
- この3人になってからは、初動に関しては、私がドキュメントの読解、takashiがリポジトリの準備・
チェック、nginxの設定確認など、sekaiさんはAnsibleの設定および各種計測ツールの準備、という形でほぼ決まっていますね。それから、pprof (Goのプロファイフィングツール) と連携して動く、pproteinという私たち独自のツールを準備して、初動が完了します。ここまで行えば、最低限必要となる管理・ 計測および共有が可能となるので、そのあとはそれぞれが動き出して、レビューをしながら改善ポイントを決めて、役割を分担して取り組む流れです。
今回の改善はDBに注目、そして、地道なN+1の解消やキャッシュの活用も
本選前からすでに本選がスタートしている
- sekai
- 私は当初からDBに注目していました。というのも、計測が取れた時点でDBが重く、インデックスがきちんと張れているかなど、クエリを見ていたところ、どうやら
(ゲーム内) ユーザ間のインタラクションがないと気づきました。そこで、ユーザごとにテナントを分けられるのではと仮説を立て、複数台あるサーバを活用しようと、DBの水平分割を改善のポイントとして取り組みました。 - takashi
- 私はゲームのアプリケーションの中身の改善を担当しました。計測結果を見ると、ログインボーナスやプレゼント受け取りといったイベント処理のクエリが重かったので、その軽減を行うよう、N+1の解消、クエリ軽減を行うチューニングを実直に行いました。
- とーふとふ
- 序盤はドキュメントやテキストまとめを行っていました。そのあと、リクエストごとにユーザが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公式Blog
- URL:https://
isucon. net/