Algoage Tech Blog

Algoageの開発チームによる Tech Blog です

社内ISUCONを開催した話。実践を通じてパフォーマンス改善の知見を学ぶ利点とは

ISUCON(イスコン)とは「Iikanjini Speed Up Contest(いい感じにスピードアップコンテスト)」を略したイベント名です。 ISUCONでは「お題となるWebサービスを、決められたレギュレーションのなかで限界まで高速化するチューニングバトル」が繰り広げられます。パフォーマンス改善の結果はスコアとして表示されるため、参加者たちは自分たちの取り組みの良し悪しを定量的に把握できることが特徴です。

株式会社Algoageの開発チームでは、スキル向上を目的として社内でISUCONを実施しました。今回はISUCON開催の経緯やそこから得た学びについて、エンジニアの若菜実農(さねあつ)と石塚大策、纐纈優樹、Qurage、そしてスクラムマスターの日高尚美にインタビューしました。

原因調査や障害対応のスキルを体系的に習得する

――社内ISUCONを開催した経緯について教えてください。

石塚:Algoageの開発チームでは、アプリケーションのデプロイを毎日行っています。そして、フルタイムで働くメンバーは運用を持ち回りで担当しています。デプロイ中やその後に意図せず障害やシステムの高負荷が発生した場合などに、原因を特定して対処するスキルが必要だという共通認識をメンバー全員が持っていました。

とはいえ、こうしたスキルを習得する機会はそれほど多くありません。「全員がレベルアップするにはどうしたらいいだろうか?」という話をスクラムイベントでしていたところ、「ISUCONを実施するといいんじゃないか?」というアイデアが出てきました。

問題を一から用意するとかなり大変なので、2022年8月27日に本選が開催されたISUCON12の問題をそのまま流用することに決めました。

<ISUCON12の概要>

ISUCON参加者たちは、育成型放置ゲームの運営企業の社員という設定。このゲームが3周年を迎え、より多くのユーザーを集めるためにテレビCMを放送する。膨大なトラフィックがゲームのサーバーに集中することが予想されるため、サーバーのパフォーマンスチューニングを行って負荷対策をするというストーリーになっている。

若菜:社内ISUCONは2023年8月21日(月)から25日(金)までの5日間にわたり実施しました。予選を月曜日から火曜日にかけて実施し、本選に水曜日から金曜日まで取り組むという流れです。開発組織のメンバーを2つのチームに分けて、それぞれのチームにインフラとバックエンド、フロントエンドに詳しいメンバーが均等に配分されるようにしました。

――ISUCONを実施する期間に、プロダクト開発を一時的にストップすることになります。ビジネスサイドからの理解は得られましたか?

日高:私たちの場合は、すごく好意的に受け入れてもらえました。みんなのスキルが向上して障害対応などがよりスムーズになるならば、投資する価値があると思ってもらえたためです。加えて、プロダクトの開発や運用に影響を出さないための配慮として、お盆明けのなるべく余裕のあるタイミングを選びました。

若菜:ISUCONをその時期に実施するという周知は、イベントの2カ月前くらいからしていましたよね。

日高:それから、機能開発は1週間止めるけれど万が一システムの障害が起きた場合には即座に対応するとか、プロダクトに関する問い合わせなどはすぐに対応するようにして、事業に影響がないように進めました。

左から順に日高尚美、若菜実農、石塚大策

パフォーマンス改善の結果が点数としてわかるため、効率的な学習につながる

――ISUCONを通じてどのようなことを学びましたか?

石塚:普段、AWSのマネージドサービスなどを利用してインフラを構築していると、Webサーバーやデータベース、ロードバランサーなどの細かな設定を行うことはほとんどありません。ですが、こういった機会にそれらの設定を行うことで、学習の機会が生まれるのはとても良いと感じました。

纐纈:NginxやMySQLの設定などって、過去のISUCONに参加していた方々などがWeb上にノウハウをアップしてくれているんですよ。たとえば、こういうチューニングが効くとか、こういうパラメーターを調整すると良いといった知見を書いてくださっています。

今回の私たちがそうだったんですが、そういった過去のISUCONの問題を解いた方々の“秘伝のタレ”を調べて適用しながら、パフォーマンス改善の知識を実践的に習得できます。手を動かしながら学べるので、かなり効率が良いと思いました。

Qurage:ISUCONの良い点として、スコアが表示されることが挙げられます。普段の開発や運用のなかでは、自分たちの実施したことによって何かが改善した・していないという結果を定量的に測ることは難しいです。ですが、ISUCONならばゲーミフィケーションを通して、自分たちのやったことがシステムにどう影響を与えたのかがすぐわかります。

今回の社内ISUCONでは、エンジニアにとっての基礎知識である「開発環境の整備」「ログを読んで内容を分析すること」「計測をし、ボトルネックを特定して改善していくこと」などの重要性を再認識しました。ISUCONを通じて、そうした要素を学べるのは素晴らしいと思いましたね。これまで自分にとってISUCONは遠い存在だったんですけれど、この経験をしたことで「ISUCONめちゃくちゃ良いじゃん。また開催したい」と思いました。

纐纈:作業効率化が大事だという学びがありました。ISUCONではひたすらにベンチマークを出して、課題を特定して、改善を回してという作業を繰り返すので、頻繁に使うコマンドなどをすぐ出せるようにしておかないと、極端に効率が悪くなってしまいます。

業務のシステム運用のなかでも、作業の効率性をないがしろにしていると、相当な時間をロスしてしまうんだと肌で感じられたのが良かったです。それから、日々の業務のなかではスコアを競い合うような機会はないので、ISUCONに取り組みながらチーム同士で対決したことで、モチベーションが上がりました。

他には、計測の大切さが身に染みました。ISUCONで用意されているシステムには、パフォーマンスのボトルネックになる点が大量に存在しています。ですが、やみくもにパフォーマンス改善のための施策に取り組んでも、全くスコアが上がらないんですよ。計測をして、真のボトルネックを特定していかなければ何も効果が出ません。それを、スコアとして可視化してくれるのが良かったなと思います。

次回に向けての改善案

――社内ISUCONを次回も開催するならば、改善したい点はありますか?

纐纈:今回、私たちはISUCONのために5営業日も確保できたので、予選の段階で「ISUCONはこういうもので、こういう要素が大事なのか」ということを学ぶための時間がありました。でも、それほど期間を確保できない場合は、事前に各々がISUCONの概要や実施すべきことの基礎知識をインプットしておくべきだと思います。そうしなければ、環境構築や調査などに時間を奪われてしまい、学びが少ないままイベントが終わりそうです。

Qurage:もし次回開催するときにまるまる1週間を確保できないならば、たとえば1日目はチュートリアルのための時間にして2日目以降に課題を解くような感じにしますかね。みんなの認識を合わせたうえで課題に取り組むと、比較的スムーズに進むと思います。

日高:私はエンジニアではない立場としてISUCONのチームに参加していたんですが、エンジニアのみんなはすごいことをやっているんだという尊敬や感謝の念が湧いてきました。そして、開発や運用の流れなども理解できたので、もし余裕があれば開発チーム以外の人たちもISUCONを観戦できるようにしておくと、システムやエンジニアのことを学べてすてきだなと思いました。

Qurage:エンジニアたちが何をすべきか途方に暮れているときに、日高さんが気軽に「やっちゃえやっちゃえ」と声をかけてくれて助かりました。こういう応援のコメントがあることで、気が楽になるんですよ。

若菜:それから、エンジニアがISUCONに注力できるように、期間中開発チームに来た問い合わせを日高さんがさばいてくれたのも助かりましたね。私たちは他のことにマインドシェアを取られずにISUCONに集中できました。

纐纈:次回も開催するならば課題を解いた後の振り返りも入念に実施したいですね。学びを最大化するために、ISUCON終了後にみんなで解説や講評を見て、改善案を出す場を設けたいです。

若菜:たしかに過去に開催されたISUCONでは、運営チームが解説や講評を用意してくれているので、それに倣って振り返りをしたいですね。

石塚:他にも、環境構築などの作業をできるだけスムーズに終えられるような仕組みを用意しておきたいです。そうすれば、仮に次は1週間のイベント期間を確保できなくても、本質的な改善作業に時間を使えると思います。

左から順にQurage、纐纈優樹

ISUCONに取り組むことで得られた成果

――開発組織が通常のプロダクト開発だけではなく、社内ISUCONに取り組むことでどのようなプラスの効果があると思いますか?

纐纈:システムの課題をなるべく素早く特定して改善するという経験を積めることが大きいです。以前、APIサーバーのソケット数が上限に達しており、リクエストをさばけないという障害が本番環境で起きたことがあります。当時の私はそもそもそういった事象が発生し得ることすら理解していなかったので、何が起きたかわからず困っていたんです。

でも、ISUCONに取り組んだことでミドルウェアの設定やアプリケーションの実装方法などについて幅広い知識が身につきます。頭のなかに索引ができるというか。何かシステムのトラブルがあったときに、どのような原因なのか当たりをつけやすくなると思っています。

それから、プロダクト開発の業務以外にこういった社内ISUCONのようなイベントがあることで、仕事にメリハリが出ると感じています。お祭り的なイベントがあるほうが、前向きな気持ちになれますね。

石塚:ISUCONで改善の対象となるシステムは、良くないコードの書き方が意図的にされています。無駄なSQLを発行していたり、意味のないループをしていたり。そういったコードを見たからこそ、普段の業務でコードを書くときにも「マズい書き方になっていないかな」と意識するようになりました。また、結果がスコアとして表示されるので、実際にそのISUCONに出たチームと値を比較することで自分たちの相対的なスキルがわかるのも面白いです。

Qurage:エンジニアのなかには、ISUCONで取り扱っている技術になかなか触れる機会がない人もいると思います。私自身も、普段はフロントエンドの開発がメインなので、インフラの設定をいじるのは何年ぶりだろうという感じでした。そういう人にとって、ISUCONは技術的な関心領域を広げる良い機会になると思います。パフォーマンス改善の結果がスコアリングされることで、楽しみながら各種の技術に触れられるからです。

若菜:ISUCONに参加する前は、自分がどれだけチームの力になれるのか不安でした。でも、ISUCON関連の書籍や過去の問題などを読んでいると、できることはたくさんあると感じました。マニアックな知識を習得したスペシャリストでなければISUCONに挑めないかというと、全くそんなことはありません。肩の力を抜いて気軽に参加できるイベントでした。

それから、模範解答などを見て復習すれば、自分自身の技術的な幅を広げることができます。業務において何かの調査やシステムの改善などを行う際、基本的には自分の持っている知識の引き出しのなかから案を出すことになります。その選択肢を増やす意味でも、ISUCONは有益だと思います。

日高:開発チームのみんなが、前向きな気持ちでISUCONに取り組んでくれたことが何よりの成果でした。それに、これから採用面接を受けてくれる方々に「Algoageは、エンジニアが楽しみながらスキルを向上させるための取り組みをしています」と胸を張って伝えられるのも、プラスになると思っています。