君は牛を二頭持っている

渋谷あたりのエンジニアのブログ。OSからウェッブなフロントエンドまでとか色々。

ISUCON 2014予選に参加して恥を晒してきました

大分遅れましたがISUCON4に参加してボコボコにされてきました。
ISUCONってなんなの?って人はこの記事読むと良いです。
ISUCON4 オンライン予選の参加登録を開始しました : ISUCON公式Blog

すごく大雑把に言うと「Webサービスをいい感じにパフォーマンスチューニングしてスピードアップさせちゃう」*1大会です。

3人でLINE本社に行ってオンサイト予選行ってきました。ちなみに日曜日の方です。
LINE株式会社様、会場をお貸しいただきありがとうございました。

流れ

レギュレーション : ISUCON公式Blog

基本的には公式サイト見ればわかるので特徴的なところを

  • 開始したら参加者はAmazon EC2で競技に使うイメージ(AMI)を使ってインスタンスを立ち上げることができる
    • m3.xlarge(練習で付けて一日消し忘れてたら15$ぐらい持って行かれた。)
    • 提出するインスタンス以外には特に縛りはない
  • CentOSベースのLAMP環境が入っており、色々な言語で実装されたアプリケーションの中から一つを選んでパフォーマンスチューニングする
  • リクエストをたくさん捌ければ捌けるほどスコアが上がる
    • デフォルトだと2000点ぐらいのものが、DB(MySQL)のテーブルのインデックスをしっかり張ったり、ベンチマークのリクエスト数をアプリケーションの許す限り限界まで上げてみたりする
    • Memcached入れたりNginxの設定書いたり
    • DOM要素弄ったりするとベンチマークに通らなかったりする
  • ベンチマークを走らせて良いスコアが出たら、そのスコアを提出することができる
    • 何回でも提出することができるが、最後に提出したスコアが採用される
  • そんなこんなで終了したら、時間中に最後に提出したスコアを出したインスタンスを提出する

事前にやったこと


高度な情報戦の図

  • 過去の資料とかGotanda.pm(http://gotanda-pm.github.io/about.html)とかの発表資料を見つつ、チームメンバーで集まったり、各自で戦略練ったりしてた。
  • 最初は頑張ってローカル環境でVM使って練習環境立てようとしてたけど、Rubyのバージョンとかで引っかかって結構時間かかってしかも全員統一感ない感じの環境が出来上がってしまいそうだったので諦めてEC2に
  • 環境構築周りはある程度シェルスクリプトにしたものの、全然足りてなかった
  • 個人的感想だとホストは「提出用(絶対に壊さない)」+個人に1台ずつぐらいはあると嬉しい。
    • 特に今回はAmazon Web Services様のご厚意により利用可能クーポン(たしか25$分ぐらい?)をご提供いただけることとなったとのことなので豪快に使えた。ありがとうございます。
    • 逆に検証用とか言ってポンポン立てていくとだんだん把握できなくなるので面倒
  • 役割分担としてはかなりざっくりと分けるとこんな感じが良いかと思う。
    • インフラ担当:環境構築全般、ミドルウェアの導入、設定
    • アプリケーション:発行するSQLの最適化、テーブル定義の見直しなど。3人チームの場合、こちらが2人

当日

つらかった。

反省


調子にのったツイートしてすみませんでした

  • 素振りをもっと真剣に回数を重ねるべき
  • メンバー間で1週間ぐらい前にディレクトリ構成とかの標準を決めておくべきだった。直前に決めると絶対ミスる
  • 当日でも、「みんなこれは分かってるだろう」みたいなことでも意外と誰か一人しか分かってないこととかあるので、小刻みに確認していくのが大事
  • 他人の話に耳を傾けましょう
  • なんにせよこういう機会は一年に何回もあるわけではないのでもっと大事に活用するべきだった。

その他

Rubyで、PerlのNYTProfみたいなメソッド呼出単位で出力してくれるプロファイラあったら教えて下さいお願いします

*1:個人の見解であり、所属する組織の公式見解ではありません