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

koichi222のブログ

Engineer. Love technology & music.

isucon2に参加してきました!

チームルンバとして@kazph @kitanpとisuconに参加してきました!

 

■準備

  •  まずは前回のisucon関連の記事を読みあさる
  • 最初はrubyで行こうかーとなっていたけど、前回のみたらかなり初期性能に差があったのでperlに決定
  • memcachedはどこでつかうんだろうねー
  • リバプロにnginxを立てて、nginxからmemcachedにアクセスして返すのが良さげ(前回のfujiwaraさんの構成を見て)
  •  更新があったタイミングでアプリからmemcachedにセットしよう

 

■当日

  • 初ヒカリエにテンション上がる
  •  NHNさんの受付でムーンと写真を撮る
  •  写真をひと通り撮り終えて席につく
  •  課題発表。今回の課題はチケット販売システム。
  •  スタート!
  •  パスワードのIをl と勘違いしてログインできない(しかも全員w)
  •  @kitanpさんに鍵登録、リバプロのnginxとmemcachedをインストールしてもらう
  •  @kazuphはソースをgit管理下に、その間に自分はアプリとスキーマを確認
  •  @kitanapさんリバプロを nginx に変更、しかし変えたらベンチの結果が大幅に落ちる
  •  keep alivedをいじってみるも改善せず
  •  @kazuph my.cnfをいじるがnginxのボトルネックが特定できないので切り戻す
  •  @kazuphがサイドバーのクエリをmemcachedでキャッシュするように変更
  •  その間に固定値を返すクエリ結果(アーティスト名など)をアプリ内にハッシュで定義して返すように変更(ここでセミコロンを忘れて@kazuphにディスられるw ruby脳ェ・・・)
  •  Devel::KYTProfを仕込んで@kazuphと一緒に遅いクエリを探す 
  •  ベンチを回しながら塩さば弁当をかっこむ
  •  nginxの問題が解決せず、一旦全員で見なおしてみることに。しかし引き続き解決せず
  • nginx諦めてapacheに戻す
  • ベンチのスコアがもとに戻る(800ticektぐらい)
  • @kitanapさんapacheでキャッシュをする方法を探す
  • @kitanapさんのひらめきにより一部のテーブル(order_request)のみMyISAMに変更。
  • ここで初めて1000ticketを突破!!fujiwara組が4000ticket超えているのを横目に小さな喜びを噛み締める
  • @kitanap さんに再起動時の処理を設定してもらう
  • @kazuph memcachedのシリアライザをData::MessagePackに変更
  •  (参考:http://blog.nekokak.org/show?guid=WHTV83VE4BGhtj8nMSAp_g
  •  @kazuph サイドバーのキャッシュ時間を1秒から増やすがfailedになったので戻す
  •  @koichi222  クエリ内のORDER BY RAND() の消去
  •  @kitanap @kazuph my.confのチューニング
  •  @koichi222 xslateのcache を2に変更
  •  ここでベンチの結果がベストに!(1188 tickets score:413727) この時点で真ん中ぐらいか
  •  全員で再起動時の設定を確認 
  •  ただただ祈る

 

■ 結果

  • 277 tickets score:1774419
  •  ( ゚д゚)
  •  ということで、最後の計測のベンチでスコアが急降下しましたorz
  • 原因の特定はできていないのですが、再起動でキャッシュが消えことと(再起動対策してなかった・・・)最後のベンチは並列接続が多かったようなので、そこで対応できなかったのかなと・・・ 

 

■振り返り

良かった点

  • 当日のチームのコミュニケーションは比較的よくとれていた
  •  @kitanpさんにjoinしてもらったこと。@kitanpさんががOS,ミドルウェア、自分と@kazuphがアプリメインという役割分担ができたいたのはよかった
  • ハマっているときに@kazuphとペアプロをしたこと。冷静になれてミスがすぐ見つかった
  • 当日超楽しめたこと

 

反省点

  •  戦略がなく場当たり的な対応を取ることが多かった

 〇〇の指標を改善するために、◯◯の変更を加えて、結果〇〇ぐらい改善した。

 というのを積み重ねていくべきだったのですが、計測をきっちりできていなかったため

 ボトルネックの特定ができていないまま思いつく対応をしていく、という進め方に

 なってしまいました。結果仮説がないor正確でない変更を重ねてしまい、どの変更がどれだけの効果があったかも正確に把握できていませんでした。細かい反省はいろいろあるのですが、一番はこれかなと。。

 

他にも自分の開発力の不足、知識の深堀りの甘さなど多くの課題をつきつけられるイベントでしたが、isuconの準備期間、当日は本当に楽しめましたし、参加したよかったと思えるイベントでした!!

 

運営の皆様、すばらしいイベントをありがとうございました!

来年はリベンジしたい!

 

他の参加者のブログはこちら

http://blog.livedoor.jp/techblog/archives/cat_60289063.html