ISUCON13に初参加した感想
はじめに
ISUCON13に初参加してきました!
思った以上にいい経験だったので、ブログに書こうと思います。
先に結果だけ書くと、最終スコアが10,539点
で、順位は238位/661チーム
でした!
参加のきっかけ
元々、ISUCON自体は昔から知っていて、いつか参加したいなあと思っていました。
どうせやるならチームでやりたいなあと思っていたので、会社の同期に声をかけてみました。
すると、同期2人が「やろう!」と言ってくれたので、参加することにしました。
本番までの練習
さて、参加が決まったので、10月から毎週の土日に3人で集まって練習しました。(海の見える宿で合宿などもしました)
集まったものの、全員が初参加だったので、とりあえず過去問を環境構築しました。
ここで、ISUCONの問題のクオリティに衝撃を受けました。(笑)
こんなにもきちんとしたWebアプリのチューニングなのかと。フロントエンドも作り込まれていて、運営さんすごいなぁと思いました。
さて、いざ環境構築したものの、なにをすればよいかわからなかったので、ブログをたくさん読みました。
すると、「推測するな、計測せよ」という言葉が多く出てきたので、まず計測の基盤を整えることを行いました。
事前に、alpやslowqueryの計測結果をログに残していく仕組みを作りました。
本番では、こちらの計測基盤を使用していくことにしました。
ちなみに、NewRelicなどのリッチな計測ツールを導入することも考えたのですが、導入で沼りそうという判断で、今回はなしにしました。
計測基盤が導入できたので、INDEXを貼ったりN+1を解消したりしました。
インフラ構成を変更する練習は時間的にできませんでしたので、今回はINDEXとN+1を着実にやっていくという戦略になりました。
本番の時系列
9:00 ~
9時に借りていた会議室に集合し、準備をしました。
Githubリポジトリを用意していないなど直前に色々焦ってしまいました。
9:30 ~
問題解説がスタートしました。
Youtubeライブの不調により、数分遅れており、「今回の問題はライブ配信のチューニングか!?」というコメントがあり、笑っていましたが、まさか本当だったので衝撃を受けました。
運営さんの素晴らしい伏線回収に感動しました。
10:00 ~
いよいよ、大会スタートです。
まずは、以下の役割に分けて作業を行いました。
- SSH鍵の登録やコードのgit管理
- 計測基盤の導入
- アプリの理解
これらは練習通りに行くことができましたが、1時間半ほどかかってしまいました。
アプリの理解は私が担当しました。今回DNSがキーとなっているようでしたが、結局なにも手は打てませんでした。。
ただ、DNSのAレコードをDBで管理する設計があるんだな〜ということを知れました。
12:00 ~
計測の基盤が整ったので、ベンチを回します。初期ベンチが成功したときは、非常にうれしかったですね。
初期スコアは3,761点
でした。
午前はここまでにして、お昼にしました。
13:00 ~
さて、午後からはチューニングをしていきました。
まずは、slowquery logを見て、INDEXを一つずつ貼っていきました。
今回は、①EXPLAINでINDEXが効いているかを確認 → ②PRを作成 → ③マージして検証 というステップで行いました。
実務ではそうするべきだと思いますが、ISUCONでは時間との戦いでもあるので、「次回からはINDEXはサクッと貼ってしまう戦略でもいいかもね」という話をしました。
INDEXをいくつか貼り、 3,761点
→ 7,394点
までスコアが伸びました。
15:00 ~
残り時間で一気にスコアを伸ばすために、DB構成を分けようという判断をしました。
しかし、ここは練習で一回もやったことがなかったので賭けの状態でした。
メンバーにインフラエンジニアはいませんでしたが、私はAWSをよく触っていたこともあり、私がリードしてインフラ構成の変更にチャレンジしました。
AWSのセキュリティグループの変更、mysql設定ファイルの変更、DBサーバーの向き先などの設定を変更し、無事DBサーバーの分離に成功しました。
そして、ベンチを回すと、7,394点
→ 10,415点
になりました。
このとき、嬉しすぎて全員で抱き合いました。青春ですね。
17:00 ~
DB分離が終わった時点で、残り1時間だったので、下手に変更してFAILすることが怖かったので、安全にできるプチ改善を行うようにしました。
具体的には、ログを止めて、スコアアップを図りましたが、あまり変わりませんでした。
17:30 ~
この時点での最終スコアは9,000点代だったので、ベンチガチャを回して10,000点行きたくね? となったので、ベンチガチャを回しました。
2回ほど回し、過去最高点がでたので、ストップしました。
最終スコアは10,539点
でした。
ベンチ記録
以下が記録です。
感想
ただただ楽しかったです。
運営さんとメンバーには本当に感謝です。
メンバーとは毎年出よう!という話になったので、来年が楽しみです。
また、練習した成果はしっかりと出せて、それ以上の成果も出せたので非常に満足のいく結果でした。
次回に向けて
次回は100位以内を目指したいです。
個人的には以下のアクションを取っていきたいです。
- 計測指標を増やす(top, alp, slowquerylogに加えてより高度な情報が得られるツール)
- 計測の基盤を30分以内に整えられるようになる
- INDEXをなるべく早く貼り、それ以外の改善に時間を使う
- サーバーの分離方法を手順化しておく
Discussion