ジョブカン事業部のアドベントカレンダー22日目です。
ジョブカン事業部 開発エンジニアの@hana_9です!
DONUTSの札幌オフィスでジョブカン勤怠管理の開発をしています。
先日、「ISUCON14」に参加してきました。
今回は、初めてISUCONに参加した体験から学んだことを紹介していこうと思います。
そもそもISUCONってなに?
ISUCONとは、「Iikanjini Speed Up CONtest」の略称で、LINEヤフー株式会社が運営窓口となって開催している、お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトルです。
1〜3名のチームで参加する必要があります。
私は、2人のチームで参加しました。
なぜ参加しようと思ったのか
知ったきっかけは、チームメンバー含むエンジニア数人との会話で話題に上がったことです。
その後調べてみて、楽しそうなイベントだと感じ、力試しをしてみたいと思ったことが参加の動機です。今回は初参加ということもあり、大会の雰囲気を掴むことに重きを置いて、気負い過ぎずに楽しんで戦おうというモチベーションでした。
事前にやったこと
大会当日の流れ
大まかに以下の手順で作業を行いました。
- 支給されたCloudFormationテンプレートを元にAWS環境を作成し、マニュアルを確認
- 競技者ページにて、初回ベンチマーク計測
- 計測ツール導入・調査
- 実際にパフォーマンスチューニング
方針・進め方
アプリケーションで使用する言語は、Go言語を選択
ISUCONにおいて圧倒的に使用率が高く、アプリケーションのデフォルト設定でも使われています。参考になる記事も多いため採用しました。
チームメンバーとはオフラインで作業
細かいコミュニケーションを素早く取りやすいという理由からオフラインでやることにしました。
サーバー設定、Git設定、ボトルネック調査ツール導入などを役割分担して作業
役割分担できるのは複数人チームで参加しているメリットでした。作業を効率よく進めることができました。事前にスクリプトなどを用意できればもっと良かったと思います。
ISUCON初心者向け講習会という記事を参考に各種設定などを行いました。とても分かりやすくて助かりました。
昼ご飯はしっかり食べる
1時間くらいは離席。
ボトルネック調査、インデックス追加、アプリケーションのボトルネック改善作業
DBのCPU使用率が高かったため、インデックス追加を実施しました。今回行った改善対応の中で最もスコアが伸びました。N+1調査・改善を試しましたが、Go言語に不慣れ+アプリケーション仕様理解不足によりデグレが発生し、ベンチマーク実行時にエラーとなったため、revert対応を繰り返すことになり、ほとんど改善できずタイムオーバーとなりました。
終了30分前には作業を止めて、ログ出力設定などを元に戻し、ベンチマーク実行して終了。
結果
惨敗でした...。
最終スコア「3216」、順位は443/831位でした。
準備不足と単純な実力不足が大きな要因だと思います。
不甲斐ない結果に、めっちゃ悔しかったです。
来年は、スコア「10000」を目指してリベンジしようと思います。
学んだこと
事前準備はしっかりやっておこう
8時間と限られた中では、いかに仕様把握やボトルネック改善に時間割けるかが重要です。事前にできることは用意しておき、時短できる仕組みを作るろうと思います。
利用する言語やミドルウェアの知識を深めておこう
大会前に焦ってやっても遅いので、普段から利用してある程度扱える状態にしておくべきだと思います。その状態になっていないと手も足も出ないです。個々で勉強しつつ、チームメンバー同士で勉強会を開催してアウトプットしながら知識を深めようと思います。
計測ツールは自由に扱えるようにしておこう
扱いに慣れてないとどうしても時間がかかります。事前にたくさん利用して慣れておこうと思います。
過去問をたくさんやって慣れておこう
チームメンバーとの連携や効率の良い作業するには、実践形式にも慣れておく必要はあると思います。次回は、最低3回過去問で予行練習をしてから臨みたいと思います。
楽しくやろう
今回、上手くいかないことも多くありましたが、その中でも喜びや発見を見つけて楽しく作業ができたのは良かったことです。次回また参加したいと思えるきっかけにもなったので、継続したいと思います。
さいごに
DONUTSでは、新卒中途を問わず積極的に採用活動を行っています。
我々ジョブカン事業部も、一緒に働くエンジニアを募集しています。気になる方はお気軽に応募してみてください。