blog.syfm

徒然なるままに考えていることなどを書いていくブログ

ISUCON7 に出た

土曜日に ISUCON7 に出ていた。
チームは、自分と、同じ大学の友人一人。本当はもう一人いる予定だったけど、別な予定と被っていたらしく、二人のチームになった。

トラブルがあったようで、開始の時間が遅れて 13:00 からになったりと、運営の方もとても大変そうだった…。お疲れ様でした!
点数は2万点くらいで、なかなか残念な結果。事前に過去問を解いておくべきだったと思う。
やったことは、icons を MySQL から出すようにするのが一番大きかった気がする。
なぜか MySQL に icon がバイナリごと突っ込まれていて、これが一番のボトルネックになっていた。
なので、DB から取り出そうということになって、一番簡単であろうファイルへの書き出しを行った。
GET /icons/hoge の時は nginx の try_files ディレクティブでディレクトリに存在するか確認して、なければアプリに飛ばすようにし、アプリでは DB からの取り出しとともに書き出しも行うようにして以降はそのファイルが使われるように変更した。
Redis みたいな KVS でキャッシュすればもっと早くなったのかなーとか後で思ったりもした。

他にも、インデックスが貼られていないカラムにインデックスを貼ったり、N+1 を解消したりしていた。

使っていた言語は Go で、サーバ上で上手くビルドできなかった (vendoring ができていなかった?) ので、早々に諦めてローカルでビルドして scp を使って頑張っていた。
あと、ページングで OFFSET が使われていたので、これをどうにかしたかったけど、実装力と時間がなくて間に合わなかった。
普段開発しているとあまり時間に追われることがないので問題にならなかったけど、実装力が低くてつらい。

一番深刻なのが、nginx に関する知識の欠如とパフォーマンス計測の勘所が全然わからなかったことだと思う。
普段手を動かしていないことを本番でやろうとしてもできないということを身をもって痛感した。

この辺の反省を活かして来年は頑張っていきたい 💪