ISUCONの概要
こんにちは、シニアソフトウェアエンジニアのriddleです。このポッドキャストは、IT業界のいろんな話やリアルをお届けします。
今回はですね、皆さん、ISUCONってご存知でしょうか。ISUCONというのはですね、次回で第15回かな、を迎える結構長いイベントでして、
何かというとですね、Webアプリのパフォーマンスチューニングを競い合う大会となっております。
これちょっとなんか、ISUCONの名前の由来、ちょっと知らないんです。調べてみよう。なんだろう。ISUCONの由来は、なんだなんだ。
あ、なんかですね、ちょっとログミーさんの記事を見かけたんですけれども、2011年の夏に結構いろんな会社ですごいエンジニアがいるんだけど、
それぞれの環境でそれぞれの制約の中でやってるから、誰が本当にすごいのかわからないじゃん。
つまり同じ環境で、要を挑んで勝負して一番を決めたいと。天下一武道会的なことをやりたいんだという話をされたそうで、
そこからですね、企画が始まり、ISUCONというもの。ISUCONのISって何やねんですけども、
なんかライブドアという会社で、エンジニアがサーバーチューニング中にですね、あんまりひどい構成だったら椅子を投げちゃうよ、みたいな言葉が社内で流行ったらしくてですね、
そこからパフォーマンスチューニングに関わる行為について、椅子という言葉が一緒にくっついていたという身内ネタだという感じですね。
だからISUCONみたいな感じらしいです。ISUCONですかな。
何をやるかというとですね、主催者側がウェブアプリを用意してくれます。
大会の進行と評価
ウェブアプリ、我々アクセスするんですけども、サイトがめちゃくちゃ多いんですよ。
このサイトを可能な限り早くするっていうのが目標です。
チームごとにですね、例えばクラウド環境が自分で用意するんですけども、そこでクラウドフォーメーションみたいなツールが配布されまして、
それを使ってですね、自分でインスタンスとかを立てて、そのインスタンスにウェブアプリが動くようになっているので、
その各チームはですね、1チーム3人ぐらいなんですけど、3人がそれぞれ自分たちのアプリを持っていて、
そこに対して運営が用意してくれた付加ツールをかけると、その付加ツールがどれくらいそのリクエストを捌けたのかっていうので点数が決まるという方式になる。
例えばですね、Aチームがいて、Aチームが例えばちょっと付加をすごい軽減します。
その結果、ベンチマークツールが今まで500点だったのを1000点計測できます。
そうなるとその人の得点は1000点になるわけですね。
これをですね、半日近くやって、その時にベンチマークスコアが一番高い人が優勝という感じですね。
すごい厳密に言うと、ある時間で区切って、その時間の後に運営が再起動して、そこで付加をかけた時だったかな。
ちょっとごめんなさい、厳密には怪しいんですけど。
自分たちで付加をかけた最終結果で、かつ時間終了後に運営が再起動して、動作がちゃんと確認できることみたいな感じだったような気がしますね。
そんな感じでですね、何をするかというと、主にインフラとバックエンドの行動、その辺をいじってですね、
よりたくさんリクエストを捌けるサーバーをチューニングできた人が勝ちだという感じで。
去年はですね、私も参加して、多分全1000チームぐらい参加した中で、我々のチームは29か8ぐらいでしたね。
参加する意義
当時、私が所属していたミクシーという会社で一つ乗りまして、2人ほど若手のエンジニアを捕まえまして、私がリーダーみたいな感じで参加します。
1000分の30なんで、結構いい数字だったと思いますね。
なんとかスポンサードを当時していたので、そのなんとか面目は保ったんじゃないかなと。
驚きなのはですね、その時優勝したのはまさかの一人で参加した学生の方でですね、凄まじいなと思った記憶があります。
これ本当に大変なイベントで、当時のやつはイスライドだったかなっていうサービスだったんですけれども、
これちょっとネタバレを含むので、もしやりたい方がいたら耳塞いで欲しいんですが、
webアプリがあって、今で言うGoとかシェアライドだったかな。
ライドシェアか、ライドシェアっていうタクシーの配車アプリがあると思うんですけども、
それを真似した感じで椅子を配車する、配車じゃないか、配椅子するみたいな感じのアプリなんですね。
だから注文が入って、そこに対して椅子を持っていくみたいな、椅子が車みたいな感じなんですけど、
それをたくさん注文がくるんで、うまくさばくためにいろいろGoのコードを変えたりとか、
バックエンドの言語は自分で選べるんですけども、私はGoを選んでいて、Goの言語を変えたりとか、
あとはEngineXとかMySQLみたいなデータベースがあるので、そこをいろいろチューニングしたりみたいな感じでしたね。
やっぱり広範な技術力が結構求められまして、過去だとDNSがすごい遅いので、
自作でDNSサーバーを簡易的なものを書いたりとか、あとは単純にデータベースも結構いろんなところを修正したりとか、
単純にインデックス貼るみたいな話もあれば、テーブルをそもそも作り替えちゃうとか、
MySQLのちょっと細かい機能を使って何とかするみたいなのもあります。
あとは言語のバックエンドの方も非効率なコードをなくすとか非同期にするとか、いろいろあるんですね。
この時に大事なのが、オブザーバビリティみたいなものを最初に突っ込んでおいて、
ベンチマークをした時にどこに負荷がかかっているのかを調べるとか、
この修正をした時にどれくらい改善したのかをちゃんとチェックするみたいなことをやったりするので、
このISCONの1回やるとですね、最初に影響というか問題を調べて修正して、
それがどういう結果を生んだのかみたいなのをフィードバックのループを回しながらどんどんイテレーションを回すことで、
スコアが上がって勝つ勉強にもなりようというイベントでした。
これインフラとかバックエンドを目指す人というか仕事でやっている人がレベルアップするにはめちゃくちゃお勧めで、
やっぱりですね、トラブルシュートでやると伸びるんですよ。
ただパフォーマンスシューニングってなかなか機会がない方も結構多いかなと思っていて、
細かくはわからないからとりあえずリソースを増やして対応しようみたいな、
雑にやるようなケースもどうしてもあると思うんですよね。
ただこのISCONというのはですね、リソースを増やすという方法は取れないので、
今あるリソースを従前に使い切るようなパフォーマンスシューニングをしましょうという感じなので、
いろいろと時間をかけて普段の勉強の結果というか、その瞬間に調べたこととかを導入できるかなと思います。
なので結構ですね、自分のレベルアップにはもってこいかなという感じですね。
あとはチームで挑戦する方がほとんどなので、チームワークとかチームで改善していくためにどういう作戦を立てるかみたいなところも問われてきます。
ということでですね、今回はインフラやバックエンドのエンジニアをめちゃくちゃレベルアップさせてくれるイベントであるISCONの紹介をしてみました。
私もですね、参加して参加した時はですね、本当にいろいろと計画を立ててですね、念入りに準備をしました。
リハーサルと称して何回か会社で一緒にISCONプライベートのものを仲間とやって、
どういうところ問題あるかとか、こういう点良かったよねみたいな、もうほぼ仕事みたいな振り返りを何度もして本番に臨んだという感じですので、
せっかく参加するにはですね、本気でぜひ1位を取るような感じで目指してやっていただくとより効果あるんじゃないかなと思います。
このポッドキャストをハッシュタグライティで皆様からの感想やコメント募集しております。
まだチャンネルの概要欄にありますGoogleフォームのリンクからもご投稿可能です。
ありがとうございました。