ISUCON9予選と本選に出た
eventISUCONはLINEが運営しているIikanjini Speed Up CONtestで、Webサービスをチューニングしベンチマークのスコアを競う。 @hiderberqと@satoshunと出た。初出場。
前
@hiderberqに誘ってもらいチームSsstohが結成された。言語はGoで行くと決めて3回くらい集まって過去問を少しやった。
予選
会社が計画停電だったので話せるネットカフェでやった。 デプロイスクリプトを整えてnginxのアクセスログをalpで見られるようにする準備や MySQLのSlow Queryを出すところまでは良かったが、pprofのエンドポイントを叩くタイミングが悪くて profileが出力できずbcryptがボトルネックであることに最後まで気づけなかった。 最後そろそろ複数マシンで動かすかという段になったが、時間があまり残っていなかったしうまく動かすことができなかった。急いでやって最後のベンチマークがFailするよりはましだったかもしれない。仕様をたいして読まなかったのでキャンペーンの数値が変えられることも忘れていた。仕様を読み込むのは本当に重要。 これはだめだなと思ったらなぜか通過していた。600チーム中20位だ。ありがとう@satoshun。
間
pprofやnginxのLB、あとMySQLのEXPLAINを練習した。あとAPMを用意していった。
K8s上でElastic APMを動かして外部のGo製APIサーバーのリクエストをトレースする - sambaiz-net
本選
本選はLINE本社、新宿のミライナタワーで行われる。ミライナタワー改札というのがあってアクセスが良い。 会場のカフェスペースもソファー席や座敷もあったりして良いスペースだった。
受付でかっこいいTシャツとイカしたステッカーを獲得。
ベンチマークが最初からFailするようになってて大変だった。 急いで開発したという設定で、コードや設定に不要なものが多く含まれていて翻弄された。 ロジックが複雑でこれを何とかしないと始まらないのではと思ったが、インデックスによってFailしなくなったのでそんなことはなかった。
昼には弁当が来た。美味しい。
午後はサーバーを1台再起不能にした。あとはN+1をやって終了。表彰と講評。ブラウザチェックNGで参考記録になったが、スコアは3611で17位相当だった。 1位の白金動物園は35801、2位のnilは29704(しかも一人で)とスコアを見ると全くかなわないという感じ。 ただN+1やインデックスなど基本的なところは押さえていたようだったので、まずはそのステージを超えなくてはいけなかった。 また一通りインメモリにデータを持ったら負荷のパラメータである日数を伸ばしたときにOOMになった。 今回はメモリが少なかったのでSQLの修正でスコアを上げられるようになっていたそうだ。
全てが終わり懇親会が始まった。
感想
普段クラウドのマネージドなサービスや金で解決することに慣れているとこんなに何もできないものかと愕然した。チームの二人には申し訳なさがある。 テーブルの変更などこれやるの億劫だなというところも上位チームは普通にやっていたりして要所の見極めや実装力が足りなかったり、 なんでこれができなかったんだというポイントが多々あるので練度が低く、本番の焦燥感に打ち負けた。 その点では本選まで来れたことは今後の資産になるだろうし、とても楽しかったので実質優勝だ。嬉しい。 運営にも感謝だ。