ISUCON8予選に参加した

ISUCON8の予選にokeigoさん、mayokoさんとチーム「しょラーさんのおかげ」として参加していた。 最終的な得点は8000点くらいで予選落ちだった。悔しい。

チームメイトの参加記

brookbach.com

予選まで

とか言っていたら としょらーさんの穴を埋める形で誘ってもらい、参加することになった。

ISUCONの参加が決定してからは手元でISUCON7の予選、ISUCON6の予選を立てて練習していた。 N+1クエリ問題について初めて知った。 あとsystemd、MySQL、nginx、pythonのプロファイラの設定も初めてでいろいろ勉強になった。

予選の一週間前にokeigoさんがISHOCON2をセットアップしてくれて、そのサーバを使って3人で練習した。 3人とも離れたところに住んでいるので、Discordで音声通話、Slackでチャット、GitHubでコードを共有することになった。 言語は3人とも読めるPythonを使うことにした。

予選当日

6時ぐらいに目が覚めた。いつもより6時間くらい早起き。

10時〜

予選スタート。 設定ファイルやpythonのアプリの実装をデプロイするスクリプトを書いた。 h2oをnginxに切り替えるのはokeigoさんがやってくれた。 この間にmayokoさんがアプリを読んでいた。

11時〜

とりあえずベンチマークを取った。 /favicon.icoが異常に重かったのだが、okeigoさんが設定のtypoを見つけて直したら解消した。

13時〜

僕はapp.pyの中でsheetをランダムに並び替えているところを小手先の小技で高速化しようとしていた。 が、あまり早くならなかった。 mayokoさんとokeigoさんがapp.pyget_eventの改善をやっていた。

14時〜

mayokoさんの実装が終わった。 マージしてベンチを取ったら5000点ぐらい出て、学生3位になったので正直勝ったと思った。

15時〜

okeigoさんがredisを使ってキャッシュを実装していた。 venv環境にどうやってredisをインストールするのかがわからずに悪戦苦闘した。 結局バイナリをコピーして対応したらしい。SUGOI

16時〜

キャッシュの実装が動いたので、そろそろ3台構成にしましょうか、という話になった。 が、ポートの開放とかでいろいろ詰まった。 僕はあんまり何もできなかった。

17時〜

17:30ぐらいに3台構成が動いた。 あとは何度がベンチマークをとって終了。 最終的には7900点ぐらいでたはず。

18時〜

祈りした。

19時ごろ

結果が出た。予選を通過することはできなかった。

反省

  • okeigoさんの負担が重すぎた。もうちょっとサーバの設定とか練習しとけばよかった。
  • 役割分担がきちんと決まっていなかった。アプリ2人、インフラ1人というのがバランスが良さそうだった。
  • 複数台構成におけるサーバ間の通信についてわかっていなかった。ISUCONのような特殊な環境ではファイヤーウォールを切って、全サービスが0.0.0.0:portをリッスンしてしまえば良いと思った。
  • サービスとして登録するpythonスクリプトに新しくライブラリ(redis)を追加する処理についてわかっていなかった。
  • プロファイルをちゃんと見ていなかった。ログの可視化スクリプトを作成しておくべきだった。

まとめ

チカラが足りなかった。悔しい。