今更だがISUCON本戦の感想と反省

もう2週間ぐらい経ってしまったが、tagomoris & tnmtとチームを組んでISUCON本戦に出場してきた感想を書こうと思う。
中々ブログ書いてる暇が無くて、えらく遅くなってしまった。
ちなみに結果は6位。3位以下は割と団子状態で、後一手ぐらい刺さってれば3位は行けただろうなあと、残念な思いがある。
まあ、どっちにしろ1位はちょっと難しかった。


細かい流れはモリスさんのブログに既に書かれているので、そちらに譲る。


今回のお題はdockerがバリバリ活用されていたのと、SSE + Reactによるサーバーサイドレンダリングの組み合わせという非常にモダンな構成だった。
お題の発表後は、流石にうわー……マジかーって感じになった。
そもそも、現時点のRubyのWebフレームワークというものはSSEの様なストリーム配信と余り相性が良くない。
なので、あんまり使わないし、最適化のノウハウも溜まってない。辛い。


dockerに関しては、仕事でバリバリ使ってたので余り問題にならなかった。自分がdocker周りの環境整備を引き受けて、諸々の調整をしてたしログの確認もそんなに問題無く実現できたと思う。仕事で使ってて良かった。
なので、多くのチームがdockerを剥がしにかかってたけど、うちは最後までdockerを使ってた。これは良い点もあったが、もしかしたら悪い点もあったかもしれない。
良い点は、動作確認がめっちゃ楽だったこと。これは予選で動作確認が辛かった反省を活かせたと思う。実装の修正がとても楽だった。そして、プロセスの数の調整とかredisの追加とかも割と簡単にできたこと。これはdockerに慣れてないと手間取る可能性はあったが、上手く対応できて良かった。
悪い点は、もしかしたら有意なレベルでオーバーヘッドがあったかもしれないこと。自分の感覚ではそこまでスコアに影響するレベルじゃなかったとは思っているのだが……。


今回は、redisの投入周りやdocker周りの処理を大体引き受けて、まあまあ役には立てたと思う。
大きな反省点としては、やはりSSEとサーバーサイドレンダリングの知見が足りなかったので、ちょっとした変更で改善できそうな点を見過ごしてしまってたところがある。
後はやる事に手一杯過ぎてベンチマーカーのログをちゃんと確認するのに意識が回らなかった。この辺りISUCON経験の無さが出た気がする。


最も失策だったのは、nodeで書かれたサーバーサイドReactに手を入れなかったこと。かなりCPU食ってたのは分かってたんだが、ここ弄って勝てるならnode選択が有利過ぎるんじゃないのか、と思ってしまって結局手を入れることができなかった。
割と普通のWebアプリケーションとしてチューニングできるところはある程度処理できたはずなので、ここのキャッシュが上手く出来てればベースのスコア水準は割と高い方だったんじゃないだろうか。無念である。
ISUCON本戦は複数台構成になることもあって、やれる事の範囲が滅茶苦茶多くなるので、時間内に上手く最善手を見つけてその手を打ち切れた所が勝つって感じだと思うが、うちのチームはそれがやれなかった。


チームとしては、やはり皆経験豊富だしめっちゃやりやすい感じだった。会社バラバラでチーム組んでる中ではかなり良いチームだったと思う。
しかし、モリスさんが最近ミドルウェアばっか書いてる様に、俺もあんまり普通のWebアプリケーション書いてないというかデータフローの設計とか分析基盤依りの仕事ばっかしてるので、ちょっと勘が失われている所があったかもしれないw
何にせよ、優勝は逃したものの初出場で本戦で勝負になるスコアが残せたのは、優れたチームメイトのおかげであることは間違いない。
負けたのは残念だったけど、とても楽しい1日だった。
モリスさん、tnmtさんと、ISUCON運営メンバーの皆様、ありがとうございました。