会津大学生に贈る ISUCONのすゝめ
はじめに
こちらは Aizu Advent Calendar 2021 13日目の記事となります。
- 12日目の記事 ... 朱雀くん
- 14日目の記事 ... soukoukiさん
ISUCONについての紹介
ISUCONというイベントを皆さんはご存知でしょうか?
ISUCONというのは いい感じにスピードアップコンテスト (Iikanjini Speed Up Contest) の略であり、 限られた時間の中で遅いウェブサイトをいかに高速化するか? ということに焦点を当てた競技会です。
年1開催となり、今年の2021年で11回目の開催となった由緒ある競技会となっています。
1~3人1チームとなり、1つのウェブサイトを極限まで高速化する、ただこれだけのシンプルな内容ですが、 エンジニアリングに必要な知識が多く求められ、挑戦しがいのあるとても楽しい大会になっています。
Webサイトの高速化をなぜやるの?
GoogleはWebサイトの反応時間の遅延に関して、人間がどのような反応をするかについてまとめています。
参考リンク
パフォーマンスの低下による遅延とそれに対するユーザーの反応に関する表を見てみると、ユーザーが求めるパフォーマンスは、かなり高いものになっています。
上の表からもわかる通り、人間が「すぐに結果が得られた」と感じることのできる時間は 0~100ms となり、それ以上になるとユーザーは操作と反応にずれが生じていると感じるようになります。
反応速度が1秒を越してくると、ユーザーは実行されているタスク(何かを表示するなどの動作)に関心を失い始め、10秒を越してくるとユーザーは不満を感じて、別のことをしてしまうことになりえます。
ボタンを押してから結果が返ってくるまでで介すレイヤーは数多くありますが、その時間の中でも無視できない大きさを占めるのがバックエンドを含めたインフラ、サーバーサイドです。
バックエンドのシステムはリクエストを受取り、リクエストの意味を解釈し、それに応じたデータを完璧に返す必要があり、それまでにかかる時間は往々として大きくなりがちです。しかし、反応速度というのはGoogleの記事にもあるようにユーザーへ提供する価値が高いもの。ここを高速化することでユーザーにより高い価値を提供できるようになります。
表示速度を改善できるというのは単なるユーザー体験の向上だけでなく、SEO対策にも有効になってきます。Googleは2018年7月ごろからページの表示速度を考慮に入れています。
表示速度ならフロントエンドも重要じゃないか?とありますが、それはそう。
話が脱線してしまうのでさらっと触れるだけの話になってはしまいますが、フロントエンドのチューニングイベントも開催されています。こちらは会津大学生が優勝したこともあるので、身近かもしれません。
ISUCONについての詳しい話
そもそも何?
ISUCONについての話は冒頭にさらっと触れましたが、ここでは細かい話をしていこうと思います。
そもそもISUCONというのは いい感じにスピードアップコンテスト (Iikanjini Speed Up Contest) の略であり、webアプリのチューニングに焦点を当てた競技会です。
チームの構成と予選・本選の流れ
参加費は無料、1~3名で構成されたチームを「一般枠」「学生枠」のいずれかで登録し、先着で応募された公式で定められたチーム数で争われる競技会。
学生枠は、チーム全員が学生で構成されているチーム、この中に社会人が1人でもいれば一般枠での出場となります。(社会人学生は含めない)
一般枠は、チームの中で一人でも社会人がいる場合の参加方法です。
その中で予選を戦い、以下のように上位30チームが次の本選へ進むことができます。
- 一般枠 (25チーム)予選終了時スコアにおける上位25チーム
- 学生枠 (5チーム)学生チームの中で、予選終了時スコアにおける上位5チーム
高速化するアプリケーションについて
選手は主催者から提供されたWebアプリケーションを競技時間内に高速化します。このWebアプリケーションは Go や Python, NodeJS など様々な言語で実装されており、選手は得意な言語でアプリケーションを高速化していきます。また、ベースとして用意されている以外の言語で実装してもOKです。
高速化するのはアプリケーションだけではなく、nginxやDBなどのインフラ層やDBの高速化もしていきます。限られた時間の中で効果的な高速化の手法や構成を考えて、実装を行うのが、解答の面白いところであり、悩みの種でもあります。
チューニングの確認 ベンチマーク
チューニングされた結果、どれくらい速くなったのかはベンチマークを通して知ることができます。
ベンチマーカーが自分たちのサイトへAPIリクエストを行い、どれくらいの速さで返ってきたかや正しいレスポンスを返してくれるかを点数化してくれ、ランキングが生成されます。
参加者はこの結果をもとに今後のチューニングの見立てをしたり、バグ修正に勤しむことになります。
ベンチマークの裏で各種プロファイリングツールを利用し、どこが遅いのかやどう遅いのかを明確にした上で、次の打ち手を考えるなどPDCAのサイクルを回して実装していきます。
なぜISUCONをするのか?自分がISUCONをする理由
ISUCONの人気
このISUCONはチームの登録開始から数時間で定員となるほどの人気があります。
今年のISUCON11は600チームの枠が4時間で埋まりました。それほどまでにISUCONは知名度があり、多くのエンジニアが参加する大会となっています。
参加者はこの大会のために事前準備で過去問を解いたり、ツールを駆使して、1点でも多くの得点を取るための準備をしています。
自分がISUCONに参加する訳
自分がISUCONをやる理由というのは主に2つです。
自分の糧になる 自分の知識を総動員できる
自分が今まで体験してきた高速化の手法を使えるだけでなく、ISUCONで学んだ知識を実際の開発に用いることができることです。
ISUCONの高速化手法の中でも、自分の糧になることは多く。N+1クエリの撲滅やDBの分割、サーバーの分割など実務でも利用できることも多く、ISUCONの問題を解くごとに自分の知識が増えていくことを実感します。
大学生では普段なかなかすることのできない、稼働しているサービスを取り扱うことや、インフラを触ったり、DBをチューニングしたり、プログラムを高速化するなどはここでしかできない貴重な経験です。
また、時には奇想天外なアイデアで得点を上げるための工夫や発想も必要となり、自分の知識を総動員した戦いも可能です。
ISUCONで得た知識は間違いなく自分の力になりますし、プログラムの見かたも変えることができるようになります。自分の持っている知識をより深く、広くするためにもISUCONはとてもいい教材となります。
楽しい
ISUCONでチューニングすることはとても楽しいです。雑な感想ですみません。
チームメンバーで話し合いながら、プロファイリングされた結果をもとにどのような変更を行うかを話し合ったり、具体的な解決法を導き出すのはチーム戦ならではの楽しみ方です。
結果をもとに「どこが遅い」、「ここをこうすれば高速化できるのでは?」とdiscordなどで会話しながら改善案を出していくチームプレイ、己の力のみで黙々と作業をし、上位を狙う個人勢など、参戦の仕方も多々あります。
楽しさというのは人それぞれですが、高速化のために普段はできないようなことを「ISUCONだから...」と言って無邪気に試すことができるのも醍醐味です。
終盤にはlogを吐くのが邪魔だからすべてのログを切ったり、実際の業務ではできないようなSQLを投げて、高速化のために気合でレスポンスを取り繕ったり、高速化のためなら(レギュレーションの範囲内であれば)OKという何でもありの面白さもあります。
何でもあり、ただ速い実装をしたチームが勝ち
シンプルな内容故にハマると抜け出せない、それがISUCON沼です。
会津大学生へのメッセージ
雑に紹介してしまいましたが、ISUCONはとてもおもしろく、奥が深い競技です。
ISUCONはサーバーだけでなく、DBやインフラについて詳しくなる絶好の機会であり、会津大学生の皆さんにとても楽しんでいただけるようなものとなっています。
ISUCONは10と11に参加していますが、会津大学の学生の参加率が低く、自分の中では会津大学生にぜひ参加してもらいたいプログラミングコンテストの一つです。
ここから勉強を始め、知識をつけて、今後の糧にしていただきたいなと思っています。
会津大学の在学生とISUCONで戦うことができるのを待っています!
ここまで読んでいただきありがとうございました!
Discussion