ISUCONに初挑戦しました

ISUCON13 に会社の同僚と初挑戦しました!
チーム全員が ISUCON 初挑戦な上に、あまり時間も取れずほぼ準備なしで臨みました。

結果

7,970 点でした!(全チームスコア
初期値から1点でも上がれば御の字くらいのモチベーションだったので普通に嬉しいです。

言語

業務で全員が使っていたので Ruby で全会一致でした。

リポジトリ

https://github.com/sasamuku/isucon13

準備

ISUCON の前々日がたまたま祝日だったので、全員で最初で最後の MTG をしました。流石に右も左も分からないまま終わるのは嫌だったので最低限のすり合わせをしました。

  • 同僚が用意してくれたサーバに過去問の環境を作成
  • Git を設定して pull してデプロイまでの流れを確認
  • パフォーマンスツールの設定と見方の確認
    • stackprof
    • Newrelic APM

時間が余れば実際に改善してみようと思ったのですが、夜遅くなってしまい断念😌

当日の流れ

マニュアル読み合わせ

初参加ということもあり、失格するのが一番避けたいことだったので、当日マニュアルはしっかり読み合わせました。

環境構築と初回のベンチ実行まで問題なく進み一安心。

インスタンスが3台あるけどスコア取られるのは1台だけだよな?ん?となりましたが、DB サーバと分けたり、アプリケーションサーバ複数台構成とかするためだと後から知る。

また、途中に DNS の記載がありましたが、僕らはおそらく手を付けることはないだろうと読み飛ばしました。

Git の設定

前々日に手順を確認していたのでチームメンバーがスイスイと設定してくれました。デプロイ担当は1人の方がいいとどこかで読んだので毎度同じメンバーに依頼してデプロイしてました。

パフォーマンスツールの設定

stackprof と Newrelic APM を入れました。どちらかでよいとは思いつつ、stackprof を使いこなすまで僕らが成熟してなかったので、Newrelic APM で全体感だけでも分かればいいなくらいの気持ちでした。APM でクエリのスパンまで見れたらよかったのですが、設定が足りなかったのか見れず。

それでも `GET /api/user/:username#statistics` がなんかゲロ遅いなとか気付く材料にはなりました。

(実際の画面)

開発環境構築

コードや設定を変更してデグレるのが怖かったので、docker-compose で立ち上がる開発環境を作ろうとしました。ここにメンバー全員と3~4時間という膨大なリソースを投入してしまいました...

そのため実質改善に回せた時間は2時間もなかったように思います 涙
この期限を過ぎたら諦めるみたいな縛りが必要だったかも。
しかも作った開発環境は結局使う余裕がなかった😂

改善

チームメンバーが Index を貼りまくり、僕は適当にそれっぽいところに LIMIT 句を追加したり、怪しそうなクエリを消して、実装側で処理させるようにしたりました。

多分実際にスコアに効いたのは Index だけだったのかな。

とにかく時間がなかったのでバーっとやって、最後にパフォーマンスツールを停止して無事タイムアップでした。

反省点

一番の反省はやっぱり開発環境構築にこだわりすぎてしまったことです。ローカルで試さずに本番デプロイなんてできない!という真面目なメンバーが集った結果ですw

もちろん過去問を解いたりも事前にできてればよかったのですが時間なかったのでしゃあなし。

感想

Web エンジニアなら誰もが耳にする ISUCON。
それに実際に出てスコアを上げることもできて御の字でした。

チームを組んでくれた同僚と運営の皆さんに感謝したいと思います。
来年こそは2万点くらい取れるようにしっかり準備したいです!