Money Forward Developers Blog

株式会社マネーフォワード公式開発者向けブログです。技術や開発手法、イベント登壇などを発信します。サービスに関するご質問は、各サービス窓口までご連絡ください。

20230215130734

【Ruby】今年も福岡拠点で ISUCON13 に参加しました!

この記事は、Money Forward Engineering 1 Advent Calendar 2023の20日目の記事です。 19日目は福岡拠点のスーパー新卒 wozitto 氏の"marginではなく、レイアウトを指定しよう ~ レイアウト手法 Stack、Clusterの紹介 ~"でした。

こんにちは クラウド経費開発チームクラウド債務支払開発チーム の 宮村(みやむー) @miyamura.koyo です。

昨年 マネーフォワード福岡拠点 で ISUCON12 に参加しました!

moneyforward-dev.jp

そしてもちろん、今年も参加します! Ruby で!ということで ISUCON13 参加ブログを書きたいと思います。

※ 年末バタバタしてて執筆遅くなりました笑

isucon.net

参加と仲間集め

去年も楽しかったし勉強にもなるので今年も参加するぞ!ということで、毎年恒例(?)の参加受付。

今年も PC 前に張り付いて 0次予選(?)を突破し、無事参加することができました!

※ 申し込みは先着順となっているため開始から数分で上限に達してしまい参加できないこともしばしば。ここで足切りされることも多いので0次予選と呼んでいます

ISUCON 公式によると、以下のように多くの参加者が集まっており、盛り上がりの大きさがうかがえます。

参加チーム数 694組(学生 78組) 参加者合計 1662名(学生 253名)

...無事参加できたということで、仲間を集めました!

※ ISUCON は最大 3 人参加できます

今年は昨年に引き続き 江口さん と、同僚で高校からの友人である江藤くんに声をかけて出場しました。

チーム名は昨年の「ガーディアン」改め「ネオガーディアンズ」としました!

※ 「ガーディアン」は筆者がリーダーを務めるチーム名です!

当日までの準備

業務でバタバタしていたので休日にチームで集まって何回か練習会を行いました。

練習会では昨年作成した Makefile を以下のように拡張したり、当日行う作業をリハーサルしたりしていました。

今年は memcached を使ってキャッシュが必要な時でもスッと行えるようにしています(Ruby は daili という memcached クライアントを使用しました)。

実際に手を動かしてコマンドを打ってみると、簡単なコマンドでも普段打たないと手間取ることも多いと感じたため、練習会を企画してよかったです。

また、さくらインターネットさまより「予習環境のクラウド料金補助」クーポン をいただいたので ISUCON11 の環境を構築してチームで練習しました。

こういうサポートをいただけるのは本当に助かりますね。普段あまりやらない作業もあるので、技術力向上にも役立ちました。

knowledge.sakura.ad.jp

あとは当日用のカンペを以下のように作成しました。

いざ当日!

当日はオフィスに集合し、事前に準備したカンペ通りに準備しました。

今年は「こんいす〜」ということで Vtuber いすこちゃんの配信が止まっちゃう〜というのがテーマになっていました。

私も Vtuber 大好きなのでテンション上がりました。いすこちゃんを救うぞ!

事前に準備していたおかげで、昨年よりはスムーズにこなすことができました。

午前中には alp pt-query-digest を駆使して、スロークエリログやアクセスログと睨めっこしてどんどん改善を入れられる状態になりました。

今年は DNS をチューニングする出題になっていて、めっちゃ驚きました。チームに全然知見がなかったので ChatGPT のサポートも得つつキャッシュしたところ、見事スコアが向上しました!

特にバルクインサート化した際に ChatGPT を使ったところ、かなりスムーズに実装できてびっくりしました。ISUCON も LLM と共に解いていく時代なのですね。

※ 例として以下のような入力を与えました

以下のコードをバルクインサートに書き換えてください
(コードをコピペ)

また、アプリケーションだけでなく DNS アプリケーションのほうからもスロークエリログが出ていて、そちらもしっかり捕捉してインデックスを追加できたのがよかったですね。

さらに、今回一つのポイントとなった icon_hash を活用して高速化するところは、事前に準備した memcached を活用してキャッシュ化して高速化できました。

結果

丸々8時間使って終了!お疲れ様でした!

110 コミットを積むことができました。

肝心の結果は... 約158位/694チーム (上位約 22.8%) でフィニッシュしました。

Ruby で参加したチームの中では結構上位...だといいな。

isucon.net

昨年は約199位/698チーム (約上位28.5%)だったので、昨年よりも成長できていますね!来年は上位10%台を目指したい!

やってみて

今年も参加していろいろ学ぶことができ、昨年よりも着実に成長できているなと感じました。忙しかったですが、なんとか時間を作って参加してよかったです!

後日講評をみて、あ〜これやれたな〜というのも多くありました。

特に If-None-Match を検査する部分が当日うまく動作せず断念したのですが、講評の以下の部分を見て、な...なるほど...となりました。やはり計測するのは大事ですね...。

If-None-Matchは前後に " がついているので、削除するか文字列が含むかを調べることができる関数、メソッドを利用するとよさそうです。

総括した結果、来年は以下のことに取り組みたいです。

  • デバッグしやすくするためにログをより充実したい
    • 推測するな計測せよ
  • 3台構成をスムーズにできるように準備したい
    • デプロイも自動化しないとなぁと思いました

...とここまで書きましたが、これは普段の仕事でも同様のことですね。日々の仕事でもより一層意識していきたいと感じました。

まとめ

今年も ISUCON に参加してワイワイ楽しみつつ、技術的に色々と学ぶことができました。

近年はサーバーに ssh して何か作業することも少なくなってきましたが、年に1回はこうやって感覚を取り戻していきたいですね。

来年も参加するぞ!


マネーフォワード福岡拠点では、ISUCON 大好きなエンジニアを募集しています!

ぜひジョインして社内勉強会などで知見を広めてみてください👍

hrmos.co

福岡開発拠点のサイトもあるのでぜひみてください!

fukuoka.moneyforward.com