ISUCON7 予選参加した

ISUCON出てみたいオーラを出したら @iw_tatsu さんと @ompugao さんが集まってくれた。

Slackのチャンネルを用意してもらい連絡事項の共有とか何準備したらいいかわからんねーとか言ってた。 前日に軽く会場の準備をした。 当日はみんな9:30に集まった。すごい。

競技がスタートして最初の一時間はサーバの設定をしてもらっててその間アプリのコードを読んでた。言語はGolangにした。 方針としてはMySQLのスロークエリをpt-query-digestで出してもらって上から順に解決していくことにした。

一番上は/icons/*で画像を取得しているクエリだったので静的ファイルにして返すことにした。はじめのうちはGolangで画像の書き込みと読み込みを行っていたが、 紆余曲折ありnginxでキャッシュして返すようにするために2人が頑張ってくれた。設定でハマってて大変そうだった。

その間はcount(*)してる部分をなんやかんやしたりしてた。なんやかんやが長く、結局あきらめた。最後にN+1問題に手を入れ始めたけど時間が足りなかった。キャッシュで改善しようとして外部ライブラリを導入したけどgolang/depの設定で詰まってしまいサーバ上での動作までには至らなかった…悲しい…

最後の最後でicon問題が解決し、pt-query-digestの出力も更新され、俺たちの戦いはこれからだ!完ッ!状態で終わった。

全体的にわかりみのある問題設定でこういう場合どうやるの?が実践できて大変おもしろかった。運営のみなさんありがとうございました。

なりなりにもおんぷさんにもめっちゃお世話になりました。また来年もできたらいいな。

f:id:grapswiz:20171022114144j:plain

以下今後の改善点

  • 手持ちで使えるキャッシュサーバを持っておくこと
  • 問題をできるだけ多く認識すること
  • サーバの初期設定自動化

手持ちで使えるキャッシュサーバを持っておくこと

普段GAE/SEに頼りっきり(DatastoreほしいMemcacheほしい)なのでここでバリューが出せなかったのが辛い。memcachedなりredisなり立てる決断ができる時間の余裕か知識を確保しておく。

問題をできるだけ多く認識すること

今回pt-query-digestの結果を上から潰していく方針を取ったが、上の問題に時間をかけてしまい、下の方にあるアプリでできる改善を見逃してしまっていたのが辛い。方針そのものは悪くないけど先に他の問題も認識しておけばよかった。人間どんどん頭が疲れてくるので早い時間のうちに。

サーバの初期設定自動化

自動化しておいたほうがいいということは事前に目にしていたけどサーバ立てて設定を試していく時間が取れてなかった。今回何を設定しておくと便利なのかわかったので次までに用意しておく。