ISUCON8予選に参加して敗退した
はじめに
昨年と同じメンバー(@noda_sin, @T28_tatsuya)でチーム名は予算/Zeroとして参加し,敗退した.去年は予算ZEROだったがFate/Zero的なチーム名に変更し,ロゴも作ってもらったのだが聖杯には全く届かず…
前準備
8月中旬に打ち合わせという名の飲み会を横浜の居酒屋で開催したが,昨年の振り返りつつ序盤の作業の流れをおさらい.その後は最近の職場事情や転職の話題へと早々に移ってしまった.居酒屋のテーブルでは3人それぞれがラップトップを開いて何かするようなスペースもなかったので…
GitHubのプライベートリポジトリをいくつか用意し,ISUCON7本戦の環境をAWS上に用意してもらったり,それを手元のラップトップで動かしたり,goのプロファイラについて調べておいた.
当日
9:40頃にmixiの予選会場に到着.朝食を取りつつ話をしていたら10時をまわっていたので,まずはポータルサイトにログインしてサーバ構成やレギュレーションを確認.今年の予選も3台構成だが,ベンチマーク対象は1台を選んで負荷走行をする形式だった.とりあえずssh公開鍵でログインできるようにし,参照実装の切り替え,スタートアップへの登録などをこなす.DBの中をみていた@noda_sinによるとボトルネックらしい部分はないとのこと.
今年はOSがCentOS7系で3台構成のうちの1台目にMariaDBとh2oがセットアップされており例年とは違うことにやや戸惑いつつも,次のような戦略を立てて作業を続行.
- h2oはnginxに入れ替えて3台のバックエンドプールに
- セッションの共有はオンメモリからredisへ
- できたらDBも3台で動かして負荷分散
- 実装のボトルネック改善
自分はnginxやredisなどインフラ周りのインストールとセットアップを担当.redisの動作確認まではすんなりと終えたが,久しぶりのnginxのセットアップに手間取ってしまった.その後golang実装でのセッション管理をredisに載せるのに https://github.com/boj/redistore を使ってみることにしたが,これが最後まで上手くいかず,N+1問題に取り組んでもらっていたのも上手くいかずに無念のタイムアップ.チーム予算/ZeroのISUCON8は終わってしまいました…
おわりに
今年は参加申請の頃からgolangでいくことを決めていたので各自で勉強は進めておいたが,やはり経験が少なかった.node.jsでならredisを組み込むことをやるなどなんどもやっていたので,途中でnode.jsに変えるなどしてもよかったのかもしれない.またMySQLでのプロファイリングやチューニングの経験をもつメンバーに合わせて,MySQLに入れ替えてみてはなど提案できたかもと悔やまれる点は多い.
最後にISUCON運営の皆さん,参加した皆さんお疲れ様でした.今年は残念な結果になったが来年もあれば是非とも参加したい.