Engineering 2022.11.17

【開発合宿 BEE-Tech Campレポート】社内ISUCON*を通してWebパフォーマンスチューニングの技術を身に着ける!

2022年10月に、BEENOSエンジニアチーム主催の開発合宿「BEE-Tech Camp」を開催しました!

今回のBEENOS開発合宿では、グループ社内のエンジニアでISUCONに取り組むという内容で実施しました。

*ISUCONとは、Iikanjini Speed Up Contestの略で、LINE株式会社が運営する大会です。詳しい説明は他記事に譲りますが、1チーム最大3名で参加し、与えられたインスタンス3台の範囲でお題となるWebサービスをチューニングして限界まで高速化を図ることで競います。
ISUCONを社内で実施し、技術研鑽に用いることを特に社内ISUCONと呼びますが、この度開催した「BEE-Tech Camp」では、社内ISUCONが行われました。

*商標について
「ISUCON」は、LINE株式会社の商標または登録商標です。

BEENOSではこれまで有志のエンジニアが集まり、技術力向上のため1泊2日の技術合宿を毎年開催していましたが、直近は新型コロナの影響で開催が見送られてきました。
そうした中、今年は感染対策を徹底した上で、久しぶりにエンジニアがオフサイトで集まり、開発合宿を開催したい!という熱い思いを持ったエンジニアたちが企画を開始。

大盛況に終わった2022年のBEE-Tech Campレポートをお送りします!

エンジニア主催の開発合宿

 
エンジニアの、エンジニアによる、エンジニアのためのBEENOS開発合宿が先日開催されました!
企画チームを代表して野口から合宿の概要をお伝えいたします。
新型コロナの感染状況の影響から、2019年を最後に開催が見送られてきましたが、今年は「夏の思い出を作りたい」というエンジニアの一言がきっかけとなり、感染状況を見ながら安全に配慮して開催するという運びになりました。
開催の検討を始めた時期が夏真っ盛りだったこともあり、最終的に秋の開催となりましたが、夏が過ぎてもエンジニアの熱量は落ちることなく、合計19名の参加者が集まりました!
今回は上郷・森の家にて10月15日、16日の2日間にわたって開催しました。
合宿所の上郷・森の家は横浜市栄区にある施設で、参加者も空き時間に付近を散策して季節の植物を眺めたり、リスなどの生き物を見つけたりして自然を満喫しました!
何よりスタッフのみなさんがとても親切にご対応してくださり、参加したエンジニアの皆が非常に満足していました。この度は大変お世話になりました!
https://kamigo-morinoie.com/
 
今年の技術合宿テーマは「社内ISUCON」

それではここからが本題です!
今回の合宿のテーマは「社内ISUCONを通してWebパフォーマンスチューニングの技術を身につけよう!」です。
ゲームマスターが1名(本記事後半で講評・まとめを書いている三上さん)、残りの18名は3人1チームの合計6チームに分かれて、チーム対抗でより高いベンチマークを競う形式での開催となりました。
普段の仕事ではあまり関わることのない部署や、他のグループ会社のメンバーと一緒になっての競い合いは、ある時は笑って盛り上がり、またある時は無言の空間にタイピング音だけが響くというエンジニア合宿らしい光景でした。
合宿のタイムテーブルは以下の通りです。


競技中の風景


1つのポイントについて相談しながら進めたり、分担して黙々と作業を進めたり、作戦はチームによって異なります。

実際のISUCONは競技時間が8時間ほどですが、今回は日程の都合で競技時間は5時間。
限られた時間の中で少しでも成績を伸ばそうと全員必死です!


各チームの最新の点数は会場のプロジェクターでリアルタイムで映し出されています。
順位が上がれば歓喜の声が上がり、追い越されると焦り始め、残り1時間を切ると最新の成績の投影が止まるため、どのチームもラストスパートをかけます!

翌日は運命の結果発表の前に、各チームがどんな作戦でどのような操作が点数を上げたのか、もしくは下がってしまったのか、質問をし合いながら振り返りました。

次は、見事第1位の座を勝ち取ったチームの代表者 波多さんからの感想となります!

 
優勝チームメンバーの感想
波多です!写真左側でムキっとしています!

私の所感として、今回の技術合宿は「白熱」といった言葉がしっくりくる盛り上がりでした!
メンバーと共に時間ギリギリまで画面に張り付き、少しでもスコアが上がるよう粘りました。
残り10分を切って、一気にスコアが上がった時は興奮しましたね!

私達は全員アプリケーションエンジニアのチームということもあり、ミドルウェアの設定には苦労しました。事前のハンズオンの応用が上手くハマらなければ、相当時間を取られたはずです。事前準備大切!
その分、コードの改善には特に力を発揮できたかと思います。
メンバーで話し合いながら多重ループや冗長な実装の洗い出しを行いました。より効果がありそうな改善箇所を素早く絞り込めたことがスコアに繋がったかと思います。
とはいえ、課題のコードには改善したい点が多く目につき、脇道に逸れかけることもしばしば。これはエンジニアの性だなと感じました。

今回挑戦した専門外の内容はもちろん、限られた時間内で最大の結果を模索することは実際の業務にも直結する経験となりました。
緊張感を持ち、ゲーム性に熱狂しながらスキルを上げられる本企画は、とても楽しく充実した時間でした!
 

講評・まとめ

講評とまとめについて、社内ISUCONの運営を行っていた三上が担当します。
今回、競技参加者の9割以上がISUCON未経験者でしたが、大きな障害もなく、楽しんで頂きながら競技が行えたのではないかと思っています。
この点は素直に喜ばしいですし、スムーズな運営にご協力頂いた皆様に大変感謝しております。

競技参加者の皆さんの興奮が伝わるように、競技終了1時間前のスコアフリーズまでのスコア推移をこちらに掲載させて頂きます。
当日はこのポータルサイトをプロジェクターで投影しながら競技を行っておりましたが、皆さんスコアの推移に一喜一憂されて、とてもエキサイティングな会でした。


参考までに、使用した問題やインフラ環境については、Tech blogの記事で紹介します。
そちらが気になる方はTech blogをご参照ください。

これ以降は、競技参加者の皆さんから頂戴したアンケート回答内容や競技の運営サイド目線から、行われていたチューニングの傾向などを紹介していきます。

複数のチームでよく見られた改善、理解が深められていそうな点

社内ISUCONを開催するにあたり、参加者にはISUCON未経験者が多いこともあり、事前に2回のハンズオン会を行いました。
ハンズオン会では、スロークエリやN+1問題の改善などを取り扱っていました。
(第1回ハンズオンの内容もTech blog側の記事にて公開しているので、適宜ご参照ください。)
特にスロークエリログに基づいた改善は皆様の理解度も高かったようで、下記2点は多くのチームが実施出来ているようでした。

必要なインデックスの構築
アプリケーションとデータベースの役割を1つのインスタンスから分離

データベース周りの改善でしのぎを削っている図がこちらです。


参加メンバーが今後の課題点に挙げていた点、さらなる改善が見込めそうな箇所

一方で、N+1問題などのアプリケーションコードを含めた改善では頭を悩ませるチームが多かったようです。
この部分を少しでも改善出来ているかどうかが今回の勝敗を分けたのではないかと思います。

また、今回の問題にはnginxのチューニングが効く箇所も存在したのですが、そちらも改善に苦戦しているチームが多いようでした。
この点、ミドルウェアのチューニングはより広い知識が求められるため、とっつきにくい人も多かったのではないかと思います。
一方で、このために必要なHTTP等の知識は実務でも活かせるものなので、是非今後の課題として捉えて頂ければ嬉しい気持ちです。

以下の写真は何かの改善が効いてダントツトップに躍り出る図です。
(なお、この後何らかの理由でスコアが元に戻ってしまいます…そういうところもまた良いですよね。)

まとめ


結果的に、競技参加者の皆さんの学びになり、社内ISUCONの競技時間にも楽しく取り組んで頂き、良い合宿となりました。
今回の合宿ではほぼ全員が初めてのISUCONということで、持っているカードでどう戦うか知恵を絞っていたのではないかと想像していますし、これが間違いなくWeb系ソフトウェアエンジニアとしての経験値になっているものと思います。
次回の公式ISUCON予選では、今回参加して頂いた同僚の皆様とはライバルとして切磋琢磨出来ることを、僕自身も楽しみにしています。

今後もBEENOSグループではWebアプリケーションに関する知識の学習を継続し、身につけた技術を持って、世界の課題解決を果たすプラットフォームを創っていきます。
その様な環境にご興味のある方は是非採用サイトからご応募ください!
まずは気軽に話してみたいという方はmeetyのカジュアル面談もご利用ください。

本記事は以上となります、ありがとうございました!