読者です 読者をやめる 読者になる 読者になる

isuconで惨敗しました

isucon

isuconでチームフリー素材として参加しました。54,868点で8位でした

今回は、開発環境の構築で色々とてこずりました。

DBがpostgresqlだったので、手元で構築しようとしていたときに、brew updateしてしまい、postgresqlのdatabaseのバージョンが一致しないので起動できないという状態になってしまいました。それで色々やっていると、手元のdatabaseを壊してしまってちょっと復旧は諦め、3台のうち1台を開発サーバーにしました。

deployできるようにしようとしていたのですが、手元からsshはとおるのですが、サーバー間でsshがつながらない状態だったので、iptablesなどを疑ったのですが、わからず、仕方なく、手元へbinaryをscpして、remoteへscpしなおすshell scriptを書いてなんとかしました。 sshがつながらなかったのは、懇親会で聞いたところ、hosts.denyの設定がされていたから、だったらしいです。

ようやく色々できるようになったのが、13:30ごろでだいぶ出遅れてしまいました。

serviceを取得する処理がN+1クエリだったので、INを使うように書き換えました。(追加がないのはその時点でわかっていたので、他のチームのようにハードコーディングするべきだった)

あとは他の人へ指示を出しつつ、curlでどのAPIがどのぐらいキャッシュできそうか、などを確認していました。

tenkiは最後まで悩んでいたのですが、curlを連打していると同じ結果が返ってくるので数秒ならいけそうと試してみたらtestが通ったので、徐々にあげてみて、2秒で落ちつきました。

グローバルIPしか持っていなかったので、どうやって複数台で分散させようか悩んだのですが、前回のようにログイン後のRedirect時に別のIPへRedirectさせたらどうか、ということでやってみましたが、test部分でfailしていたので、諦めてnginxでグローバルIPを直でproxyするのを試したりしました。

ただ、DB部分をグローバルIPでアクセスさせるという発想はなかったので、結局諦めて1台でがんばることにしました。

色々知識不足などで効率的に動けなかったので、復習して次回に備えようと思います。