第三回ISUCONの予選に出たけどダメだった
つい数日前に、あおみかんさん(@AknEp)としんのすけさん(@cnosuke)と一緒に、第三回ISUCONの予選に出場しました。
チーム名は、休学って楽しいよね! (まてぃー「僕はちがいます!」)でした。
(自分は休学したことないです)
あおみかんさんとしんのすけさんもwrite-upを書いているので、そっちも読むとより雰囲気が分かるんじゃないかなぁと思います。
予選は2日目で参加したため、競技終了後すぐに暫定版の結果が出たのですが、その時はギリギリ学生枠3位で本戦出場予定!でした。
∩(´・ヮ・`)∩やったー
ですが、提出したAMIで思った通りの記録が出ず、確定版の結果では本戦出場ができないとわかりました。
∩(´;ヮ;`)∩うわーん
参加するまでは、「どんな言語の実装で来るんだろう」と不安だったのですが、Ruby, Python, Go, Node.js, PHPの実装が用意してあったので助かりました。
RubyはSinatra、PythonはFlask、Node.jsはExpress.js(他の2つは見てないです)がベースで実装されていたのですが、チームのみんなが使えるRuby実装で取り組みました。
ちなみに競技で使ったAMIは、最新のAmazonLinuxで、nginxなど便利そうなパッケージが入ってる感じのやつでした。
チーム名は、休学って楽しいよね! (まてぃー「僕はちがいます!」)でした。
(自分は休学したことないです)
あおみかんさんとしんのすけさんもwrite-upを書いているので、そっちも読むとより雰囲気が分かるんじゃないかなぁと思います。
予選は2日目で参加したため、競技終了後すぐに暫定版の結果が出たのですが、その時はギリギリ学生枠3位で本戦出場予定!でした。
∩(´・ヮ・`)∩やったー
ですが、提出したAMIで思った通りの記録が出ず、確定版の結果では本戦出場ができないとわかりました。
∩(´;ヮ;`)∩うわーん
どんな競技だったのか
#isucon 2013年予選問題の解説など に出題者の方からの解説がありますが、今回のお題はgistのようなWebサービスのパフォーマンス改善でした。参加するまでは、「どんな言語の実装で来るんだろう」と不安だったのですが、Ruby, Python, Go, Node.js, PHPの実装が用意してあったので助かりました。
RubyはSinatra、PythonはFlask、Node.jsはExpress.js(他の2つは見てないです)がベースで実装されていたのですが、チームのみんなが使えるRuby実装で取り組みました。
ちなみに競技で使ったAMIは、最新のAmazonLinuxで、nginxなど便利そうなパッケージが入ってる感じのやつでした。
何をしたのか
競技時間中はかなり必死だったので、細部まできちんと覚えていないのですが自分が試したことを書いてみます。
- アプリケーションサーバをpumaに置き換えようとしました
- が、オプションをうまく調節できずMySQLがToo many connectionsエラーを吐きまくったので諦めました('A`)
- nginxを設置しました
- フツーにunix domain socket経由でつなぎました
- memcachedからRedisに置き換えました
- memcachedの罠に関しては全く気づけなかったのですが、Redisのほうが早いと思ったので、置き換えました
- 残り時間がなかったので、普段自分がさくらのVPSで使っている秘伝のredis.conf(特に凄いわけではない)を使いました
- 使わないサービスを切りました
- 最終的に提出したバージョンではmemcachedを使っていなかったので、パフォーマンスが上がればいいなぁくらいの思いで、chkconfigでいらなそうなサービスをぽちぽち切りました
(書き出してみると全然できてない;´Д`)