出題者になって分かった「ISUCON必勝法」
――今回は出題者の立場ということで、去年までの、競技に参加する選手の立場とは大きく異なります。どのような学びがありましたか?
temma:学びについては、ISUCONに参加するうえで有利になりそうな技術的な知見と、出題者になって初めて分かった苦労と、出題者としての楽しさの3つがあります。
最近のISUCONでは、ベンチマーカーの「ストーリー」が重要だというのがISUCONに有利になりそうな情報ですかね。ISUCONの採点は、アプリケーションに対して大量のリクエストを送信する「ベンチマーカー」によって行われます。ベンチマーカーはユーザー(群)を模してリクエストを送ってくるわけですが、各エンドポイントをどのような順で叩くのか、どのような依存関係があるのかといったベンチマーカーの振る舞いには題材固有の意味があります。
翠:ISUCONのソースコードの見方が変わりますね。
temma:選手として参加していた時は、アプリケーションのコードが渡されると、前のめりになってどのエンドポイントが遅いのか探していましたが、出題者としてベンチマーカーを考えていくと、ユーザーはどの順番でページを閲覧し、どの機能が遅いから次の行動ができずにいて、アプリケーション全体としてはどれだけ遅くなってるのかという、ユーザーから見たアプリケーションの質に着目することの重要さに気づきました。
アプリケーションの全体像を捉えるためには、渡されたコードを読むだけではなくて、アプリケーションを実際に触ったり、ドキュメントを読んで細かい仕様の意図を理解したりするのが大事だと思います。
りょは:他には、ISUCONはどれだけボトルネックが解消できたかを競う大会ではないというところもポイントです。ボトルネックを改善するだけでも点数は上がるのですが、時間内にすべてのボトルネックを改善できるわけではありません。より効率よく点数を上げていこうと思ったら目の前にあるボトルネックだけではなく、ユーザー目線でのアプリケーションの質を上げることに注目する必要があります。
temma:どのボトルネックがどれぐらい早くなったというよりは、サービスとしてどれだけうまく動いたか、どれだけ価値のあるフローが早く回っているかに重きを置いて採点されるようになっています。
例えばECサイトがお題なら、たとえ商品を買う行為が早くなっても、商品が表示されるまでが遅かったらサービスとしては早く回らないですよね。ECサービスが生み出す価値は、ユーザーが商品を買ってくれることであって、そこにたどり着くまでの流れが全体として早く流れるようにしないと、点数が上がらないようになっています。
――次にまた選手として参加したときには、アプリケーション全体を理解することからやっていきそうですか?
temma:よくあるボトルネックについては何も考えずに改善を入れるかもしれませんが……、時間が取られそうな改善が複数あるときに、どれが大事なのか、どういう順番で改善していくかは、全体像から判断できるようになるかもしれませんね。時間制限があるので、適切な順にボトルネックを解消していくことは大きな力になります。
りょは:出題者は意味のないことはできるだけドキュメントに書かないようにしようって思っているので、これからより一層ドキュメントを見ますね。
temma:今回も、この問題を分かりやすくしよう、ヒントを出そうという思いでドキュメントを書いてますね。
――「出題者になって初めて分かった苦労」についてはいかがですか?
temma:アプリケーション本来の時間軸よりもギュッとコンパクトにすることで、時間当たりのリクエスト量を大きくしている、つまり負荷を加えているわけですが、採点側も同じ量のレスポンスについて正しい挙動をしているかのチェックしないといけないのが難しいです。特に時間に依存した処理はチェックするのが難しいですね。
翠:普通のWebサービスだと、一つのサーバーに対して大量のクライアントがアクセスしてくることで負荷がかかり、サーバーがダウンする形になると思います。それに対してISUCONの場合は、ユーザーを模しているベンチマーカーが1台しかないので、本来は1対多で行う勝負を1対1で行わなければならない点も難しいところですね。
りょは:ベンチマーカーと選手が持ってる環境は、なんなら選手が持ってる環境の方が強いぐらいなのに、ベンチマーカーは常に余裕がある状況でないと、選手の点数が伸びなくなってしまい、競技が成り立たなくなってしまいます。そこを保障するのが難しいですね。
――普段のアプリケーションとは違った特殊な環境におけるベンチマーカーの設計が難しく、その実現までの取り組みが学びになったんですね。「出題者側としての楽しみ」についてはいかがですか?
temma:ISUCONの問題って、要は自分たちで一つサービスを作ってるわけなので考えるだけで楽しいですし、制限のある状況で僕たちもうまくコードを書かないといけないので、それも楽しかったですね。あと、社会人の方と長い期間密に交流する機会もなかなかないので、僕にとってはそれもすごく楽しいポイントでした。
――最後に、本選に出場される方にメッセージをお願いします。
941:実は今回の本選の問題はtraPの皆さんが考えてくれた問題なんですよ。本選は学生の力が思う存分出ている問題になっているので、ぜひ注目していただきたいです。
翠:僕はポータルのリードなので、競技に集中できるようなポータルになってたら嬉しいです。
りょは:予選も楽しんでもらったと思いますが、本選はもっと楽しい問題になってると思います。
temma:僕たちの思いの詰まった問題になっているので、ぜひ楽しんでもらえると嬉しいです。
――ありがとうございました。ISUCON本選まであとわずか。traPの皆さんも選手の皆さんも頑張ってください!