ISUCON5予選と自作ISUCON
9/26,27日に行われたISUCON5の予選に、私(伊藤)と弊社下條、前田の3人で 「独身リモートワーカーズ (38歳)」 というチーム名で参加してきたので、その振り返りと、その後私が作製した自作ISUCON (通称ISHOCON) の紹介をしたいと思います。
ISUCON参加のきっかけ
私がISUCONを知ったのは昨年のISUCON4が終了した時でした。Twitterで追いかけていた数人のエンジニアがISUCONについてのツイートをしていて、なんだこれは?と思って調べたのがきっかけです。
ISUCONとは「Iikanjini Speed Up Contest」の略で、与えられたアプリケーションをどれだけ高速化できるのかを競うコンテストです。
今年の5月末に ISUCON5の開催告知 が出されて、今年は参加したい!と思っていました。7月半ばぐらいにチーム名古屋(下條、前田)とローカルワークをした時に、先輩たちに「ISUCON一緒に出ませんか!?」と誘ってみたのですが、その時は概要を説明するだけでそれ以上に話は進みませんでした。
ただどうしてもISUCONに出たかったので、その2週間後ぐらいに社内Slackで「ISUCONに出たいのですが、一緒に出てくださる方いませんか!!」
と声をかけてみると、社長の国本が「楽しそうだね、サーバーサイドチーム(下條、前田、私)で参加してきなよ! ISUCONの練習は業務時間使ってもいいから。」
と Iikanji にチームが決まりました!笑
ISUCON準備
予選まで1ヶ月半ぐらい時間があったので、週1で30~60分程度のミーティングをして、毎週簡単な宿題をやることにしました。
やったことは以下のようなことです。
- ISUCON4予選/本選 のブログ記事を読んでISUCONの定石を調べる
- ISUCON4予選の問題を各自で実際に解いてみる
- ISUCON3予選の問題を3人で一緒に解いてみる
- ログの解析ツールの下準備
だいたいこれぐらいのことをするとミドルウェア周りの知識がほとんどなかった私でも、なんとなくどの辺りを触れば良いのか分かるようになってきました。
一番効率よく勉強ができたと思うのは、実際に予選の問題を解いてみることで、ハイスコアを出したチームの改善方法を真似しながら、ISUCON4予選の問題を70000点になるぐらいまで高速化してみました。
ISUCON当日
当日は名古屋のコワーキングスペースに3人で集まって挑みました。
作業担当は
- 下條: Webサーバー、アプリケーションサーバー周り
- 前田: アプリケーション全般と全体の進捗管理
- 伊藤: DB周り
と事前に決めており、なんとなく自分の担当周辺を改善していこうという方針でした。
11時に試合開始となり、最初の1時間は当日マニュアルを読んだり、インスタンスを立ち上げたりしていました。その後はプロファイリングツールを導入したり、MySQLの秘伝のタレを導入したり、Nginxから静的ファイルを配信するようにしたり、事前に念入りに練習した部分をほぼコピペで実行します。スタートダッシュがちょっと速かったこともあり、この段階で4位になり、3人で盛り上がっていました…笑
その後はアプリケーションを読みながら、プロファイリングの結果と付きあわせて、遅そうな部分の改善をしていきました。私が N+1問題 を解決していき、あと2人で重たいSQL文を改善していく方針で午後は作業を行っていました。
17時ぐらいまでそれを続けて、この段階で8000点ぐらいだった記憶があります。
常に10~15位ぐらいにはいたのですが、なかなか上に上がれずみんなすごいなと感心していました。
17時以降はこれといった決め手が見つからず、最終的に10300点ぐらいでタイムアップになってしまいました。
予選通過の最低ラインが13898点でしたので、あと3,4歩足りない感じでした。
ISUCON初心者なりにも、事前にある程度時間を取って練習はしていたので予選を通過できなくて悔しかったです。
ISHOCON
ということで、(開催されるのか分かりませんが)来年のISUCON6の勉強のために、練習用の問題を作ってみました。
ISUCONをもじって、 ISHOCON (Iikanjina SHOwwin CONtest) です。
この記事のトップ画像が ISHOCON1 のトップページのスクリーンショットなのですが、テーマは「爆買いECサイト」です。最近日本には爆買いをする外国人観光客がたくさん来ているので、ECサイトもそれに対応できるように高速化しよう!という魂胆です。
ISUCONのように制限時間を設けてコンテストをやろうとは思っていないので、自分が納得行くまで高速化する勉強の題材として使って頂ければと思っています。
ランキングも一応作ってありますので、ここに載りたいぞ!と思った方は是非挑戦してみてください!
みなさんの参加をお待ちしています!!!