ISUCON8。 今年は予選日程の両日に奈良で開催のHackathonイベントのお手伝いをする用事が入ってしまい、参加不可能だな〜という雰囲気だったのだけど、 イベントの初日は午後からで最初はチームビルディングとかの時間で出番無いはずだし多少は動けるかも…?ということで 一緒にHackathonサポートで奈良に来ている @kazuki-maさん と そういう事情で片手間参加のチームでも大丈夫と言ってくださった @overlastさん と3人で挑戦した。こちら2人は奈良、1人は東京。
事前に会って話す機会もなく Slackで軽く打ち合わせる程度。共通で得意な言語もなく (Go,Python,TypeScriptのひと / Java,Go,Perlのひと / Python,Perlのひと) とりあえず皆さわったことあるのはPerlか… という感じでPerlに。 前日夜に慌てて自分のPCにperl-5.28をinstallして、その他の準備は一切なしで当日に挑んだ。
当日
午前中は奈良組と東京でLINE通話を繋いで喋りながら作業。 慣れないながらサーバ入って各自環境を整えつつ Webアプリの挙動を見て方針を相談したり。 まずはこのへんから改善していこうか、と進めはじめたのが12:00頃。
まずは /
のトップページとか無駄にすごい数のクエリを発行しているところを remains
だけ出すのなら各rankのreservationを COUNT
で数えればいいだけやろ、ってことで減らすのをやった。
Perlでハッシュリテラルってどうやって書くんだっけ!? { hoge => 'fuga' }
か なるほど思い出した! ってなったのが12:20頃。やばい。
13:00になってHackathonイベント始まるので移動。LINE通話は切ってあとはSlackのみでやりとり。 ちょいちょい中断は挟みつつも作業を続ける。
変更してはbenchmarkがfailしハマり 戻したり原因さぐりながら少しずつ修正。
1台nginx+db, 残り2台でapp動かして流すという構成にしよう、と overlastさんにやっていだたいて それらがようやく動いたのが15:00過ぎ。score 3,000ちょいで 28位
events tableで各rankのremainsを管理するようcolumnで持って、ていう変更をkazuki-maさんが終えて 16時くらい?
/
, /api/users/***/
がようやく少しまともになって、今度は /api/event/***
あたりがbottleneckになってきているのは見えてきたが、もう既に17時付近、ぜんぜん時間が足りてない。
ここも全sheetsなめずに値を返すようにどうにか変えたい…!と思ったけどなかなか上手く動かず 終了直前にどうにか動いたっぽくて 17:57 無理矢理pushしてbench通ったけど別にスコアは上がらず そのまま4,000弱くらいでフィニッシュ。
感想
サーバ上の作業にしろコード変更にしろ、とにかく作業が遅くて時間が足りなかった、かなぁ
いちいち小さなことで躓いて時間をロスしたり手戻りすることが多かったりしていて、「リモートだったから」「別のイベントもあって片手間だったから」というのを差し引いても、あと3倍は早くコード書き換えていける力が無いとダメだったように思う。
せめて基本的で明らかなbottleneckは潰して 劇的改善のために動いていく、くらいまで辿り着きたかったけど そこにすら届かなかった〜、という感じ。
来年はどうなるか分からないけど、せめてもうちょっと善戦できるよう頑張りたい