読者です 読者をやめる 読者になる 読者になる

新卒研修の最終日に社内ISUCONを開催しました 〜運営死闘てか死亡編〜

isucon golang 新人研修

明日から、GWでウキウキですね!!!!!!!!!!!

どうも新人研修のisuconを担当したKonboiです。

昨年、一昨年に引き続き新人研修の最終日に社内ISUCONを開催しました。

isucon用問題を自分が作成し、ベンチをtkuchikiが担当する方向で進めていました。

作成指針

まずはどのような問題にするかを考えました。 社内ISUCONでは、一線で業務を行う先輩エンジニアから研修を終えたばかりの新卒エンジニアまで幅広いエンジニアに対して、楽しんでいただけるような問題を作成できればなと思い以下のの方針で問題を作ることになりました。

  • 新卒入社のエンジニアでも挑戦できる問題にする
    • 新卒研修の内容で加点できるy問題にする
  • 通常の業務できちんと行うべきことを行う問題にする
    • 適切なindexを張る
    • 静的ファイルをapache,nginxなどのwebサーバーで返す問題にする

というのを指針に問題の作成を始めました。

問題作成

今年の研修はGoで行われたので、問題ももちろんGoです。 が、最初は使い慣れているRubyでα版を作ってからGoに移植することにしました。

普段ならやばいクエリを気付かずに仕込むことは簡単なのに、 わざとウィークポイントを仕込むとなると、なかなか難しさがありました。

出来上がった問題は、簡易版のtwitterアプリケーションのようなものです。

app.png

機能としては

  • 新規登録
  • ログイン/ログアウト
  • 投稿
  • フォロー
  • アイコン画像を返す
  • 投稿一覧ページ
  • 投稿一覧の情報をjson形式で返すAPI

以上の機能となっております。

この機能をRubyでひと通り作ってからGoに移植しました。

移植の際には ISUCON本戦の第3回大会第4回大会大会のGo言語実装を参考にさせてもらいました。

ありがとうございます。

テスト作成

研修の一貫としてISUCONの問題からアプリケーションのテストコードからソースを作成してもらう時間が研修の一環であったので幾つかテストコードを作成しました。

HTMLの構造のチェックにはgokogiriを使い、PerlのTest::mysqldのGo版であるgo-test-mysqldを使ってテストコードを作成しました。

DB周り以外は過去のISUCON本戦のベンチを参考にしました。

新卒エンジニアにとっては、アプリケーションの概要は分かっているものの、 それをいざテストコードからアプリケーションコードに書き換えるには、非常に手こずっていた印象を受けました。 (正直僕が新卒だったら手も足も出ない可能性しかないです)

そのため、ある程度したらいくつかライブコーディング的に説明しながらアプリケーションのコードを書いたりしました。

新卒エンジニアがみんながコードを書いている時にテストコードを追加するというタイムアタックを隠れてやってました。

とギリギリ進行していた社内ISUCONですがあるところでつまずきました。

そうベンチです。

ベンチが上手く動かないまま色々と試行錯誤を進めました。

社内ISUCON当日

無常にも時間は過ぎていくもので、当日の朝を迎えました。

参加チームは 2人1組で

  • 新卒エンジニアチーム 4組
  • 先輩エンジニアチーム 5組

全9組となりました。

inhouse.png

虚しくもベンチが動かないまま、社内ISUCONが始まりました。

参加者の人はソースコードをみたり、 gitの環境を進めたりとベンチが回らないなりに実装を進めていました。

並行して運用のリアルISUCONが平行で進み。

午後1時ぐらいからベンチが動き始めISUCONが始まりました。

それまではざわざわしていた会場も静かになりだし各チーム、コードと向き合っておりました。

その後は淡々と進んでいき、あっという間に時間は過ぎました。

競技終了の時間を迎え、10分間アプリケーションが動くか何度の確認をしてもらった後に最終ベンチを行いました。

結果新卒氏チームで優勝したのは

clorets : 小坂、森本 チーム

が僅差で優勝しました。

先輩エンジニアは、全チーム新卒チームより高スコアをだし面目を保つことが出来たのではないかと思います。

ベンチが遅れてしまったので参加者には迷惑をかけました。 ですが、社内ISUCON後の新卒エンジニアからアンケートをとってみると

  • 設定を変更することで、処理速度が変わることを実感することができて、とても楽しかった。
  • エンジニア同士で勝負ごとをするのがおもしろかった

など思ったよりも評判が良く、全員が もう1度挑戦してみたい という意見でした。

出題側としては申し訳なさもありつつ、楽しんでもらえて良かったです。

まとめ

  • 新卒エンジニア達が社内ISUCONを通して少しでもチューニングの面白さを感じてもらえた。
  • ISUCONを作るのは本当に難しく大変!!
    • ISUCON本戦出題者の大変さとすごさを改めて感じました。 本当にすごいっす。
  • 社内ISUCONだったのでチャレンジできました。
    • 社内で失敗しないよう努力はしますが、最悪失敗しても大丈夫な環境でチャレンできるの本当によかったです。
  • 主催する方はゆとりと余裕をもって準備することを声を大にして言っておきます!

お疲れ様でした!!!