金子氏のパフォーマンスチューニングの原体験

草野翔氏(以下、草野):ISUCON公式サイトで公開された「CTOに聞いてみたインタビュー」でも言っていたのですが、現金を使えないということはISUCONの一番大変なところです。「いったんレバレッジを効かせてから」みたいなことはできないので、わりとつらいものがあります。そういうところも含めて次のテーマに行かせてもらえればと思っているんですが、じゃじゃん!

「パフォーマンスチューニングの原体験」は何でした? みなさんは何年付き合っていますか? とりあえず10年近くはみなさんやっていると思うんですけど。みなさん本を書いちゃうぐらい、もしくは12年間付き合っちゃうぐらい、ISUCONでパフォーマンスチューニングをやっていると思うんですけれど、何がそんなに楽しかったの? 最初に楽しかったのは何? ということを聞いてみたいと思っています。

みなさんのパフォーマンスチューニングの原体験。「これで俺はパフォーマンスチューニングをやる気になったんや!!」という話が聞けたらなと思っています。ということで、逆順に回りましょう。catatsuyさんの原体験は何ですか?

金子達哉氏(以下、金子):僕はISUCONです。僕は最初、新卒は開発で入ったんだけれど、インフラに異動して、インフラ未経験の状態でやり始めたので、こういう経験がありませんでした。ISUCONに出てみたいなと思って、誘ってもらえたので、勉強をし始めたんですよね。

最初は解き方が本当に何もわからない中、いろいろ過去問をやってみて、ISUCON4に出て、それで準優勝をしたような感じだったので。そこが完全に原体験なんですよね。

草野:初手準優勝はやばいな。kazeburoさんはパフォーマンスチューニングの原体験として何があったんですか?

長野雅広氏(以下、長野):最初はやはりお金がないというところです。お金がないから何かしらパフォーマンスチューニングをして、サーバーを軽くしていかないといけないというのが最初です。

草野:「お金がない」というのは会社に?

長野:20年前なので。インターネットがまだまだ初期の頃です。小さい会社にいたので、会社にお金がない、個人にもお金がない、クラウドなんてものもないというところで、1台のサーバーを使い切らないといけなくて、パフォーマンスチューニングをしたのが最初です。

中西氏のパフォーマンスチューニングの原体験

草野:waitaさんは何が原体験ですか?

中西建登氏(以下、中西):そうですね。それこそ私が最初にISUCONに出た時はまだ学生だったので、そういうプロダクショントラフィックとかもなかったので、ISUCONはかなり大きいかなと思います。それこそ、最初に知ったのがアルバイトしていた会社で、その時のCTOは馬場さんだったわけなんですけど。

その会社の先輩がISUCON3の学生枠で本選に出ていて、「こんな大会あるんだ」というところから始まったのが私の原体験です。そこから今はなぜか物理サーバーを触りながらクラウドを提供することにもつながっています。なので、ISUCONの学生枠が個人的な原体験かなという気がします。

馬場氏のパフォーマンスチューニングの原体験

草野:じゃあ、そのCTOをしていた馬場さんは何が原体験なんですか?

馬場俊彰氏(以下、馬場):仕事でずっとやってきていたトラブルシューティングですよね。負荷問題で、メディアサイトやメディアサーバーの運用やインフラまわりをやることが多かったので、そのトラブルシューティングとしてチューニングをやっていました。

ISUCONの前にチューニンガソンという似たようなイベントがあって、そこではアプリの中身を触ってはいけないというルールで、インフラのチューニングをしてスコアを出すことをやったりしていました。

その中で、普段やっていることがちゃんとスコアになって競争できるのが楽しかったわけです。そうこうしているうちに、kazeburoさんやtagomorisさんが「アプリに触れないとちょっとまた違うでしょ」とISUCONを始めたと私は認識はしています。

そうするともういよいよ何でもありになってきて。やっぱりできることが多いと楽しくて、それでどんどんハマっていきました。

草野氏のパフォーマンスチューニングの原体験

草野:なるほど。じゃあ組長をトリに置いておいて、自分の先に話します。僕のチューニングの原体験は「ニコニコ動画」です。僕はニコニコ動画プレイヤーを作っていた時期があって。その時の僕の原体験というか、「チューニングする意味があるな」と思った体験で申し訳ないですが。

コメントサーバーでコメントが最大10分で1,000件で、要するにどんなに動画が長くても1,000件のコメントしか受信しないといっていたものが、アニメが始まるから30分になると。30分で1,000件だと薄いから、1分100件にして30分で3,000件。つまり、動画長に対してとりあえず3倍になるような話になりました。取り方も変わって、コメントサーバーが単純に最新のシーケンシャルな感じではなく、1分単位なので、幅々でシーケンシャルな感じになる仕組みになりました。

それをリリースしたら、15秒ぐらいでニコニコ動画が落ちるわけです。負荷に耐えられずコメントサーバーがバンバン落ちていって、どんどん応答不能になると。インフラエンジニアががんばって差し戻して事なきを得るようなことを、3週、4週ぐらいずっとやっていました。

毎週koizukaさん(戀塚昭彦氏)というニコニコ動画のレジェンドなエンジニアが、「今週は2倍速くした」とか、「今週は4倍速くした」とか、「今週は先週に比べて8倍速い」とか言っているわけです。

掛け算なので、倍々にずっと掛け算をしていくと、最初の状態からたぶん300倍ぐらい速くなっていて、300倍速くなると本当に耐えられるようになるんですよね。「300倍速くなるんだ! すごい!」みたいな(笑)。「プログラムで300倍とか普通になるんだ」みたいな話を見ていると、「(300倍にすることで)根本的にレベルが違うことが起こるんだ」みたいな。

同じサーバーで本当に耐えられるし、何だったらサーバーの台数が減るようなことが起こるのを見ると、やっぱり「レジェンドクラスはすごい!」みたいになって。

ちょうどフロントエンド側? ユーザーのパソコンで動くプレイヤーを書いていたのもあって、サーバーサイドでチューニングするというインパクトはメチャクチャ大きいんだと。「かっこいい! いつかやろう」と思いました。

そう思って、その「いつか」が意外とその3年後ぐらいに訪れて(ISUCON 初出場)、メチャクチャにボロ負けをしてすごくツラい思いをして「俺、絶対にISUCON勝ちたいわ」と言ってがんばり始める羽目になって、ISUCONにそのまま人生を吸われているというのが現状です。

なので、ISUCONのおかげでちゃんとチャレンジすることができたんだけれど、ISUCONのおかげで沼から帰ってこれなくなっている感じはあります。

藤原氏のパフォーマンスチューニングの原体験

草野:藤原さんの原体験を聞きたいですね。組長がいったいどうやってこんなに強くなったのか。

藤原俊一郎氏(以下、藤原):原体験でいうと2つあります。1つは15年以上前で、当時大学受験情報サイトを仕事でやっていました。その中にセンター試験の解答速報というのがあって。当時のiモードのサイトで(作られていて)、ふだんのトラフィックに比べて、その日だけものすごいピークを(迎えました)。

(一同笑)

土曜日の夜にビョーンッと来るんですよね。それでまんまと落とされました。しかも、そのピークは年に2回しか来ないんですよ。耐えられるようにがんばってチューニングしたとしても、それを次にできるのが結果が出るのが1年後です。

その時に初めてちゃんと複数台構成にして、ロードバランシングしようとか、いろいろ(やりました)。当時はLinuxのLVS(Linux Virtual Server)とか、そういうことをやるしかなかったのが本当に最初です。

あともう1つは、今のカヤックという会社に転職してすぐ(のこと)。「koebu」というサービスがあって、そのサービスのコードの中にすごくやばい地雷みたいなクエリがあって。それを誰かがクリックすると、サイトが落ちるんですよ。

当時はまだデータベースがハードディスクで、ちょっと重いクエリが重なるともう雪ダルマ式に負荷が上がってしまって。そうすると、30分ぐらい返って来ないんですよね。そういうのを転職した直後に見て「スロークエリを見せて」と言ったら「見てもわからないから出していません」と言われて(笑)。しょうがないからスロークエリを出して「これはここにインデックスを貼らないとダメですね」「これはちょっと1回カラムを外に出して正規化をしたらいいんじゃないですか」と言って、入ってすぐにそれを解消しました。

1ヶ月経たない、2週間ぐらいかな? 転職してすぐに、その年のISUCONで勝ちました。その前はすごく小さい会社にいたので、自分の実力がどんなものかもよくわからなかったのですが、意外と通じるなと思ったのが2011年で、ISUCONの初回の年です。

草野:良い話だな。なるほど。ありがとうございます。みんなパフォーマンスチューニングの原体験でけっこうエモい話が出てくるんですね。特にwaitaあたりは学生でISUCONに出て「俺、今かえって来てるわ」みたいな感じのエモい話で。

僕の中にはISUCON優勝者はみんなエモい話を持っている説があって。今までの延べ9,207名の参加者数のうち、優勝経験者は21名だけで、エモいエピソードがあるとISUCONに優勝できるのではという気持ちになります。

みんな練習をいっぱいして「エモいな」みたいな感じになると優勝できる気がしてきました。

ISUCONが始まることになった2つの理由

草野:パフォーマンスチューニングの原体験はいろいろな人に聞いてみたいです。morisさんの原体験は何だったんだろうと気になります。ISUCONを始める理由。なんで「ISUCONを」となったのか。kazeburoさんは知っていますか?

長野雅広氏(以下、長野):そうですね。当時のライブドアで、主なサービスとしては「livedoor Blog」ですよね。あれに当時も人気のネットブログがいくつかあったので、「落ちないようにがんばろう」みたいなところですね。

草野:941さんが歴史を知っている。なぜISUCONは始まったのか。

941氏(以下、941):こんにちは。長老です。

(一同笑)

941:理由はいろいろあって、まず1つはmorisさんのテンションが上がっていたということです。他のパフォーマンスチューニングのサイトというか、コンテストがあったんですけど、それはPHPに詳しくないとぜんぜん戦えない大会だったらしくて。そうではなくて何でもOKみたいなものがやりたいというのが、沸々とあったらしいということが1つです。

もう1つは、先ほどkazeburoさんがお話されていましたが、いつでも使えるサーバーを準備できていて、それをやる環境が整っていたことが大きいので、その2つの要因かなと思っています。まぁでも、一番大きいのはmorisさんの怒りが発端であると私は認識しています。

草野:怒りか。怒りはやばいな。

馬場:名前を言ってはいけないイベントですね。

(一同笑)

941:はい。あまり。

長野:誰でもやれることじゃないというところですよね。

941:そうですね。

馬場:(その時は)タイミング的に「たまたま100台ぐらいサーバーあるよ」という話でしたよね。

941:そうですね。なので、(サーバーを)3台ずつ配って30チーム(で取り組む)みたいなことが一応。当時は序盤は25チームでしたっけ? そんな感じなはずです。

馬場:新宿の貸し会議室か何かに集まって。

941:予算がなかったから。会社近くで借りました。

草野:「日々いろいろなサービスの性能問題で毎晩障害が出て。いつもやっていたけれど、そのままコンテストにしたかった」というのが、morisさんによる昔の話が混ざった解説らしいですね。

夜間に呼び出されることはあるか?

草野:みなさんはまだ夜間に呼び出されているんですか? もうみんなオートヒーリングになった?

中西:(呼び出されないなんて)そんなことはまったくないので。

草野:みなさんのスキルでいい感じに……。

金子:起こる時は起こるので。

中西:集合する時はぜんぜんあります。

草野:僕は、自分がプライベートで抱えるMastodonが、地震が起きるとDBが突き刺さるので、毎回「地震は起きるな」と思っています。地震が来るとみんなインターネットに集中して、インターネットに集合するとSNSが重くなるという。

みんなHTMLテンプレートを書きたくないから、ISUCONの問題はどんどんSPA(Single Page Application)になるんですよね。JSONで返したい、HTMLで返したくないからみんなSPAになる。private-isuで久々に(HTMLで返す問題を見た)。

金子:あれはprivate-isuでテンプレートエンジンを他言語に移植するのが大変すぎて、次は絶対にJSONでしか返したくないとなりました。だからそれ以降の問題はJSONでしか返していないんですよ。

草野:なるほどね。そういう理屈だったのね。

金子:そうですね。しかもあれは初期実装がRubyで、僕が適当に書いたら思いのほか適当で、「これどうやってGoに移植するの? Goに移植するのは僕なんですけど」と。僕が書いたRubyのコードをGoに移植できないってイライラしていました(笑)。

草野:なるほどね。そういう出来事が。ISUCONの作問をするのもなかなか大変ですからね。

(次回に続く)