pixiv insideは移転しました! ≫ https://inside.pixiv.blog/

ISUCON6出題チームが社内ISUCONを開催!AMIも公開!!

ISUCON6の出題者の1人の@catatsuyです。

GW直前の4/28、本年度入社の新卒エンジニア全員と社内のエンジニアほぼ全員が参加するイベントとして社内ISUCONを開催しました。

f:id:catatsuy:20160428123209j:plain

同じく出題者の1人である@edvakfの記事でも書いたように、今年のISUCON6では株式会社はてなさんと弊社で共同出題する予定です。

inside.pixiv.net

今回は弊社のISUCON6出題チームの4人で開催した社内ISUCONの様子を紹介します。

社内ISUCON

時間は12:30から19:00まで行いました。営業日に会社のエンジニアのほとんどが参加するイベントなので、午後を割り当てる形にするぐらいが良いのではないでしょうか。今回は新卒研修の一環としての側面があったので、新卒エンジニアにはISUCON事前ハンズオンとしてこのような内容の講義を行いました。

初期実装

初期実装の言語は『Ruby・PHP・Node.js・Go言語』の4実装を用意しました。社内ISUCONにしてはかなり多く用意した方だと考えています。

これだけ用意した理由ですが、弊社のサービスはPHPで作られているpixivを始め、BOOTHpixivFACTORYpixivコミックなどのようにRuby on Railsで作られたサービスもあります。またpixiv SketchではRuby on RailsとNode.jsのハイブリッド構成になっていますし、画像変換や広告配信ではGo言語も使われています。それに伴い、社内のエンジニアはそれぞれ得意言語が異なっており、それぞれが得意な言語で問題を解いて欲しかったという事情がありました。

全20チームが参加して、使用言語は以下のように幅広かったです。

言語 使用グループ
PHP 8
Ruby 5
Node.js 4
Go言語 3

オープニングプレゼン

オープニングプレゼンを用意しました。今回は新卒エンジニアの研修も兼ねていたのでそこを意識したプレゼンになっています。

speakerdeck.com

オープニングプレゼンで社内が盛り上がりました。その後にさっそく事前に決めた2人チームに分かれて、初めて見るWebアプリケーションである『Isucogram』の最適化に挑んでもらいます。

f:id:catatsuy:20160428123415j:plain

Isucogramの画面をちょっとだけお見せします。

f:id:catatsuy:20160517003209p:plain

このブログを書くときに気付きましたが、uが抜けてタイトルがIscogramになっていました。どちらでもいいと思います。

大混戦

当日は新卒・社員・アルバイト関係なく争う大混戦でした。ツイートをいくつか紹介します。

優勝チーム

最後に優勝したのは 秒間50kリクエストを捌くノウハウがこの1冊に!nginx実践入門 - pixiv inside を執筆した @harukasan@Moyashipan さんのチームでした。最後の最後での逆転劇で幕を閉じたときはとても盛り上がりました。

f:id:catatsuy:20160514213021p:plain

賞品授与

f:id:catatsuy:20160514213514p:plain

終わった後に賞品授与と総括を行いました。

特別賞と惜しくも最後に逆転されて2位だったチームです。非常に悔しがっていたのが印象に残っています。

f:id:catatsuy:20160428190558j:plain

最後に逆転優勝したチームです。

f:id:catatsuy:20160428190659j:plain

AWS

今回は社内ISUCONということもあったので、全チーム分の競技者用インスタンス・ベンチマーカー・ポータルサイトのインスタンスを全て運営側でAWS上に用意しました。スペックは以下のものを使用しました。

用途 インスタンスタイプ 台数
競技者用 c4.large チーム数分
ベンチマーカー c4.xlarge 5-7台(スポットインスタンス)
ポータルサイト m4.large 1台

気を付けないといけないのはAmazon EC2で実行できるインスタンス数に上限があることです。

aws.amazon.com

今回は事前申請フォームで申請してあらかじめ上限を上げておきました。AWSさんの素早い対応が非常に助かりました。ありがとうございます。

GitHubとAMIを公開!

ここまで読んで社内ISUCONでやった問題を解いてみたいと思った方に朗報です!ソースコードとAMIを公開しました!!無料です!!

github.com

AMIのIDなど、詳しくはGitHubのREADMEを参照してください。

ISUCONの練習や社内研修にと、様々な用途で使っていただけると幸いです。

やったことで得られたもの

社内ISUCONをやったことで今までISUCONに触れてこなかった社員にも、ISUCONがどういうイベントなのかを感じてもらうことができました。普段アプリケーションを触っているエンジニアから、nginxの勉強をしておけばよかったという声が聞こえたりと、様々な技術を勉強しようというモチベーションにつながったようです。

出題した我々も、聞いてはいましたが、ベンチマーカーを作るのが非常に大変(並列度・高速性・1つ1つのシナリオの表現方法などなど)でした。またISUCONの問題作成の上でも、初期実装をRubyで書いてしまうと、非同期に処理を書く必要があるNode.jsや、型があるGo言語への移植が難しくなるので工夫する必要があることが分かりました。このように実際にやってみないと分からない数多くの知見が得られました。

最後に

冒頭にも紹介したように、今年のISUCON6では株式会社はてなさんと弊社で共同出題する予定です。

inside.pixiv.net

社内ISUCONは我々にとってはISUCON本番の前哨戦でした。当然のことですが、実際にISUCONの問題を作るというのは問題を解くよりも様々なことをやる必要があります。今回うまくいった部分もあれば、改善すべき点も多くありました。社内ISUCONの経験を活かしてISUCONの出題を頑張ろうと思うのでどうぞご期待ください!!

ピクシブ株式会社ではpixivをはじめ様々なサービスを開発・運営しています。高速なサービスを作りたい、ISUCONが大好きだ、来年の社内ISUCONは自分が作ってやる!等のエンジニアの方を大歓迎します!

recruit.pixiv.net