こんにちは、PR TIMES開発本部インフラチームテックリードの櫻井です。
今回は先日開催した社内向けイベントである “TIMES-ISUCON” について紹介させていただきます。
「ISUCON」は、LINE株式会社の商標または登録商標です。
TIMES-ISUCONって?
まず初めにISUCONについて知らない方のために軽く紹介させていただきます。
ISUCONとは時間内にWebアプリケーションの高速化を競う大会で、LINE社が主催しています。
ISUCONは今まで全10回開催されており、今年もISUCON11の開催が予定されています。
https://isucon.net/
そのISUCONを社内のエンジニアを対象に開催したのが今回のTIMES-ISUCONになります。
以前の記事でも紹介したとおり、開発メンバーの技術力向上を目的として今回のTIMES-ISUCONの開催が決定されました。
今回の問題は2016年にピクシブ社の社内ISUCONとして使用された問題で、弊社執行役員CTOの金子が作者の1人として作成して、今回2021年バージョンとして作り直したものになります。
新卒研修を念頭において作られた問題なので本家ISUCONよりも少し難易度が低く、元々ISUCON参加者がいなかった当社にとって最適な難易度の問題になっています。
今回使用した問題はGitHubに公開されているので、興味のある方はぜひチャレンジしてみてください。
https://github.com/catatsuy/private-isu
当日の様子
次にイベント当日の様子を紹介させていただきます。
まず10時30分からルール等について軽く説明を受けた後、全員一斉にスタートしました。

スタートから1時間ほどは全員なかなかスコアが上がらない状態が続きましたが、12時ごろに20卒エンジニアの植江田さんが大きくスコアを上げたのを皮切りに他のメンバーも大きくスコアを伸ばしてきました。

そして17時30分の競技終了までそれぞれスコアを伸ばすために色々な試行錯誤を繰り返した結果、最終的には21卒エンジニアのTepyさんが最も高いスコアを出して優勝しました🎉
Tepyさんには優勝賞品を選ぶ権利が授与され、その中のひとつであるステディジャパン株式会社様のミニフィットネスバイクがプレゼントされる予定です。
リモート勤務環境をより良くするための商品群(いずれもPR TIMESのお客様の商品)の中から、”ながら”フィットネスのできるアイテムを選ぶところが、どこかTepyさんらしいなと思います!

事前準備について
次に今回のISUCONを開催するにあたって行った準備について紹介させていただきます。
AnsibleとPHP実装のバージョンアップ
今回使用した問題は5年前に作成されたもので、OSはDebian 8を想定して作られていました。
今回Ubuntu 20.04を使用するように変更したことや、使用しているAnsibleのバージョンが古かったこともあり、変更する必要があるAnsibleの設定が多数ありました。
またPHPのバージョンや使用しているライブラリなど古くなっている箇所が多々あったため、Pull Requestを作成してアップデートを行いました。
今までOSSにPul lRequestを作成したことがなかったので、リポジトリをforkしてからPull Requestを作成し、マージされるという経験は自分にとっても学びになりました。
バージョンアップ後のAMIも公開しているので、良ければ使ってみてください。
https://github.com/catatsuy/private-isu#ami
また他にも細かい変更を弊社執行役員CTOの金子が入れているので、その紹介も後日公開する予定です。
追記 : 変更についての記事を公開しました。よろしければこちらもご覧ください。
ベンチマーカーとポータル
今回スコアを測定するためのベンチマーカーにはこちらの記事を参考にAWSのAPI Gateway + Lambdaを採用し、スコアをグラフに表示するためのポータルサイトとしてMackerelのサービスメトリックを使用しました。
ただしAPI Gatewayには30秒のタイムアウトがあるため30秒以内にベンチマーカーを終了させる必要がありましたが、ベンチマーカーを30秒以内に終了させることが難しかったため、非同期でLambdaを実行してスコアをSlackのオープンチャンネルに投稿するという仕組みを取りました。
この場合、終了通知やスコア通知がレスポンス経由で行えないという欠点はありますが、API Gatewayのタイムアウトの制限がなくなったのはとても良かったと思います。

インフラ研修
TIMES-ISUCONの開催に先駆けて、新卒メンバー+希望者向けの簡単なインフラ研修を行いました。
インフラ研修では実際にサーバーに接続してコマンドを叩いてみたりすることで、TIMES-ISUCON当日に慌てずスムーズに開発が進められるようになりました。
インフラ研修の内容はGitHub Gistに公開されているので、興味のある方は使ってみてください。
https://gist.github.com/catatsuy/7e8a5bf5d5874a02f40832eb2777c549
最後に
開発本部では今後もメンバーの技術力向上のため、さまざまなチャレンジを行っていく予定です。
エンジニアの採用も積極的に行っているので、興味を持っていただいた方はぜひご応募をお願いします!
https://prtimes.co.jp/recruit/