ISUCON6 に参加して無事洗礼をうけてきた

id:hitode909 くんと id:hatz48 さんの三人のチーム「C0-100%」としてISUCON6に参加した。初参加者のみのチームで言語はPerl。普段会社では良い設計考えたり開発フローいい感じにしていこうみたいなのが得意なメンバーで、今回もテスト書いたりCIまわしたりするいつも通りの開発でやっていくぞというテーマで参加した。

結果としては、最高38000点くらいまでいったものの予選敗退。最終スコア計算の時点ではほとんどFAILしてる感じで、300点くらいだった。トホホ。

我がチームの様子はhitodeくんのエントリが詳しい。

blog.sushi.money

担当

自分はサーバオペレーションを担当した。わりとすぐやることがなくなってきたので、アプリケーションコードを書いていた。

チームメンバーはみなアプリケーションエンジニアで、普段からインフラ的な仕事をしている人がチームにいなかった。誰かが特別得意ということもないので、とりあえず担当決めて事前に準備してやるという感じだった。

幸い今回の問題はそんなにサーバオペレーションが効くという雰囲気でもなかったので、過去のISUCONの回答例などを参考にミドルウェア類を整備するという感じでなんとかなった。kazeburoさんの設定をどんどん入れていくという感じ (
ISUCON4 予選でアプリケーションを変更せずに予選通過ラインを突破するの術 - Hateburo: kazeburo hatenablog )

順調な前半

前半は事前の準備の効果があってめちゃくちゃスムーズにすすめることができた。はじめにやることのチェックリストを作ってあったので、あわてず丁寧にすすめることができた。

https://cdn-ak.f.st-hatena.com/images/fotolife/h/hakobe932/20160919/20160919124529.png

↑こういう感じ

  • 初期実装を起動してから最低限のnginxいれて、一度だけベンチをまわしてリクエストの傾向みる
  • CI、プロファイラを用意する
  • アプリケーションコードを呼んで怪しそうなところにあたりをつけておく

みたいなところを分担して一気にすすめて、一時間くらい。さらに一時間くらいデプロイできるようにしたり、コードを読み込むとかをしたところで、具体的な改善に入れそうだなとなった。

お昼頃にはリーダーボードにでてくるくらいのスコアになったので、ハイタッチして昼食休憩にはいったりした。

キャッシュの海に沈んだ後半

昼食をたべながら作戦会議をして、やはりhtmlifyを良くしていくのが良さそうだということで改善をはじめた。リクエストの傾向をみると表示に比べて更新の頻度が比較的低かったので、キャッシュが効くやろとかいって取り組みはじめた。このとき

  • htmlify された結果をキャッシュする
  • 正規表現の構築にRegexp::Assembleをつかう
  • 正規表現をキャッシュする

などを同時進行ですすめてたんだけども、これがあまり良くなかった。これらの変更を全部いれてベンチにかけたところめちゃくちゃFAILしまくる感じになってしまった。FAILの原因を丁寧につぶしていくという作戦にでたけど、2時間くらいはまってしまってだいぶ時間を無駄にしてしまった。

時間的な余裕もなくなったことで、新しいことをはじめる決断もできなくなってしまった。半分自棄になって、競技終了30分前にkeywordの文字数をカラムにいれてsortに使うようにする変更をいれたところ一気に15000点くらい点数があがって元気がでてきたものの、時すでに遅しであった。

反省

一つ一つの施策は方針が決まればすばやく実装できたのだけど、キャッシュまわりでうまくいかなくなり、打つ手がなくなったときにチームの活動がほぼ停止してしまい、うまくパフォーマンスをだせなくなってしまった。

全員が同じ方向を向いているパワーがでるけど、その方向をミスってしまったという感じがする。時間をきめてあきらめるとか、全員キャッシュに向かずに別のことをしてる人をつくるとかすると、もう少し安定感がでたかもしれない。

感想

せめて自分たちの考えたアイディアを全部うまく実施したかったけど、実現パワーが足りなくて、道半ばという感じで終わってしまいかなりくやしい。のらりくらりとコードを書いていてはいけない。来年あったら一矢報いたい。

初参加ということで、はじめてISUCONを体験したけども、これは運営大変だなと感じた。みんな真剣にやってるのでミスするとやばい感がすごい。運営のみなさま、本当にありがとうございました。

以下は会社の反省会の後での感想です。