ISUCON4 に参加しました
ISUCON初参加してきました。
遅ればせながら、当日何やったかを思い出しながら備忘録としてまとめます。
結局最後の方はgit使っていなかったのであれですが、一応発掘したコードを置いておきます。
チーム
@mihyaeru21と@isaoekaと僕の3人チームで参加しました。チーム名は「ぞい」。
事前準備
基本何もやってないに等しいです。前回のISUCONのAMIを眺めつつ、Repositoryの用意をしただけです。
序盤
作業をどのように進めて行くかをしっかり決めていなかったので、そこから決めることに。そして、結局branchをmasterとdevelopに分けて基本作業はdevelopで行い、ある程度スコアの向上が見込めた時点でmasterにmergeしていく感じに。まぁ、最終的にgit無視で全員で本番コードをイジイジしていましたが。。。
後は役割をアプリ、DB、nginxで分けてそれぞれ作業を開始しました。
アプリ側ではまず言語がデフォルトでrubyになっていたので、それをperlへ切り替えました。ただ、これがテンプレ通りだとうまく行かない。なんでかなーと思ったら、初日に同様の事態が起こったらしく、対処法がFAQに書いてありました。
DB側ではmysqlのバージョン上げ。元々mysql5.5が入っていたのですが、それを5.7へバージョンアップさせる作業を行っていました。ただ、最終的にはエラーで入らず断念。
nginx側ではconfファイルを見直して、そこら辺に転がっているであろうテンプレ設定から拝借することで高速化を狙いました。
これらの作業を開始1~2時間程やったかと思いますが、スコアは初期の1500ぐらいから動かず。
中盤
28日(鶏の日)ということもありメンバーでケンタッキーフライドチキンを頬張りながら中盤戦突入。
やっとperlに切り替えられたということで、ここから気合い入れ直してスコアアップを狙って行きます。
まず、アプリ側ではどこがボトルネックになっているのかを計るために、NYTProfを導入することに。ただし、これも何故かうまいこと結果が吐き出されなかったために大きな時間のロスとともに断念。
DB側ではとりあえずindexを貼ることに。すると、ここに来て初めてスコア上昇。1500から倍の3000まで上がり、密かに目標にしていたスコアをindex貼るだけで達成しちゃって若干肩すかしを食らいました。これなら10000点とかイケんじゃね?と慢心が芽生えました(僕だけ)
今度はアプリから配信していた静的ファイルをnginx側から配信するように変更することで、スコアが微量増。
終盤
皆疲れの色が出てくる終盤。この辺りになると、万策尽きるというか、時間的にも出来ることが限られてきます。
そんな中、indexを貼ることで著しくスコアアップしたことから、他にschemaの最適化は出来まいかとさらにindexの追加を行いました。すると、3000だったスコアがさらに倍の6000にアップ!
もういいっしょ!俺たち頑張ったよ!
終了時間ギリギリということもあり、再起動しても動作することを確認しつつ最終スコアを送信してそのまま終了。
最終結果は以下の通り。(グラフの一番下のピンクが僕らです)
終了後
終了した後は、期限内にAMIを提出しなければならない。
提出するかー、とAMIの提出フォームを眺めていると、中にベンチマーカーの起動オプションという項目が。
「あれ?何コレ?」
そう。何と僕らのチーム、benchmarkerの--workloadオプションをポッカリ見落としていたのです。
「え?もしかしてこれ。。。」
試しに--workloadオプションを指定してやると、脅威のスコア14000越え!
30位ぐらいは狙えたじゃん!と悔やんでも後の祭り。
こうして、僕らのISUCON初参加は失意の中、終わっていきました。
感想
最後に後悔する部分はありましたが、なんだかんだで楽しかったです。
反省点は以下のような感じ。
- 事前準備が全く出来ていなかった
- 必要そうな技術は事前に触っとこう
- 困ったらFAQ。それでダメならサポートに聞こう
- マニュアルはしっかり読み込もう
- ケンタッキーフライドチキンはダメ。手がベタベタして作業にならん
次回は上位狙って行きます!早くISUCON5開催しないかなー。