積み重ねが生み出した新たな一歩——若手が力を発揮した「R-ISUCON 2021 Summer」
弦本 卓也
2021年10月29日、リクルート内のパフォーマンスチューニングコンテスト「R-ISUCON 2021 Summer」が開催され、33チーム81人が参加しました。回を重ねることで成熟し、新たな歴史が一歩踏み出されたことが印象的だったその模様を振り返ってみたいと思います。
オンラインでも賑やかに開催、「R-ISUCON 2021 Summer」
レギュレーションの枠内で、お題として与えられたWebサービスの高速化を競う「Iikanjini Speed Up Contest」、略して「ISUCON※」は、エンジニアが楽しみつつスキルアップする場として注目を集めてきました。いい大人(と学生)が本気で問題に取り組み、より高いスコアを出したチームのアプローチを見て「そうやればよかったのか!」と悔しがっては交流を広げる場として認知され、今や告知から2時間ほどで600チームがエントリするほどの人気イベントとなっています。
※「ISUCON」は、LINE株式会社の商標または登録商標です
そして、このフォーマットをベースに、社内研修や人材発掘の一環として社内ISUCONを開催する企業も増えています。
リクルートもその一社で、過去7回に渡り「R-ISUCON」を開催してきました。運営事務局でPMを務めた古川陽介さんによれば、当初は「自分で出題すれば本家ISUCONで勝てるかも……」という思惑から始まったそうですが、「リクルートらしい」問題を用意し、新人・若手エンジニアからマネージャークラスまでが一つの場所に集い、同じ問題に取り組むことで、参加者それぞれが新たな知見やつながりを得る場として機能しています。
当初は9月末に予定されていたR-ISUCON 2021 Summerですが、10月29日というほぼ「Autumn」での開催になりました。また、過去の大会は一泊二日の合宿形式でしたが、収束しつつあるとは言えコロナ禍の影響が残ることも配慮し、オンラインでの実施となりました。
今回のお題は、「Super Simple Storage Service」、すなわちS3ならぬ「S4」という名称のファイル共有サービスです。ファイルをアップロードしたりダウンロードしたりできるシンプルなファイルストレージサービスですが、暗号化・復号処理や「ClamAV」によるマルウェアスキャンといった処理が実装されています。ベンチマークサーバからはマルウェアが含まれたファイルも送られるため、きちんとエラーとして処理しないと点数は上がりません。
S4サービスはJavaとGo、Node.jsの3種類の言語で実装されており、どれを選択するかはチームの自由です。また、AWS上のインスタンスは3つ用意されており、それらをどう使い分け、負荷分散するかによってもスコアは変わってきます。
今回は、朝の9時半から夕方6時まで、一日で競技を行いました。このため過去の大会のように、一つの場所に缶詰となって夜中まで、カリカリチューニングに取り組むことはありません。体には優しいけれど、その分、短期決戦における瞬発力と集中力が求められます。各チームともSlackなどを駆使してコミュニケーションを取りながら、真剣に問題に取り組みました。
競技開始直後は静かでしたが、1時間も経てばだんだんスコアが伸び始め、お昼を挟むとさらに戦いはハイレベルなものになりました。ただ時折「- infinity」という謎のスコアも飛び出し、運営チームをわかせていました。
R-ISUCONでは古豪となる「ふんばり温泉」チームの砂川辰徳さんは、「音声だけつなぎながら、適宜画面共有をして作業を進めていきました。もしオフラインだったらうまくいったのに……という場面はほとんどなく、オンラインでも変わらず取り組めたと思います」と振り返っていました。
ただ、「夜も含めて24時間、一カ所に集まって作業する楽しさや、他のチームとのコミュニケーションを取れることもR-ISUCONの魅力の一つだと思いますので、そういう形も復活できるとうれしいなと思います」というのも正直なところだそうです。
事前の予想を裏切る? 王道のチューニングが求められた今回の問題
10年前とは異なり、エンジニアが楽しみながらスキルを磨けるコンテストのバリエーションは広がっています。リクルート社内もそうで、R-ISUCONのほかにスピードハッカソン、PIGICON、IMOCONなどさまざまな種類のコンテストが行われ、切磋琢磨できる場が増えています。
回を重ね、ループを回すことでナレッジは蓄積されていきます。本家ISUCONやR-ISUCONもそうで、準備や解法が洗練され、より点数になりやすいところが狙われる傾向にあるようです。具体的には、「データベースのI/Oボトルネックを改善すればパフォーマンスが跳ね上がるはず」と作戦を立て、コンテストに臨んだ方もいたようです。
しかし今回のファイルストレージサービスは、そうそう思惑通りにはいかないような問題でした。また、データベースとして、ISUCONでよく使われるMySQLではなくPostgreSQLが使われており、時間のかかるクエリを出力してくれる「pt-query-digest」のような定番のツールが思うように使えず苦労したチームもあったようです。
今回、運営チームからのラブコールを受けて、参照実装となるJavaの問題を作成した川島義隆さんは、「過去のISUCONの問題を見ていると、データベースがボトルネックになることが多いように思ったため、今回の問題はデータベース以外の部分も重たい仕様にし、『ここにインデックスを張れば高速化するな』という見え見えポイントは残さないようにしました」と種明かししてくれました。
もちろん、競技を楽しむための最初のとっかかりも作っています。ファイルサイズを取得する処理がループの中に入っている箇所があり、そこを修正するだけでスコアがぽーんと伸びるようになっていました。「ここが最初のサービス問題であり、かつ、そこをクリアしないと勝負にならない形です」(川島さん)
川島さんがこだわったのは、実際の環境に近い作りとすることだったそうです。
ちょうどポータルサイトが凍結され、戦いが山場にさしかかるころ、「ヘキサゴナルアーキテクチャに基づいて、できれば今後のアプリケーション設計の手本にもしていただけるようにと考えて作りました。ただ、そうするとやっぱり多少のオーバーヘッドが出てきます。点数を稼ぎにいくにはそこをちょっと崩していかなければいけません。コードのメンテナンス性を保った状態と性能のバランスを、どのくらいで保つのがいいのか、各チームの試行錯誤が結果に表れるのではないかと期待しています」と述べていました。
事実、競技終了後にGatherで行われた交流会の場では、「まさかPostgreSQLが来るとは思っていなかった」「インスタンスの使い分け、どうすればよかったのかな。後からユーザーID別に水平分割すればよかったって気付いたけれど、時間切れだった」といった声に混じり、「Javaの参考実装、よくあんなに書いたなと思いました。どんな人が書いたのか、気になりますね」という声も漏れ聞こえていました。
過去たびたびR-ISUCONに参加してきた砂川さんも「ISUCONの合い言葉は『推測するな、計測せよ』ですが、今回の問題はまさにそういう姿勢で取り組まないと対応を誤るような、いい問題だったと感じています。ボトルネックつぶせばその分順調に得点が積み上がる、とてもいい問題だと思いました」と述べていました。
新卒、そしてISUCON予選を支援した二年目といった若手が躍進
こうして7時間半にわたる競技を追えたR-ISUCON 2021 Summerでは、新しい息吹を感じる嬉しい驚きがありました。
5位には、本家ISUCON予選にも参加経験があるという新入社員によるチーム「前日は早く寝る」が入賞。そして、唯一30万点を超えるスコアを叩き出して優勝したチーム「俺たちの戦いはここからだ」も、入社2年目のエンジニアたちで構成したチームでした。それも、昨年、リクルートが本家ISUCONの予選問題を提供した際、古川さんたちとともに作問に携わったメンバーで構成されていたチームという、まるでドラマ仕立てのような展開になったからです。
「R-ISUCONの勝者って、僕らも含めてだいたい3チームでローテーションしてきました。今年はそのトレンドが変わって、正直、面白いなと思っています」(古川さん)
前日は早く寝るチームのkyontanさんによると、本家ISUCONは学生時代から5〜6回チャレンジしてきましたが、なかなか本戦にまで進めず、「腕を磨くいい機会になるかも」と考えて参加したそうです。「計測」がすべてというISUCONの原則に則り、普段SREとして活動しているスキルも生かして、ベンチマークを回してはボトルネックを洗い出して改善するPDCAサイクルを回すことで、着実に点数を伸ばしました。
ただ、競技終盤に、点数が大きく伸びそうな「飛び道具」的な改善を加えようとしたものの、うまくベンチマークを通せず、点数を伸ばせなかったことが反省点だと言います。「ISUCONって毎回、あれができたら、これができたらと悔しい思いが残るので、引き続き腕を磨いて次回に生かしていきたいと思います」(kyontanさん)
そして、R-ISUCONを通じて普段の業務に生かせる経験も得られたと、次のように振り返りました。「限られた時間の中で、的確にボトルネックを見つけ出して修正を実装するというスキルは、ISUCONだけでなく実際の開発でも役立つと思います。正しいコードを早く書いて問題を的確に解決するスキルを、今後伸ばしていきたいです」(kyontanさん)
※twitterのURLは本人の承諾の上で公開しています
優勝を飾ったチーム「俺たちの戦いはここからだ」は、インフラ担当、バックエンド担当、フロントエンド担当がそれぞれ一名ずつというバランスの取れたチーム構成でした。
progfayさんは普段はフロントエンドエンジニアとして業務に携わっていますが、「今回は、最初はアプリケーション側がボトルネックで、徐々にデータベース側にボトルネックが移っていったり、インフラ側にもちゃんと手を加えないと改善できないところがあり、チームメートそれぞれの知識を生かし、幅広い知識を生かしていく必要がある、すごくためになる問題だったと思います」と述べました。
俺たちの戦いはここからだの面々も、さまざまなレポジトリを参照して過去問とその解法を勉強し、チートシート的なものも用意してR-ISUCONに望みましたが、やはりものを言ったのは、「計測」だそうです。
「R-ISUCONでは、計測してボトルネックを見つけ、それを改善するという計測の経験を積んでほしいというのが一番の狙いじゃないかなと思っています。そういう意味で今回の問題は、計測すれば分かる、という問題だったと思います。上位に入賞したチームはいずれもちゃんと計測ができ、そこに対して手が打てたチームではないでしょうか」(progfayさん)。それも、適切なツールを用いて、「どの関数が原因か」「インフラならばCPUか、メモリか、それともネットワークか」と、細かくボトルネックを特定することが大切だとあらためて感じたそうです。
「こうした計測の方法は、昨年、ISUCON予選の作問に参加した際に先輩方から習ったものです。そのときの経験が、めちゃくちゃ生きています」(水木佑哉さん)
勝者が次の問題を作成するのがISUCONのならいですが、それに従えば、俺たちの戦いはここからだチームが、次のR-ISUCONの問題を作成することになります。まだ将来のことは未定ですが「作れるとしたら、面白い問題だな、いい問題だなと思われるものを作れるといいなと思っています」(水木さん)。そして、R-ISUCONで試行錯誤して得た勘所を業務に還元するとともに、業務で得た知識を来年の本家ISUCONにぶつけたいとも述べていました。
苦しさも楽しさのうち? 学びが楽しいことがISUCONの醍醐味
傍目に見ていると、普段の業務もある中で何とか時間を作り、過去問を勉強し、わざわざ丸一日かけてひーひー言いながらチューニングに取り組むなんて、わざわざ苦労しにいくようなものです。なぜそこまでしてISUCONやR-ISUCONに参加しているのでしょう。
参加者、そして運営事務局から異口同音に返ってくるのは「単純に楽しいから」、そして「新しい知識を身につけられることが楽しいから」という答えでした。
「Webサイトを早くしたいなという欲求はどのエンジニアにもあると思います。ISUCONやR-ISUCONはそれが実現できる上に、結果が数字として表れるのが面白いです。それに僕が好きなのは、終わった後ですね。感想戦や公開レポジトリを見て、他の人たちがどうやって点数を上げたかを知り、実際に試してみて、こんな手法があるのか、でも実際の環境では使えないかな……なんて考えるのが醍醐味だと思います」(progfayさん)
水木さんは、「普段コードを書いている中では知ることができないことも学べ、ちょっとずつ自分のできることが増えていくのが面白いところです。普段の業務では使わない新しい計測ツールを使うため、セットアップから苦労しながら、それを自分なりの手順書にまとめたりするのが面白いですね。また、ISUCONでは普段触らないミドルウェアが使われることもあり、そういうのにいかに早く対応していくかも面白いところです」と述べています。
楽しいから、勝ちたいからという動機から切磋琢磨することで、個々のエンジニアのレベルアップにも確実につながっています。
「頭では分かっていたり、教科書的に理解していることでも、実際にアウトプットとして出せるかというとまた別の話です。そうした実力やスキルが定量的に点数として現れるところが、ISUCONの面白いところですし、ある意味残酷なところです。その分、フィードバックに対する成長度合いも大きいように思います」と砂川さんは述べています。
そして、業務に直接生かせる部分も多々あると指摘しました。「時間の制約がある中で判断を迫られ、間違えずに対応することがISUCONでは求められますが、日々の業務で起こった障害対応でも、早期復旧が求められるプレッシャーの中で正しい選択をしていくという、まったく同じことが求められます。その訓練にもつながるといいなと感じています」(砂川さん)
ただ、やっぱり根底にあるのは「楽しい」ことでしょう。一人で黙々と勉強するよりも、こうした場において、チーム内で、あるいは時に他チームともあれこれ意見を交わしながら取り組むことで、楽しく学ぶことができるのですから。
当日、直前まで準備に取り組んだ古川さんは、「やる前はもうこれで終わりにしようと毎回思うんですが、始まってみると、皆がわいわいする雰囲気はもちろん、パフォーマンス改善のスキルが上がっていくのもうれしくて、なんだかんだで面白いんです。何より、リクルート全体でこうした活動を行うタイミングはあまりないので、ある種のお祭りとして、定期的にやっていけるといいなと思います」と述べています。若い新たな力が実力を発揮した今回を踏まえ、次回のR-ISUCONもますます楽しみです。