面白法人カヤック SREチーム
藤原俊一郎さん(@fujiwara)
ISUCON12の作問とポータルを担当。ISUCONでの優勝歴4回、出題歴3回。趣味はOSS、ランニング、写真(カメラ)、料理、酒、プラモデル。最近はマネージドサービスの隙間を埋める、隙間家具のようなツールを作ってOSSにすることにハマっている 書籍『みんなのGo言語』(技術評論社) 『達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践』(技術評論社) を執筆
パフォーマンスチューニングの成果を競うコンテスト『ISUCON』。第12回となる今年は7月23日に予選、8月27日に本選がともにオンラインで開催される。
今回作問を担当するのは、昨年の優勝者・藤原俊一郎さんが率いる面白法人カヤックと、サイバーエージェントの2社。各社が1問ずつ問題を作り、予選、本選で出題される。どちらの問題が予選、本選で出題されるかは、当日のお楽しみだ。
一体どのような問題を準備しているのか。面白法人カヤックの藤原俊一郎さんと、サイバーエージェントの白井英さんに聞いた。
面白法人カヤック SREチーム
藤原俊一郎さん(@fujiwara)
ISUCON12の作問とポータルを担当。ISUCONでの優勝歴4回、出題歴3回。趣味はOSS、ランニング、写真(カメラ)、料理、酒、プラモデル。最近はマネージドサービスの隙間を埋める、隙間家具のようなツールを作ってOSSにすることにハマっている 書籍『みんなのGo言語』(技術評論社) 『達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践』(技術評論社) を執筆
株式会社サイバーエージェント SGE統括本部
白井 英さん(@goodoo)
ISUCON12の作問を担当。サイバーエージェントのゲーム・エンターテイメント事業部所属。ISUCONは第5回から参加(数回ほど応募受付〆切に間に合わず不参加)。ロボットペットを「ちょこ」と名づけ可愛がっている
ーーまずはお二人のISUCON出場歴について教えてください。
藤原:1回目から参加しています。1、2、5、11回目で優勝しまして、問題の出題は今回が3回目です。
白井:僕は第5回から参加しています。毎回出場しているわけではないですし、決勝出場経験もないですが、今回問題を作る機会をいただきました。
ーー今回お二人が問題を作るのは、どういう経緯なのでしょう?
白井:社内活性化の意味で社内ISUCONを企画し、自分で問題を作り、社内のメンバーに解いてもらったことがありました。それを知ったISUCON運営メンバーからお声掛けいただいたのがきっかけですね。
藤原:ISUCON後のアンケートに「誰に問題を出してもらいたいか」という項目があるのですが、前回は優勝したこともあり、名前を上げていただきました。
うちも社内ISUCONを何度かやっていて、今年の新卒研修の最後にも実施しています。出題経験もある方なので、面白い問題ができるといいなと思っています。
白井:皆さんきっと、藤原さんが作る問題を心待ちにしていると思います。藤原さんの問題を解きたい参加者の方は大勢いるでしょうね。
藤原:プレッシャーですね(笑)
ーーでは、本題の「今年の出題傾向」について伺いたいです。ズバリ、どのような問題になるのでしょう?
藤原:まさに今作っているところですが、いろいろな解き方ができる問題にしたいと思っています。
システムのチューニングは、他をどれだけ速く直しても、遅いところが1カ所あると、そこに引きずられて全体が遅くなってしまう特性があります。なのでボトルネックを解消しない限り、他でどれだけすごい工夫をしてもあまり意味がない。
ゆえに、ボトルネックを解消して、また次のボトルネックを解消して……と、どうしても順番に問題を潰し、そのスピードが一番速い人が勝ち、みたいになりがちです。
それはそれでパズル要素があって面白いものの、せっかくISUCON用にシステム全体を丸ごと作って、「そのスピードを速くしてください」というお題を出すわけなので、「人によって違う解き方ができる」要素を入れたいと思っています。
順を追うことはある程度必要でしょうけど、例えばサービス上のサーバーが複数あったとしたら、そのサーバーをどう使うか、それぞれどの役目にするかなど、チームごとに工夫ができるような問題にしたいですね。
白井:僕は藤原さんから「過去の業務ではまった落とし穴的なところを問題に入れ込むといいのでは」とアドバイスをいただきました。なので、そういう要素を散りばめながら作ろうとしています。
参加者の皆さんも、普段の業務ではまったところをおさらいするといいんじゃないかと思います。
ーー今年は各社でそれぞれ問題を作ると伺いました。どのように作成を進めていますか?
白井:チームメンバーは5名で、黙々と作っています。絶対に問題が漏れないよう、画面を見られたり会話を聞かれたりしないよう、限られたメンバーでこっそり取り組んでいます。
一方、Slackでは作問チーム全体の様子が分かるので、「カヤックさんはこういうところに気を付けて作っているんだな」など、参考にさせてもらっていますね。カヤックさんがバリバリ問題を作っていると焦りますが(笑)
藤原:うちも4名で作っていて、全体の構成やボトルネックの仕込み方などは全員で話し合い、方針を決めたら実装は各自で行っています。ウェブアプリケーション、それに対してリクエストを送り負荷をかけるベンチマーカー、画面の見た目など、それぞれ分担して作っていますね。
ーー今まさに作っている途中とのことですが、どのような点に苦労していますか?
藤原:難易度調整は非常に難しいですね。問題を作る側はコードを全て覚えるくらい時間をかけていますので、「ここは見た瞬間に分かるよね」みたいな感じになりがちです。
一方、参加者は当日初めてシステムとコードを見ますから、問題を見つけること自体が難しい。そこも含めての競技ではあるものの、どうしても難しくしがちですね。
問題を作る側として怖いのは、全員に全部の要素を解かれてしまうことです。とはいえ、難しすぎてスコアが上がらないと、やっている側がつらくなってしまう。
競技中はスコアが上がった瞬間だけが救いなので、ある程度スコアが上がるようにしつつ、チームごとに差がつくよう、バランスを取らなければいけません。
白井:競技として適切な難易度設定にしないといけないので、そこはずっとドキドキしてますね。「これでいいんだろうか……」って、多分当日までドキドキするんだと思います(笑)
藤原:あとは、どの辺の技術を問題の要素に入れるか、ちょっと悩みますね。最近は若い参加者が増えていて、僕と20歳くらい年齢差があったりもします。
当然、技術には流行り廃りがありますから、昔はポピュラーだったけど今はそうでない技術もある。若い人に馴染みのない技術を入れても、「こんなのあったね」とベテランが喜ぶだけになってしまいます。
とはいえ、現実のシステムには10年前から引き継いできたような技術も残っていて、全てが最新のシステムというわけではありません。そういう意味では、ある程度懐かしい感じがする要素が入ってもいいかなとは思いますけどね。
ーー参加者の幅が広いからこそ、全員にとってフェアであることも重要ですね。
藤原:そうですね。作問チームには若手メンバーもいるので、さまざまな視点から意見を取り入れることは意識しています。
ーーISUCONを制するために、抑えておくべきポイントはありますか?
白井:ISUCON本を勧めたいですね。過去のISUCONの猛者たちがポイントをまとめてくれているありがたい本で、作問チームでも参考にしています。その上で、過去問を解くのが一番分かりやすいと思いますね。
藤原:ちなみにISUCON本は今年の作問が決まる前に書き終えたものなので、今年の出題の直接的なヒントはありません(笑)
白井:あと、当日はマニュアルを読むことも重要です。僕は過去のISUCONで、ひたすらボトルネックを見つけてチューニングをしていたところ、スコアリングは別のポイントだったことがありました。点数を見ておかしいと気づくまで、もったいないことをしてしまった。
特に最近は単純にサイトのパフォーマンスを上げるだけでなく、「何のためのサイトなのか」を踏まえたスコアリングになっていることも多いです。マニュアルを読むのも勝つために重要になってきているように感じます。
藤原:僕が一番心配なのは、せっかく出場したのに何もできず、8時間が終わってしまうこと。参加するからには、何らかの作業をして、スコアが上がる経験をしてもらいたいと思っています。
そのためには、一度でもチームで手を動かすことが大事です。当日は環境も問題も初見ですから、ISUCONに慣れていないとちょっとした変更に1〜2時間かかってしまうこともある。
結果として問題に取り組む時間がない、なんてことが起こり得るので、チームで過去問を解いてみるなど、一度でも予習をしておくと当日がだいぶ違うと思います。
ーーチームワークもポイントだと思いますが、アドバイスはありますか?
藤原:予選通過や優勝は、チームワークが良くなければ絶対にできないと思います。過去には一人で優勝したとんでもない人がいますけど、それはさておき、複数人で一つのものをいじる以上、チームの連携は必須です。
僕が過去に優勝した時は、会社のメンバーと出場していました。気心が知れているし、相手の得意分野もわかるのは大きい。
逆に9回目に予選落ちをした時は、会社のメンバーではない人と組んでいました。お互いに遠慮があって、チームをうまく動かせなかったなと思います。
ーーチームワークを良くするコツがあればぜひ伺いたいです。
藤原:やはり練習だと思います。一つのコードを複数人でいじる共同作業なので、最初はどうしてもギクシャクしてしまう。一度でも一緒にやっていれば、癖や得意・不得意も分かりますからね。
白井:僕が過去に参加した時は、最初に役割分担を決めてから臨んでいました。午前中にマニュアルを読んで、役割分担を決め、漏れがないようにやっていましたね。
とはいえ最後はわちゃわちゃするので、「ありがとう」「これやっておいたよ」など、その場の状況に応じて分担する感じを楽しんでもらうのもいいんじゃないかと思います。
ーー改めて、ISUCONで得られる経験とは何でしょう?
白井:ISUCONは、エンジニアとしての自分を振り返れる競技なのかなと思います。8時間という限られた時間の中で、みんなで協力してチューニングをする。それは仕事の仕方にも通じるところがあって、普段の仕事の癖が出ますし、苦手なこともはっきり分かります。
藤原:ISUCONは限られた時間でいろいろなことをしなければいけないので、普段やっていないことや未経験のことはまずできません。検索して対処法をひろったとしても、それで性能の改善にまでつなげるのは難しい。
そういう意味で、できないことが分かりやすいというのはありますね。普段の仕事とISUCONの技術領域が被っていなければ仕方がないですが、そうではないのに手が動かなかったとしたら、普段やっていないから動いていないのかもしれません。
ーー自分の実力がはっきり出るわけですね。お二人は過去にISUCONに参加したことで、自身の苦手分野に気付いた経験はありますか?
白井:これを言うとエンジニアとして負けかもしれないですけど、若手とチームを組んで、自分のコーディングスピードが圧倒的に遅いことが分かりました(笑)
白井:逆に、プログラムを読んで「ここ怪しいんじゃない?」みたいな勘所は、やはり経験から来るものなのでまだまだ負けていないなという発見もありましたね。
藤原:僕はSREとしてインフラに近いところを見ているので、やはり複雑なコードを一発で書き上げて大改造するような力は、他のメンバーには及ばないです。ただ、全体をモニタリングしたり、遅いところを見つけて指示を出したりといった役割は得意ですかね。
ーー自分の現状を確認する良い機会になりますね。最後に、お二人にとってのISUCONの魅力を聞かせてください。
白井:同じ条件、同じ制限時間で、エンジニアとしてガチの技術勝負ができること自体が面白いですよね。業務でプログラミングはするけれど、他人と競うことはないですから。
チューニングはベテランの方が有利だと思っていたのですが、最近の傾向を見ると学生が優勝したりもする。若者もベテランも同じ土俵で戦えるという意味で、みんなに等しくチャンスがあるのが醍醐味ですね。
藤原:パフォーマンスチューニングは仕事でやっていることではありますが、仕事だと制約が大きいですよね。扱うコードベースは膨大で、簡単に高速化はできない。何日、何週間とかけてようやく少し改善できた、みたいなことすらあります。
一方、ISUCONの場合は足を引っ張るようなコードが意図的に入っているので、クリアすればある程度のところまでは点数が上がるようになっています。「チューニングして速くなった!」という感覚が、仕事よりも味わいやすいのが楽しいところ。
それに、チューニングできなくても、できなくても、8時間後に向けて全力で走ればいい。確実に8時間で終わるのが良いですよね。仕事だと先が見えないことも多いですから(笑)
白井:第12回のISUCONも皆さんの期待に添えるよう頑張っていますので、当日はぜひ楽しんでほしいですね。
藤原:ちょっとでも「楽しかった」と思って帰ってもらえるような問題を準備しようとしています。そのためにも、特に初参加の人は最低限準備をしてもらえるとうれしいですね。初心者向けの座学はアーカイブの資料と動画があるので、準備を整えた上で、時間いっぱい楽しんでもらえたらと思います。
取材・文/天野夏海
詳細はオフィシャルページをご確認ください。
>>『ISUCON』オフィシャルページ
<運営>
LINE株式会社
<出題>
今年の出題企業は「面白法人カヤック」「株式会社サイバーエージェント」です。
予選にはAWSを利用し、本選では「株式会社ドワンゴ」にインフラ提供をいただく予定です。
最新情報は公式Twitter(@isucon_official)より随時発信中!
本コンテストに関するお問い合わせはISUCON運営事務局 (dl_isucon_sponsor@linecorp.com)までお願いいたします。
NEW!
NEW!
タグ