isucon7予選に参加したメモ #isucon
10月21日(土)にisucon7予選に参加した。
ずいぶんと日が経ってしまったが、メモ程度に残しておく。 会社の先輩方と3人チーム。
結果
ベストスコアは10万点を少し超えたあたりだったが、記録なしで終わってしまった悲しい。
開始前
前日までにはあまりちゃんと準備もせず、過去問をちょっと動かしてみたりプロファイリング用のツールをいくつか使ってみたり、程度。
がっつり過去問解く、ということはしてなかった。 やろうとしていたが本番じゃないとやる気が出ない...。
予選1日目当日は運営側のトラブルで開始が13時過ぎからに。 9時頃にオフィスに集まったものの何となく復習したりインターネットサーフィンしてだらだらすごしてた。 連日徹夜をしていたというスタッフさん大変だっただろうな...。 おつかれさまでした。
何をやったか
というところで始まり、Golangを選択。 特に事前には決めていなかったが、何となくの流れでアプリケーション改修を担当。 ちゃんと施策とスコアを保存しておこうと思ったが、だんだん面倒になってほとんど記録残ってなかった。
基本的にはNginxログからalp使ってボトルネックになってそうなエンドポイントを見付けて直す、という作業。 netdataも動かして何となくリソース使いきれてないね、みたいな話をした記憶がある。 地道にSELECT文を見て必要ならDBにindex貼ったり、不要なSQLを発行しないようにしたり、N+1を何とかしたり。
特に、N+1は何箇所か直したが、SQL書くのを面倒くさがって雑なSQL発行してデータがばって取ってからアプリケーション側で加工するという道を選んでしまった。 ここはSQLで出来るところはちゃんとした方がよかったなと後悔。
ある程度直しても劇的な変更は出ず、いっちょRedis動かしてキャッシュしちゃうぞ〜ってゴリゴリ書き換えたものの何故かうまく動かず時間を無駄にしてしまった。
ボトルネックとしてでかかった画像がDBに入ってる問題はチームメンバーに託したので、スコアが10万超えたのはほぼそのおかげ。
終わってみて
反省としては、事前に作戦立てておけばよかった、に尽きる。
ファイルの共有もGitで管理はしたけどあまり有効に使えなかったし、デプロイとかも手元で雑なスクリプト書いてやってしまったりとチームプレーうまくできなかったなぁと。 自分がアプリケーション直すのに集中しすぎたのもある。。
結果はともあれめちゃ勉強になるし楽しかった #isucon
— こむ (@petitviolet) 2017年10月21日
という感想。 来年は絶対決勝に進むぞ!