部内ISUCONを開催しました

ISUCON9予選に向けた練習会をやった

こんにちは、nagatechです。
今年は「おisu〜」というチーム名でISUCONに出場します。

ISUCON9予選に向けて、自分が所属する東京工業大学デジタル創作同好会traPのISUCON9予選参加チーム(と有志数人)で丸1日かけてISUCONの練習会をやったのでその様子と自分がやったことを記事にしたいと思います。

自分は部内ISUCON競技用のインスタンス用意とポータル開発・運営、アナウンスに競技の参加と、とりあえず全部やりました。ぶっちゃけ大変だった…
大学サークルでISUCONの練習会をやったという記事はあまり見ないので、この記事を参考にしてもらえたら嬉しいです。 知識や経験はないけど時間があるのが学生チームの強みなので…(学生枠がなくなったことを悲しんでいる人)

今回の環境について

問題はISUCON8の予選問題を使わせていただきました。ありがとうございます。

https://github.com/isucon/isucon8-qualify

去年の予選ではインスタンスが3台でしたが、予算の都合で2台で行うことにしました。
また、ディストリビューションがCentOSでしたが、今回(ISUCON9予選)の環境に合わせて練習した方がいいだろうということでUbuntuにしました。
つまりなにをやったかというと、提供されたAnsibleをUbuntu用にごりごり書き換えました。
Ansibleは名前だけ知ってるくらいの知識しかなかったので、実際に競技環境が動くまで結構大変でした。なんとか開催予定日までに間に合って良かったです。

競技用インスタンス用意

競技用インスタンスにはConoHaのVPSを使わせていただきました。
(ここですでにConoHaが公式イメージを提供してることを知る)
(いやUbuntuのほうが予選の練習になるし??)

https://support.conoha.jp/v/isucon8-qualify/

上のAnsibleで立ち上げた競技用サーバをイメージとして固めて、2台×9チームの18台にそのイメージを適用して競技用インスタンスを用意しました。
30分くらいConoHaのコントロールパネルでポチポチ用意したあとに、「API使えば一瞬だったのでは?」と気づきました。次からはそうします。
鯖がいっぱい建ってるの図
これらのサーバにチームごとにプライベートネットワークを適用して、プライベートIPアドレスでインスタンス間の通信ができるようにしました。

注意点なのですが、13台以上のインスタンスをたてる場合には事前に申請が必要です。
ConoHaにお問い合わせをして、個別に上限を引き上げてもらいました。
自分のアカウントは50台までたてられるスーパーなアカウントになっています。

ベンチ・ポータル用意

一度は検証用にISUCON8予選のAnsibleでポータルを立ち上げたのですが、競技者のデータを用意するのが大変そうだったのと実際にtraPで運用するにはいろいろ書き直す必要がありそうだったので自分で実装しました。

正確にはとーふとふが作ったのを自分が魔改造してtraPの人しかログインできないようにしたり、複数台構成やチーム戦に対応できるようにしました。

https://to-hutohu.com/2018/06/18/pisconポータルを作った

詳しい内容は以前学生LTで発表したこのスライドが参考になると思います。(今回のとは少し内容が異なります。)



リポジトリはこちらになります。

https://github.com/nagatea/piscon-portal

ベンチマークサーバをAnsibleで建てて、その上にポータルをデプロイしました。
ポータルサイトは(リンク切れてなければ)以下から見ることができます。

https://portal.emoine.tech

登録されているチームメンバーなら以下の画面が出て、ちゃんとWeb上からベンチマークをまわして結果を確認することができます。画像は1台のベンチマークサーバに6チームが結果を待っている図です(許して)。

競技開始

開始予定時刻5分前までインスタンスの用意をしてました。
というのも、検証を怠っていて競技用パスワードでsshできない(自分だけssh鍵を使ってログインできる)ということが競技日の朝に発覚したからです。

すぐさま修正スクリプトを作成して18台に適用しました。
#!/bin/bash
sed -i -e "s/PasswordAuthentication no/PasswordAuthentication yes/" /etc/ssh/sshd_config
service sshd restart


「コンテストの開始を15分遅らせます」とアナウンスする運営の人たちの気持ちがわかりました。

無事にちょうどの時間に始めることができましたが、うまくいってるか心配で午前中はあまり競技に集中できませんでした。そんなんで練習になるのか?? まあ各チーム各々集中して競技に取り組むことができたのでいい練習になったと思います。(午前中ベンチの設定ミスってたのは内緒)

競技終了

本番さながら時間ぴったりで競技を打ち切りました。
最終的なグラフは以下のようになりました。
部内2位で最後にギリギリ追い抜かれたという結果になりました。
(ちなみに1位はとーふとふとかいう人の1人チームです)

今回はインスタンス2台で本番より1時間少ない7時間での競技でしたが、最高29000点とそこそこの点数をとることができました。去年の本戦社会人の出場ラインが36000点くらいなのでワンチャンあるかな??あってほしいな???くらいの気持ちですね。

競技終了後は参加したチーム全員でなにをやったのかを議論し合ったりなどの感想戦を行いました。
自分は今回は(今回も)インフラ担当でアプリに触らなかったのでちんぷんかんぷんでしたが、チームの方針みたいなものは参考になりました。

おしまい

部内ISUCONのポータルサイトにしれっと欲しいものリストのリンクを載せてたら「アイドルマスターステラステージ」が届きました。この場を借りてお礼申し上げます。

ついでにしれっとほしい物リストおいておきます(強欲)

https://www.amazon.jp/hz/wishlist/ls/39FEGVV9D4AXS?ref_=wl_share

予選頑張るぞ〜〜〜〜〜〜〜!!!