すてにゃん氏の技術ぶろぐ

技術っぽいこと書きます

ISUCON 7予選に参加しました

ISUCONっていうコンテストの予選に参加して、先ほど家に帰ってきたところです。
isucon.net

今回は id:a-know さんと id:Soudai さんとチームを組んで挑みました。点数としては2万ちょいとかで、うーむ、という感じでしたが色々とよかったです。 id:a-know さんがあらかじめGitHubリポジトリやMackerelのオーガニゼーションやら用意して招待してくれていて、 id:Soudai さんはクエリを色々みながら遅いやつをどんどん指摘してくれて頼もしかったです (なんか結局自分はMackerelあまりみれてなかったですが…)。SlackやGitHubで会話しつつ、ここ直せるのではってなったところを僕が修正してサーバに反映、という流れが多かったです。ちなみに言語としてはgolangを使ってました(各々コードを読む際は自分の得意なやつで読んで、最終的に反映するやつがgolangで僕が書いてた、という感じでした。)

僕がメインでgolang書くのは別に悪くなかったですが、終わってから思うと二人くらいでガガガッと書きまくって反映しまくったほうがよかったかなってなりました。丁寧にGitHubでブランチ切ってPull Requestにしてみてもらっていたけど、そこまでする必要もなかったかもですね。

あと、最初にサーバ上でアプリをビルドして反映しようとしたらそもそもmakeが通らなくて、goがないって言われて、そうかじゃあapt-getで入れるかってなってやったらdependencyがどうのって言われて、それでdepというのを使ってるけどそれがGo 1.8以降しか対応してなくてapt-getで普通に入れたら1.6が最新と言われ、add-apt-repositoryというのをすればいけると思ったらそれもないからそれも入れる必要あるやん、あ、このままではgoは1.6のほう向いてるからシンボリックリンク張り替えれば良い??とか全然スピードアップとは関係ない箇所で無駄に時間食ってしまっていてなんか申し訳なかった。(あとになって、そもそもビルドはローカルでしてバイナリだけサーバにあげればよかったじゃんと気づきました…)

イコン画像が重いということで、mysqlで画像データそのまま保存してるのをやめて、とりあえずローカルに書いてしまう方式にしたらある程度点数あがってよかった。この際、一度画像のバイナリが一致しないというエラーに遭遇して、なんか確かにちょっとだけ違うぞとなってodコマンドというやつをはじめて使って最後にミスって改行コード入れてしまっていたことに気づけて助かった。

nginxでもなんかできるやろということでとりあえず静的ファイルをrewriteで返すようにしたらちょっとだけ早くなった、けどそれほどでもなかった。なんかググってCache-Controlヘッダ関係あるかなってなったけど別に違うのではってなって結局やらなかったけど、インターネットの反応見る限りやるべきだったっぽい。nginxの知識がなくて残念だったのでなんか機会あればもうちょっとちゃんと調べようって気持ちになった。

なんか色々書いたけど、ISUCON運営の方々お疲れ様でした。 id:a-know さん、 id:Soudai さんと一緒にやれたのもよかったですし、またなにかあればよろしくお願いします。