カヤック×PR TIMES合同 カヤック社内ISUCONを開催しました

カヤックSREの今です。

今年も4月に新卒社員を迎え、4月の後半には技術部研修を行いました。
技術部研修の締めには毎年なにかしらのイベントを行うのが恒例になっており、昨年は社内CTFを開催しました。

今年は、カヤックでは2年ぶりとなる社内ISUCONを開催しました。

新卒のみなさんはオフィスへ集まってもらいました

ISUCON1とは

Iikanjini Speed Up CONtestの略で、出題されたwebサービスを競技時間内にいい感じにスピードアップするコンテストです。
参加者にはWebサービスが動作する環境と初期実装のソースコード、MySQL等などのソフトウェアの初期設定ファイルが配布されます。
制限時間内でWebサービスの動作が変わらないように変更を加えて、最終的にベンチマーカーが計測するWebサービスのスコアを競います。

Webサービスの構成は問題によって変わります。アプリケーションの初期実装はいくつかの言語が用意されている事が多く、参加者は使いやすい言語実装を選んで取り組むことができます。

開催概要

カヤック社内ISUCONは2013年から2019年の7年間毎年開催していましたが、準備のコストの大きさや新卒入社のエンジニアの人数などからここ2年は開催を見送っていました。
社内ISUCONをまたやりたいねという話題がよく出ていたこと、今年開催されるISUCON12の出題を担当させて頂くことになり、作問チームの練習も兼ねて2年ぶりの開催に至りました。

今年はオンライン開催となり、PR TIMESさんにも参加して頂き合同で開催することとなりました。 カヤックは新卒内と既卒社員内でそれぞれチームを組みました。新卒チームと運営チームはオフィスに会場を用意し、PR TIMESさんとカヤック既卒社員チームは各々のオフィスの自席や自宅から参加してもらいました。
競技時間は10:00-17:00の7時間です。

参加者はカヤックから13チーム、PR TIMESさんから8チームの合計21チーム、33人の参加となりました。 課題Webサービスの環境として、1チームにAWS EC2 c6i.xlargeインスタンス1台を用意しました。

題材のWebサービスとして、listen80という音楽プレイリストの共有サービスを作成しました。最大80曲のプレイリストを作成、公開できるWebサービスです。
GitHub repositoryを公開しています。本家ISUCONの腕試しとして是非触ってみてください。

github.com

初期実装はGoとTypeScriptの2つを用意しました。

listen80のトップページ

作問チーム

初期実装、テスト協力

結果

本家ISUCONでは競技時間終了後に再起動とベンチマークをかけて最終スコアを出すことが多いのですが、今回は簡略化してスコアは各チームが最後に実行したベンチのスコア、再起動後はブラウザで開いて一通りサービスが正常に動いていることを目視確認してOKとしました。
502 Bad GatewayWelcome to nginx!が表示されて残念ながら失格となったチームもありました。

最終スコアダッシュボードの様子
上位のチームと最終スコアはこちらです。

1位 76,994 キンミヤパックが夜の友(カヤック)
2位 32,048 絶対優勝(PR TIMES)
3位 14,760 健康ミネラル麦茶(PR TIMES)
4位  7,394 E_NOTICE(PR TIMES)
5位  6,255 Cカッパーズ(PR TIMES)

初期実装でのベンチマークスコアは600程度でした。上位チームの伸びには驚きました。
その他参加していただいた皆様のユニークなチーム名をご紹介します。

₍ ᐢ. ̫ .ᐢ ₎ (カヤック)
六甲おろし (PR TIMES)
シャミ子が悪いんだよ (カヤック)
flip-flops (PR TIMES)
もんじゃ焼き職人にヤクルト1000効かない (カヤック)
元エンジニア (カヤック)
日本ダービーはイクイノックスです (PR TIMES)
チームアメリカザリガニ (カヤック)
いちごエンジニア (PR TIMES)
カツオ食べたい (カヤック)
ベルギービールの音 (カヤック)
墓参り (カヤック)
すぐにサーバーを作りたいです (カヤック)
ハビ&エビ (カヤック)
チーム名とチームメイト募集中 (カヤック)
(・ワ・)<当日まで参加できるか分からん (カヤック)

参加者の感想

  • 趣味や実務でもサーバーアプリケーションを書くことがないので、どこから手を付けていいのやらという状況が逆に楽しかったです。
    sshやリポジトリの用意、サーバーからpullできるようにするところなど最初の準備は順調でしたが、軽く計測した後にコードを読み始めたところから怪しくなってきました。
    SQLのIndexを貼るのを後にしたのがよくなかったのがお悔やみポイントでした。
  • 去年(一年目)は何をしたらよいか何もわからずあたふたしていましたが、今年はなんとなくスロークエリログやアクセスログをまずとってみようかなどの方針建てができたので良かったです。すごい楽しかったです!
  • 業務でやったところをほぼそのまま持って来れたので、普段の仕事が役に立って嬉しかったです。あとはスコアが上がっていくところを見てて面白かったです!
  • これいらないだろ!って処理を見つけられたときは気持ちよかったです
  • なんもわからんなりに苦しむ過程で人生で初めて生のSQLと向き合えた気がしました
  • ISUCONやってみたおかげで高速化という言葉の意味するところが少しわかるようになった
  • 新卒で1度社内ISUCON、ISUCON予選(いつかは忘れた)、そして今回で3回目という経歴です。
    index を一つ貼ってからデッドロックが発生してスコアに詰まり、他の箇所を対応してました
    時間制限という中で的確な実装をできるひとはすごいとあたらめて実感できるISUCONでした。
  • ボリューム抜群のループクエリ、INDEXの貼りしろ、途中から始まるDeadLock、などなど、素晴らしい良問!

業務の知識を活かせたので楽しかった、逆に普段触らないレイヤーを触れて楽しかった、など様々な感想を頂きました。
Webサービスの構成全体を把握して、手を加えて改善していくのはなかなか珍しい体験だったのではないでしょうか。ISUCONの大きな魅力だと思います。

作問側の感想としては、愚直な処理でWebサービスを動くところまで作る経験もなかなか無いので、パフォーマンスのことを考えないで作るとこんなに遅くなるんだ、という体験が出来て楽しかったです。

まとめ

PR TIMESさんと合同で社内ISUCONを開催しました。
リモート開催のため仕事の合間に参加してくれた方もいて、多くの社員にISUCONを体験して頂けたのではないかと思います。

カヤックはISUCON12の作問を担当します

isucon.net

ご参加をお待ちしております。

カヤックではサービスをいい感じにスピードアップする仲間を募集しています


  1. ISUCON」は、LINE株式会社の商標または登録商標です。