CubicLouve

Spring_MTの技術ブログ

isucon 2014予選に参加しました

大分遅れたエントリになってしまいました。。。

今年もisuconに参加してきました!

ISUCON4 予選

チームメンバーは去年と同じ、@sonots, @niku4iで参加しました。 チーム名はGoMiamiです。

結果は、去年に引き続き予選突破できました!!

ISUCON4 本戦出場者決定のお知らせと本選出場者の利用言語比率

チームメンバーのブログはこちら

ISUCON 2014 予選の記録 GoMiami

#isucon ISUCON4に参加した (GoMiami) - sonots:blog

思い出しながらつらつらと

言語

rubyは業務上よく触っているのでrubyが最有力候補でしたが、最近のgolangの浸透ぶりをみてどこかでやらねばと思っていたときにisuconがあったので、golangででようってなった時は、一も二も無く賛成でした!

goland、@sonotsのブログにもあった通り、下記メリットがあると思っていました。

  • 一プロセスでCPUを使いきれる
  • 去年の予選のように、一台のサーバーで動かすアプリであれば、オンメモリ戦略がとれるならメモリの共有が楽

なので、予選はgolangでとなりました。

予選

予選当日までに、@sonotsがgoでメトリクスを取るライブラリを予め準備していて、それを使って去年のisuconの問題を復習してgolangの勉強 + ウォームアップしてました。

当日

最初お題を見た時、トランザクションが厳しい銀行システムなのかと思ったのですが結構普通のアプリで安心しました。

午前中は、マシンセットアップ、アプリの把握と戦略立案を行ってました。

マシンは、一台本番機を置いてそれを提出用にし、個人で一台AWSインスタンスを用意してアプリを動かす環境を作って置きました。

自分の開発の流れとしては、

  • ブランチ切って、ローカルマシン(MBA) + LiteIDEで開発してコンパイルまで通す。
  • 自分のインスタンスでpullしてベンチ走らせる。
  • 自分の環境でベンチ走ったら、mergeして本番で動かす

を繰り返してました。(若干逸脱した行為もしましたが。。。。)

golangにあまり慣れていないこともあり、IDEの力を借りてコードを書いていました。

プリの把握に関しては、@sonotsのブログにも書いてあったとおり、rubyの実装を見ていました。。。

最初はgolang読んでいたんですが、ちょっと全体が把握しきれず。

ruby見たら「これならすぐ理解できる!」と思ってしまいついやってしまった。。。。

今は反省してますwwww

ここから、golangのもともとの実装を見ながら、コード書いていきました。

  • 自分のコミット

https://github.com/sonots/isucon4-qual/commits/master?author=SpringMT

初期実装をやったんですが、ひどいミスをしたりして大分足を引っ張ってしまった。。。。

一番ひどかったのこれ。。。

https://github.com/sonots/isucon4-qual/commit/5315efe12b578b6c49cf7a0a0793d8c2118f5935#diff-a823316bc51eec2583dc3088df5ba316R151

@sonotsに直してもらった。。。。

https://github.com/sonots/isucon4-qual/commit/76a879a2b4b8baeabb4c2e0b0f003d79f9c097c9

大分足を引っ張ってしまって申し訳なかったです >_<

コードをもろもろ書いていたら、16:00位まで来てしまって、その後はほとんど空気でした。。。

varnishとかも試していましたが、単にvarnish入れただけれはスコア上がるはずもなく、

後半はあまり貢献できずタイムアップ

まとめ

型があるとtypoとか凡ミス減らせるので型さいこー(浅はか)

今回は、アプリ側から、インフラ側にボトルネックがよったときのほとんど何もチューニング案が思い浮かばなかったので、もうちょっとそこら辺は勉強しておく必要があるなあと反省しています。

無事本戦には参加できるので、そこまでに、ミドルウェア 〜 kernel周りの勉強しておこうかと思っている次第です。

最期になりましたが、運営チームの皆様本当にお疲れ様でした!!