ISUCON×gihyo.jpスペシャル

ISUCON12を獲るのは誰だ?!ISUCON予選突破注目チームに迫る!

12回目を迎えたISUCON12、30チーム84名が本選に出場

12回目を迎える、エンジニアたちのチューニングバトルISUCON12。去る7月23日にオンライン予選が開催されました。今回は全698組(1,657名)が参加し、この中から上位30チーム(84名)が本選に進むことになりました。

いよいよ本番が迫る中、今回、gihyo.jpが注目するいくつかのチームに事前メールインタビューを行い、本選に向けた意気込みとISUCON12にかける想いを聞きました。

ISUCON公式Blog
URL:https://isucon.net/

前回準優勝チーム、本選出場者や学生チームへ特別インタビュー!

今回、インタビューを実施したのは、

  • 予選得点トップ5チーム
  • 本選出場経験者在籍チーム
  • 学生チームとして本選出場上位チーム

の3つのカテゴリです。中には、前回惜しくも優勝を逃したチームや学生だけで構成されたチームなど、多様なチームのメンバーにインタビューを実施しました。

今回の共通質問は次の4つになります。

  1. 今回の予選課題が発表されて、最初に感じたこと、また、具体的に取り組むに当たってどのような方針でスタートしましたか。
  2. 決定した方針を進めるにあたって難しかったこと、チームとして工夫したことがあれば教えてください。
  3. 本選に向けての意気込みを一言!
  4. ISUCON本(⁠達人が教えるWebパフォーマンスチューニング~ISUCONから学ぶ高速化の実践⁠)はお読みになりましたか。お読みになった方は感想を教えてください[*]

予選得点トップ5チーム

まず、予選得点上位5チームを紹介します。

第7西東京市(スコア:86740)

人数 3名
メンバー whywaita、icchy、See me?
プロフィール 学生時代の友人同士で構成されたチーム。チーム名の由来はメンバーが所属するCTFチームTokyoWesternsからと、毎年数字をインクリメントさせています。ISUCON8の優勝チーム「最大の敵は時差」と同じメンバーで、当時としては初となる学生チームでの優勝を果たしました。そろそろもう一度優勝したい。
①の回答

マルチテナントアプリケーションということでどのようなテナント分けを実現しているのかなというのが争点になりそうだなと思っていました。まさかSQLiteだとは思いませんでしたが(笑)

ただ、どんな問題であっても具体的な取り組み、とくに初動に関してはほぼ同じように進めています。確認とかせずに「これやります」の声かけだけで進む感じですね。サーバを用意しつつMakefileを配置したり計測環境を整える人、マニュアルを読み込んでスコアの傾向を計測したりNG条件を確認する人に分かれることが多いです。

②の回答

我々のチームは早い段階でSQLiteを廃止して全てMySQLに移行する方針で進めたのですが、結果としてこの作業を完全に終わるまで5時間ほどかかってしまいました。8時間の競技時間の中で半分以上の時間を使ってしまうのは精神的にもかなり苦しい作業で、途中は予選敗退も濃厚だと感じていました。

ただ、3名中移行作業を行っていたのは2名で、残りの1名はアプリケーションのコードを読みながら「ここは直すべき」というパッチを貯めていてくれました。これが移行成功後も継続的にスコアを上げられた大きな要因だと思います。

③本選に向けての意気込みを一言!

上手く戦略がハマって予選の1位になることができましたが、本選でも同じように戦い抜ければと思っています。

予選突破の上位25チームに入ることと本選で1位になることは違う戦略を採ることも多くあると思います。今回は初めて予選1位突破することができたので、同じ戦略で本選1位を狙っていきます!!!

④の回答

(whywaita:中西)が筆者の1人です。

自分が担当した箇所もそうですが、⁠自分は知っている」と思っていた分野や知識であってもISUCON本として読み直してみると意外と抜けていたり知らなかった部分があり、改めて勉強になるなとレビューの段階で感じていたりしました。

利用されるプロダクトが少し変わろうとも考え方の部分は変わらないため、今回のようにSQLite問題であっても十分に効果のある本になったなと自画自賛してしまいました。

シン・ウー馬場ーイー2(スコア:75800)

人数 3名
メンバー ishikawa84gmatsuunetmarkjp
プロフィール ISUCON1から参加しているインフラエンジニア3人組。インフラにめっぽう強い。SELinuxはEnforing、AppArmorはEnforceが信条。今年はRust言語で挑戦したが、rust-analyzerとcargo buildで競技サーバがメモリ不足に陥り競技開始82分後に急遽Go言語に切り替え。ISUCON本を片手に本選出場。
①の回答
動画の出来が凄すぎたのとナレーションがあまりにいい声だったので内容が頭に入ってきませんでした。方針については毎年同じで、ボトルネックにのみ着目してOODAループを回しつづけています。ISUCON本はいいぞ。
②の回答
今年の問題は改善の余地としてさまざまな選択肢があり、本当に取り組むべきボトルネックはどこかを見極めるのが重要だったと感じています。過去の経験で培ったボトルネックを見極める「観察力⁠⁠、INSERTでエラーがでても無視するといった「大胆な割り切り⁠⁠、利用経験がないSQLiteでもベターな対応ができる「遂行力」が今回大いに活きたのだと思っています。ISUCON本はいいぞ。
③本選に向けての意気込みを一言!
インフラエンジニア3人で構成される私たちのチームはスターエンジニアを擁していないものの、地道な観察と奇想天外な発想力、抜群のインフラ力、チーム結成12年目のチームワークで補完して、優勝めざして頑張ります!そしてISUCON本はいいぞ。
④の回答
読みました。ISUCON本のおかげでWebパフォーマンスチューニング力が増して本選に出場できました!(注意:メンバーに著者がいます)

たつや(スコア:65721)

人数 2名
メンバー ryotarairrreeeyyy
プロフィール Webサービス企業SREで結成したチーム。もともと別チームでISUCONに参加していたが、ISUCON9からこのメンバーでISUCONに参加。今回が3回目の本選出場。
①の回答

最初に予選問題の動画を見た段階で、⁠マルチテナントということはシャーディングが効きそうだね」という話をしていましたね。予選が始まってからはまずSQLiteをどうするか、議論しました。結論としてはスケールアウトするときにSQLiteだと困る可能性がありそう、MySQLのほうがメンバーが使い慣れているという点から、SQLiteからMySQLへの移行を開始しました。

ISUCON12公式サイトで解説されているようにSQLiteのままシャーディングするのもありだったようです。ただ、予選開始直後でアプリケーションの理解が浅い段階では判断ができず、とりあえずMySQLを使うことにしました⁠⁠。

②の回答

愚直にMySQLに移行すると(flockはtransacationに書き換えていました⁠⁠、スコアをアップロードするところでデッドロックが発生するようになってしまいました。初期実装では全部DELETEしてINSERTし直す実装になっていましたが、DELETEせずINSERTのみし、読み込み側で最新のスコアのみを読み込むようにすることでこの問題を回避しました。

また、他チームの話によれば、MySQLを初期データに戻す際にDROP TABLEして初期データを流し込むとinitializeが間に合わなかったようですが、私たちのチームではベンチマーク中に追加されたデータのみDELETEするようにしたため問題になりませんでした。

その他、私たちのチームでやったことはISUCON12に参加して予選3位でしたにまとめています。

③本選に向けての意気込みを一言!

昨年は予選で敗退し非常に悔しい思いをしたので、今年は本選優勝を目指して頑張ります!

④の回答

バックエンド・インフラのチューニングの基本が知りたい人におすすめの本です。⁠ISUCON本」と呼ばれていますが、ISUCONに限らないトピックも多く書かれているのでISUCONに参加してない方にもおすすめです。

@ryotarai による書評がISUCON本はISUCONやらないひとにもおすすめにあります。

theorem(スコア:53751)

人数 3名
メンバー mokemoko、dpforest、 sorao
プロフィール 社内ISUCONでチームを組んだのをきっかけに同じメンバーで本家にも参加するようになり、ISUCON8から毎年参加しています。1人は途中で会社が変わり、残り2人も普段は業務での関わりがほぼないので、ISUCONが近況報告がわりにもなっていたり(笑⁠⁠ 本選は3年ぶり2回目の出場になります。
①の回答

近年は予選でもアプリケーション自体の仕様が難解で、それを理解するのに時間がかかることが多い傾向があると思います。

それが今回は非常にシンプルでわかりやすいなと感じた(マニュアルも短かったですし)のですが、逆にそのぶんSQLiteという新要素の特異さが際立っていたなという印象でした。

方針としては毎回午前中は本格的な修正には手をつけずに準備・調査に注力するようにしており、今回もそれを踏襲していました。

前述のとおり仕様がシンプルだったぶん、コードの読み込みに集中できたので普段よりコード全体を把握したうえで午後に臨めたのではないかと思います。

②の回答

今回戦略上一番の分岐になったであろうSQLiteの扱いついて、自分達のチームではMySQLへの移行を選択したのですが、その作業が想定よりも大変だったので途中ヒヤヒヤした場面はありました。

とくに初期データの移行はスクリプトの実行に単純に時間がかかっていつ終わるか不安になったりもしましたが、移行時点で不要データの削除も先行して行っていたことで他のチームであったようなinitializeで時間がかかるような問題は踏まずに移行後の反映はスムーズに行うことができました。

また、移行作業に時間はかかりつつも、移行を前提とした修正作業を裏で並行して進めることができ、誰かの修正反映待ちをするような時間はほぼなかったのでうまく作業分担できていたのかなと思っています。

③本選に向けての意気込みを一言!

3年前の初出場時は途中かなり良いスコアを出せていたのですが、最終的にはベンチが通らず失格となってしまったのでまずは正のスコアを記録すること。

そのうえで、出場するからには優勝を目指して頑張りたいと思います!

Takedashi(スコア:52957)

人数 3名
メンバー こたまごまーすmisodengaku
プロフィール 「竹田氏」⁠Mr. Takeda」⁠Takedashi」などとチーム名を変えながらISUCONやSECCON CTFなどのコンテストに出場しています。竹田さんがチームメンバーにいたことはありません(笑⁠⁠ ISUCONにおいては同じメンバーで出ています。真面目にやるを方針にぶっつけ本番でやっています。

ISUCON5(予選12位、本選failで失格⁠⁠、ISUCON7(予選7位、本選6位⁠⁠、ISUCON8(予選8位、本選2位⁠⁠、ISUCON9(こたまご、misodengakuが問題作成⁠⁠、ISUCON10(予選ランク外⁠⁠、ISUCON11(予選ランク外⁠⁠、ISUCON12(今回)
①の回答

まさかのSQLiteか!と思いました。

見た瞬間にSQLiteをやめるか、複数のサーバにSQLiteを分散させるか、Litestreamなどでリードレプリカするか、どれかかなぁと思いました。

まずはSQLiteのファイル構成には手をつけない範囲で改善を進め、SQLiteの扱いをどうするかはしばらくそれ以外の部分での改善をしてから決定することにしました。

②の回答

序盤のインスタンスセットアップやパフォーマンスの計測の準備中に、思いつく改善点をできる限りまとめてSlackやGoogleドキュメントにまとめてチームに共有できるようにしていました。

また、思いついた改善点にすぐに手を付けるのではなく、できる限りボトルネックを特定してからパフォーマンスの改善を行うようにしました。

予選突破が目標なので、リスク管理としてハイリスクハイリターンな改善も行わないように心がけました。最後は1時間程度余裕をみて改善作業を終わらせ、systemdの設定チェックや再起動試験をし、万全の状態で終了できたと思います。

③本選に向けての意気込みを一言!

これまでの最高が2位でしたので、今回こそ1位を取りたいと思います。

④の回答

Webアプリケーションのパフォーマンスチューニングは分野が広く網羅的に知見を得ることは難しいと感じています。

この本はどんなチューニングするにはどのような分野に関わる必要があるかのインデックスを提供してくれることが大きなメリットだと感じました。

レビュー動画も作成しています。

本選出場経験者在籍チーム

次に、過去本選出場経験があり、今回予選を突破したチームを紹介します。

NaruseJun(スコア:33089)

人数 3名
メンバー とーふとふsekaitakashi
プロフィール NaruseJunは大学時代のサークル仲間で構成されたチームです。NaruseJunとしてはISUCON7から参加していますが、このメンバーでの参加は今年で3回目となります。利用言語はGolang、全員が計測もアプリもインフラもやるという戦略でISUCON11では2位入賞をしています。
①の回答

問題動画を見た時点では「今回もメタISUCONっぽい問題だ!」⁠マルチテナントが問題のキモになりそう」という話をしていました。初動の測定の後は、SQLiteのままでは自分たちの用意していた計測環境ではDB(SQLite)の負荷とアプリの負荷を正しく分離して分析できないことと複数台構成にする際の障壁になりそうということでSQLiteをMySQLに乗せ換えるという方針で進めることにしました。

②の回答

アプリ的なSQLiteからMySQLへの乗せ換えは比較的順調に完了したのですが、一部のデータ量が多いテナントの初期化を時間内に終わらせることに手間取ってしまいました。

MySQLへの載せ替えはsekaiにほとんど任せてとーふとふとtakashiはNginxのログやソースコードからわかるこまごまとしたボトルネックを修正していました。チームの戦略として、飛び道具的な大きな変更と小さく着実に改善される変更を並行して進められたのは良かったと思います。

③本選に向けての意気込みを一言!

今年もサークルの後輩が多く本選に出場しています。自分がサークルにISUCONを広めたので嬉しいとともに後輩には負けられないプレッシャーも感じています。本選での直接対決は実は初めてなので優勝して先輩の威厳を見せたいです!(とーふとふ)

前年は惜しくも2位であったので、今年は優勝できるよう頑張ります!(takashi)

ISUCON出場は今回で6度目になりますが、今年こそ悲願の優勝を掴み取ろうと思います。ガンバルゾ(sekai)

④の回答

Webサービスの高速化について体系的に学べる本でとても良かったです。ISUCON的には自分たちが競技中にやっていることの正しさを再確認できました。予選中は手元にお守り的に置いていました笑(とーふとふ)

雑草係(スコア:27084)

人数 3名
メンバー ましさんぽしとさ
プロフィール こんにちは、雑草係です。ISUCONは出場3年目で、去年は雑談係という名前で出場しており、本選では学生1位でした。全員同い年で、春に大学を卒業し、新卒1年目の会社員となりました。なので、今年は社会人枠です。若さと体力と愛嬌を武器に頑張ります。
①の回答

最初に気になったことは、Lockの重さと各tenantごとに作成されているSQLiteのファイル存在でした。

一通り競技の準備が終わった後にSQLiteをMySQLに移行するかしないかの話し合いをしましたが、明確にボトルネックになってからでも移行は遅くないと判断しまずは目の前のボトルネックを1つずつ改善することに集中することにしました。

最終的に初期化処理でミスをする可能性が高そうということと(移行スクリプトの存在に気がついていませんでした⁠⁠、SQLiteのままでもスコアは上昇していたため移行を行わずそのまま改善を行う方針で取り組みました。

②の回答

SQLiteのままアプリケーションサーバの複数台構成を試みたのが一番苦戦し、結果的に断念しました。基本的にはtenant_idによってサーバを振り分け、複数のテナントを跨ぐAdmin系APIは他のサーバーへリクエストを送り結果を結合する形で対応しようとしましたが、残り時間でこの大工事をバグなしでやり切れないと判断しました。

ボトルネックを順にどんどん解消していくという方針を進めるために、3台あるサーバを各々が使い分けてアプリケーションをデプロイし、ベンチマークにより動作確認を進めていました。

③本選に向けての意気込みを一言!

僕たちはISUCON本選のために、この1年間汗水をたらして、雨の日も風の日も雪の日も練習を積み重ねてきたような気概と気迫とやる気は持っています。

新進気鋭の社会人1年目、お金がありません。ベテランエンジニアの皆さんにはぜひとも若い世代への投資と思って100万円を譲っていただきたいです。

焼肉ジャンボチキン(スコア:22883)

人数 3名
メンバー ichyo、krtx、natsugiri
プロフィール 学生時代の友人同士のチームで、チーム名の由来は学生時代よく行っていた食堂のメニューと家の近くにあった焼肉屋の名前を合体させたものです。ISUCON7から毎年同じメンバーで参加していて、本選出場は3回目です。序盤は調子が良いが中盤から後半で点数が伸び悩む戦い方をしています。
①の回答

オーソドックスな構成ながらもSQLiteが使われているのが特徴的で、これが問題の肝なのかなと感じました。

SQLiteは今までに扱ったことがなく、このまま複数台構成にするのも難しそうだったので、使い慣れたMySQLに移行する方針で始めました。

それと並行して、SQLiteのまま点数を増やせるような改善を入れていく方針でも進めていきました。

②の回答

MySQLに移行する方針は、変換スクリプトが用意されていたこともあって、そんなに大変でもないかと見積もっていましたが、データ量やNULLの扱いなどの問題があり想定より時間がかかりました。

終了1時間半ぐらい前にMySQLに移行できるようになりましたが、SQLiteのまま進めていく方針がある程度うまく進み、予選通過を狙えそうな位置に来ていたので、その後どちらで進めていくか迷いました。

最終的にはより安全そうなSQLiteのままの方針を採用することに決め、結果的に失格などもなく終わることができて良かったです。

③本選に向けての意気込みを一言!

過去の本選では途中まで良い調子で行きつつも失速したり失格になったりしたので、今回は力を温存して終盤で点数を伸ばせるように頑張りたいです。

④の回答

予選前に読みました。知らない分野や新しい知識が多く勉強になりました。付録Aなどで、private-isuを使って手を動かしながら読めるところも予選の練習に役立ちました。

学生チームとして本選出場上位チーム

最後に、学生チームの中から、予選スコアの上位から数チームを選び紹介します。

織時屋(スコア:31806)

人数 3名
メンバー oribeeiyatoki
プロフィール 東京工業大学デジタル創作同好会traPの所属メンバーによるチーム。今年結成されたチームだが、全員別チームでの本選出場経験あり。
①の回答

「まさかISUCONでSQLiteが使われるなんて」という驚きからスタートしました。予定どおりにしっかり計測して改善していく方針でスタートしました。ただ、SQLite周りはMySQLに載せ替えてから計測環境を整備すれば良いだろうという方針でしたが、載せ替え難易度の見積もり甘かったため、終盤になるまでalpやpprofの結果などからの推測で対処することになってしまいました。

②の回答

事前に用意してたMakefileによりインフラ構成や計測ツールも含めてリポジトリで管理が行えたので、同じ環境を複数台で維持することが容易でした。それにより、各インスタンスをそれぞれの試行錯誤で使用できたり、インスタンスの再作成からの現状復帰もスムーズに行えたりしました。

SQLiteやロック時間が長い実装、といった事前に想定していなかった要素に対しては新たな計測ツールの導入する発想にも至れなかったのは反省ポイントです。

③本選に向けての意気込みを一言!

予選は計測やコードの読み込みに反省点があったので、本選ではしっかりと改善していきたいです。個人的には、大技よりも簡単なやり方で着実に改善を積み重ねることを目標としたいと思います(eiya⁠⁠。

作成を担当したMakefileにより改善・計測のサイクルが快適に行えていたこと、当日の問題に応じての対処が弱かったことの2つの反省を踏まえて、本選ではより余裕を持って取り組めるようにしたいです(oribe⁠⁠。

予選ではSQLiteを使用したアプリケーションの特徴を上手く掴めずに、あまり点数に貢献することができませんでした。本選では落ち着いてコードリーディングをし、アプリケーションの仕様をよく理解して改善に取り組みたいです(toki⁠⁠。

穢翼のリーメス〜星空を超えて〜(スコア:23571)

人数 3名
メンバー Lelouch vi Britannia澤田なつ(みどり)
プロフィール 東工大デジタル創作同好会traPのメンバー3名で結成したチーム。2019年のISUCON10に初めて参加し、本選3位でした。昨年のISUCON11には作問チームのメンバーとして参加しました。今年は皇族と声優をチームに迎え、豪華布陣で100万円を狙っています。
①の回答

動画がかっこいいな~と思ってみていました。最近、肥大化の傾向にあったドキュメントがコンパクトになっていたので、シナリオを読み取るみたいな複雑なことは考えず、セオリー通りに重いところから順番に直して行こうと思いました。

初動としては、

  1. ドキュメントを読む
  2. 計測等諸々の準備
  3. 秘伝のタレを入れる
  4. ぱっとわかる(し、効きがちな)改善点(N+1やindexなど)を改善する
  5. 計測する

あたりがテンプレになってるので、その予定でした。

②の回答

真・デプロイスクリプトEX(改)を初めて本番で試したのですが、当然のように動きませんでした。手作業に切り替えればよかったのですが、なぜかずっとシェルスクリプトで遊んでいて、昼過ぎまで肝心の「重いところ」がわからず、予定していた初動とまったく違うことをやっていました。

上記の遅れに焦ってしまって、マクロな意思決定ができなくなってしまったことは反省点です。ryohaくんが溜めていた改善を試したら、いい感じに効いたので、なんとか立て直して予選突破できました。

今年のSQliteといい、ISUCON10のWebPushといい、ふだんやらないことのほうが楽しそうなので手を出しちゃいがちなんですが、できることから少しずつやることが大事だなと思い知らされました。

③本選に向けての意気込みを一言!

今年は G・A・C・H・I ⁠ガチ」で100万欲しいです。対戦よろしくおねがいします。

④の回答

読みました。⁠そうはならんやろ」がわかるようになります(=Webサービス開発におけるパフォーマンスチューニングの基礎が網羅的に学べると思います⁠⁠。

(買うか迷っている方に)内容に満足するかは、個人の知識量に依存すると思いますが、多くの方は買って損をしないと思います。ベンチマーカの作り方みたいな話がテキストの形で残っているものは少ないので、興味がある方にとってはそこだけでもおもしろいかなと思います。

快適PandA(スコア:20408)

人数 3名
メンバー das08、tinaxd、arakistic
プロフィール 大学の仲良し同期3人組のチームです。ふだんから一緒にプロダクト開発をしたり、ゲームをしたりしています。昨年のISUCON11に引き続き2回目の本選出場です。持ち前のチームワークで優勝を目指します!
①の回答

最初に目に付いたのが大量のsqliteファイルで、最終的にはこれをmysqlなどに移行しないとDBサーバの並列化ができず、スコアが伸びないんだろうなと思っていました。

DBのIndexや単純なN+1などから改善をはじめ、開始3時間後ぐらいにmysql移行にチャレンジし始めましたが結局うまくいかず、sqliteのままDBやキャッシュの最適化を行うことになりました。

②の回答

ふだんのISUCON練習から、各自の担当エリアを意識していたのでボトルネックを各担当に振り分けて改善していく方針にしていました。担当分けすることが難しいボトルネックを見つけた際は、手が空いてる人で案を出し合って方針を決めていました。

また、Discordで常に画面共有をして作業内容を共有したり、ときにはペアプロをしたりして、全員が作業内容を把握できるように工夫しました。

③本選に向けての意気込みを一言!

大学生の特権(?)である長い夏休みに入ったので、思う存分練習して本選で優勝したいと思います!(das08)
本選はとても楽しみにしています。エンドポイントの意味を考えながらチューニングできるようにしたいです!(tinaxd)
昨年の本選は悔しい結果に終わってしまったので今年は優勝します!(arakistic)

④の回答

ISUCON本は、出版記念イベントの「#ISUCON本学生プレゼント」でプレゼントしていただきました。ありがとうございました!

ISUCON本を読んでいて一番勉強になった点は、チューニング手法が体系的に解説されている点です。今までは独学で、ボトルネックに対するピンポイントな解決策を調べて実施していましたが、本の中ではそれが体系的にまとめられているので非常に勉強になりました。

ベンチマーカの実装方法についても書かれているので、今度自分の作ったアプリケーションに負荷をかけてチューニングしてみたいと思います。

takonomura(スコア:20115)

人数 1名
メンバー takonomura
プロフィール ISUCON9から同じメンバー構成で参加している学生1人チーム。使用言語はGo。ISUCON9で2位、ISUCON10優勝、ISUCON11では出題側として参加。
①の回答

ソースコードを見てみると、まずSQLiteが使われていることに気が付きました。しかも各テナントごとに別々のDBァイルとなっているので驚きました。 SQLiteからMySQLに移行することも考えましたが、初期データの扱いやデバッグを考えると移行がどのくらい手間であるか、どのくらいスコアが伸びるかわかりませんでした。1人チームなのもあり、そこに多くの時間をかけるわけにもいかず、SQLite のままでもうまくやればスコアを伸ばすことができるだろうと思い移行しない方針に決めました。

②の回答

SQLite のまま改善する方針では、どのようにして3台を効率的に使うかが課題となりました。そこで、この問題の大きな特徴でもあるマルチテナントであることを利用し、nginxでテナントホスト名の先頭1文字を元に振り分けるようにしました。

adminとisuconテナントのみ特別扱いとして1台に割り振り、他をほぼ均等になるように2台に割り振りました。しかし、この割り振り方では負荷が集まるテナントが偏りやすく、3台を有効活用できませんでした。早い段階で複数台に割り振る構成にしてしまったのもあり、後の計測も難しくなってしまいました。

③本選に向けての意気込みを一言!

本選に参加できることにはなりましたが、予選は後半あまりスコアを伸ばすことが出来ず反省点が多くありました。本選当日は、その反省も活かしながら全力で頑張りたいと思います!

④の回答

レビューに微力ながら参加させていただきました。全体を通してISUCONに役立つ内容が詰まっているだけでなく、実際のWebサービスを開発、運用していく上でも活かすことができるものが多く詰まっている本だと感じました。またじっくりと読み返したいと思います。

FetchDecodeExecWrite(スコア:19059)

人数 3名
メンバー akouryymikitmora
プロフィール 3人とも東京大学大学院情報理工学系研究科コンピュータ科学専攻の学生で、コンピュータ系サークルTSGのメンバー。FetchDecodeExecWrite自体は5大会連続の本選出場。チーム名の由来はCPUの仕組みから。アメリカに行ってしまったメンバーに代わり今年からmikitさんがチーム入り。
①の回答

データベースにSQLiteが使われていることがわかったので、SQLiteを剥がすかそのままで戦うか?が問題となりました。

そこで、まずは1人がSQLiteの扱いについて検討し、残りのメンバーはN+1クエリの解消等を行ったりキャッシュを導入したりするなどアプリケーションの改善を行うことから着手しました。

②の回答

SQLiteからMySQLへの移行は、初期データの大きさが問題でした。

ベストなスコアを出すためにはMySQLにすべきだと感じましたが、予選突破の観点では必須でないと考え、この時点でSQLiteからの移行を中断しています。結果としてSQLiteでは⁠いつものような⁠スロークエリの解析が難しく、ある程度手探りで改善を行いました。

最終的には17時を過ぎたタイミングでほぼ50000点を出すことができたため、ここで改善を中止し実装がレギュレーションを満たしているかを検討しました。

すると「請求書の金額が常に正しく計算できないテナントがある」という実装がレギュレーション違反をしている可能性があると判明し、各チームの順位と点数を検討した結果、点数が半分以下になるがより安全なものに実装を変更して競技を終了しました。

③本選に向けての意気込みを一言!

本選で優勝を目指すためには、レギュレーションを守りつつ攻めた変更をしないといけないので予選と同じようにはいきません。

しかし、これまで参加した本選は、0点、失格、6位、3位と少しずつ良くなっているので、今年こそは優勝したい!!

④の回答

チームメンバーのうち1人が読んでいます。ISUCON未経験者におすすめできる、本選出場そして本選上位を目指すのに必要なノウハウを一冊で提供する書籍であり、ISUCONの敷居を下げるという意味で良い本だと思います。

その成果が今年の0次予選(?)にある程度表れているのでは、と感じました。

いよいよ本選!栄冠はどのチームに輝くか

いよいよ2022年8月27日にオンライン本選が開催されます。

今回ご紹介した13チーム以外に、全30チームが登場します。

どんな問題が発表され、各チームどのように取り組み、スコアを獲得していくのか、今年もまたエンジニアたちのアツいチューニングバトルが見られることでしょう。

ISUCON12オンライン本選LIVE(YouTube Liveにて配信予定)
2022年8月27日(土)10:00~18:00(JST)
URL:https://youtu.be/f7G5xz6u3DE

gihyo.jpでは、本選終了後、優勝チームへの個別インタビューも予定しております。お楽しみに!

おすすめ記事

記事・ニュース一覧