はじめてのISUCON
2015-09-28に「お前それ糖質警察の前でも同じこと言えんの?」チームの一員としてISUCON5に出場してきました。
経緯
去年くらいからISUCONに興味はありましたが、
- ISUCON出場者怖い
- ぼっちなので一緒に出る人がいない
という問題により出場していませんでした。
ところが、今回知り合いのチームに欠員が出たということで声がかかり、軽い気持ちで「出て良いなら出ます!」的な返事をしたら出ることになりました。流れとはいえ、一歩踏み出すの大事。
やったこと・結果
さらっと思い出せるあたりだと、以下の様なことをしました。
- Nginx -> UnicornをUnix Domain Socketに
- SQLのチューニング
- インデックス貼ったりOR削ったり
- get_userのクエリ削減
- 横着してmemcached使ったけどダメだった。
- my.conf
- バッファ量変えたり
- commentsにカラム追加
- NginxとUnicornのworker数変更したり
- メンバーが持ってきてくれたカルパスを貪り食った。
スコア
最終的なスコアは2896でした。
正直、「もっと頑張れただろ!」という悔しさが残る点数です。本当に悔しい。
反省点
- 過去問やるとか言っておきながらやってなかった。
- プロファイリングが甘かった。
- 優先順位がいろいろ間違ってた気がする。
- 横着せずちゃんとN+1を消すべきだった。
- initialize時にもっといろいろできた。
- メモリを1.7GBくらい遊ばせていてもったいなかった。
- 会場のwifiパスワードとかは事前に調べておいてもらうべきだった。
- テザリングで戦ったが、精神衛生上よろしくなかった。
所感
全然スコア取れてないのにこんなこと言うのもアレですが、非常に良い問題だったと思います。奇をてらわずに真面目にチューニングしたら、それだけで10000くらいは出そう。ベンチマークツールも公開されたようなので、もう一度挑戦したい。
事前のチーム内での予想だと「HTTP2とか来るのかなー」「Elasticsearchかなー」みたいな話をしてたけど、終わってから思うと@tagomorisさんの「もはやISUCONは予選で落ちる人の方が多くなった。その人達にとっては予選こそがISUCONなのだ」*1という発言がそのまま問題になっていた気がする。
500系を大量に返すと確実にスコアが伸びないというレギュレーションも、現実からあまりにも乖離した「ISUCONでしかしないこと」を減らす方向に働いて個人的には好きです。
関係者のみなさま、ありがとうございました。
さいごに
大事なことなのでもう一度書いておきます。
めっちゃ悔しい