はじめまして! クラウドサービス部の花川です. 9月10日に,社内ISUCONであるN-ISUCONを開催しました.その様子をレポートします.
※ 2020/03/31追記: ソースコードを公開しました! nttcom/n-isucon-2019: Codes used for N-ISUCON 2019
ISUCONとは
Iikanjini Speed Up Contest(いい感じにスピードアップコンテスト)の略で,与えられたWebサービスを限界まで高速化していく,チーム対抗のチューニングバトルです. 2011年にライブドア社(現LINE社)が主催となって初めて開催され,その後,年1回開催されているエンジニアには名の知られたイベントです. 今年は第9回として,09月07日と08日に予選,10月05日に本戦が開催されています.
社内ISUCON "N-ISUCON"
もともと,弊社には DigiCom(デジコン)という社内コンテストが開催されています. DX,イノベーションの新アイデア がテーマであり,どちらかというとハッカソンやアイデアソン的な側面が強いイベントです. そのため,テクノロジーだけではなく,ビジネスやデザインも含めた観点で評価され,順位が決定されます. 一方で,エンジニアが技術で殴り合うようなイベントは社内にはありませんでした. そこで,DigiComと共催という形で,"NTT Communications" の "ISUCON" である N-ISUCONを初開催しました.
N-ISUCONの開催目的としては,大きく下の3つです.
- Fun to Work/楽しんで仕事をする
- ソフトウェア人材の育成
- コミュニケーション活性化(コミュニティの形成)
本家のISUCONと同様にチーム対抗戦となっており,1チーム最大3人で構成としました. また,チームにはComグループのメンバー以外にも,他社の方を含める事も可としました.
N-ISUCONのテーマ
今回は初回開催ということで,シンプルなブログシステムをテーマに設定しました.
サービス名は Niita
で,某プログラマのための技術情報共有サービス風な感じです.
本家とほぼ同様に,下記の機能が実装されています.
- ユーザ
- 登録
- 変更
- ログイン/ログアウト
- アイコン登録
- 記事
- CRUD
- コメント
- CRD
- いいね
- CR
提供言語とアーキテクチャ
Niitaの実装は,バックエンドとフロントエンドに分離されています. フロントエンドは,はVue.jsによるSPA (Single Page Application) で構成されており,バックエンドのAPIサーバは,Python,Ruby,Node.js,Golangで実装し提供しています.
動作環境はGCP(Google Cloud Platform)上のVM(Virtual Machine)に上記の各言語で実装されたアプリケーションと,DBとしてMySQLをインストールしています. 各チームにこのVMを3台割り当て,競技を行いました.
ベンチマークは,各チームに指定された1台に対して,HTTPでリクエストを投げる仕様になっています*1
大会中の様子
開始時には,ISUCONなどでよくありがちな小芝居を入れたりしました.
大会中の皆さんは(当たり前ですが)超真剣です.
モニタを持ち込んだり,ホワイトボードを持ってきたりとやる気満々.
運営は,CommBASEで椅子を投げあいながらトラブルシューティングをしたり,競技者からの問い合わせに対応していました. こちらも,なかなか白熱した戦いが繰り広げられました.
懇親会
交流
大会後の懇親会では,参加者同士の交流が行われました. N-ISUCONという共通の話題もあり,大いに盛り上がっていました.
順位発表&問題解説
懇親会途中で,順位発表と問題の解説が行われました. 競技開始から終了までの点数推移はこんなかんじでした.
順位発表後には,簡単にパフォーマンスの罠について解説をしました. 大体,解説をしていると,開場からは「やっぱりここか〜」など,悔しい声が聞こえてきたりしました.
参加者からの声
開催後,参加者のみなさんにアンケートを取りました. 問題全体は難しいという意見が多かったですが,「過去の苦労話がそのまま問題に出ていた」や,「問題アプリの構成自体がレガシーではないのが良かった」など,ポジティブな意見も多くいただいきました.
また,「今後も参加したい」だったり「学習のモチベーションが上がった」等書かれており,運営としても苦労が報われたなという気持ちになりました.
まとめ
今回は,N-ISUCONのイベント開催の報告を行いました. 現在,問題アプリやベンチマーカを公開して,手元で実際に競技を出来るよう調整中です.
*1:この辺は,また別の記事で解説しようと思います.