ハトネコエ Web がくしゅうちょう

プログラミングやサーバー・Web制作、チームマネジメントなど得た技術のまとめ

【最速レポ】ISUCON夏祭り2023、最高すぎたのでレポートします!!

本日こちらのイベントに参加してきました!

めちゃくちゃ良いイベントでしたので、さっそくレポートを書きたいと思います。

( https://twitter.com/isucon_official/status/1695377159685349705 より引用 )

なんで参加したの?

私が ISUCON に参加したのは ISUCON 8 でした。
同僚といっしょに3人で出て、
「ま、とりあえず出ることが大事でしょ!」って軽い気持ちでノー勉で臨んだら、
きれいに0点を獲得しました(笑)

ゼロ♥ ゼロ♥ ゼロ♥ ざぁ〜〜〜〜こ♥♥♥

その後、転職があったり忙しかったりで参加はできていなかったのですが、
そのうちいつか出よう・・・と意識はしていました。

同僚が別のISUCON練習会的なもの(CTO協会主催)に参加していてうらやましかったので、
このイベントを見つけたときにすぐ申し込みました!

ちなみに、チームタピオカのメンバーの1人に、
「こういうイベント見つけてさ……」と話したら「自分も行こっかなー」と言ってたんですけど
結局来てなかったです!!! おいぃぃぃぃいいい!!!!! 🤪

めっちゃ夏祭りだった

イベントの名前は 『ISUCON夏祭り2023』 でしたが、
まさか本当に夏祭り会場と化しているとは・・・!
行ってみて驚きました。

射的やってる!!!!!!!!!!

大人気でした。
おそらく人生初めての射的で、テンション爆上がりでした。
2発使っても倒せなかったのですが、隣の人は2発とも倒していてプロでした。

他にも風船ヨーヨー釣り、お面のくじ引き、ラムネなどドリンクの配布をやっていて、
完全に夏祭りでした。

イベントスタッフ視点で考えると、
射的のための銃のレンタルや、風船ヨーヨー釣りのための水槽の用意、当日水を張ってそれを捨てる手間など、
当日までの準備・設営・撤収が大変すぎて、これをやり切っているのすごいなあ・・・と感じました。

写真だと伝わりにくいんですが、夏祭りスペースはこんな感じでした。大盛況です。

企業ブースも常に人がいました。
これは、企業ブースをすべて回るスタンプラリーを達成すると
ISUCOIN(イスコイン)がもらえるというボーナスがあったことも貢献していたと思います。

よく考えて作られているイベントでした。

こちらが偉大なる ISUCOIN(イスコイン)。
入場時に1枚もらえて、キラキラ光る素敵なノベルティーに、
最初から気持ちが盛り上がりました。
4枚集めるとお楽しみ抽選会の抽選券と交換できます。

ハンズオンがすごく勉強になりました

rosylilly さんがおこなってくださいました!
今回のイベント参加の一番の目的のハンズオン!

とてもタメになりました、ありがとうございました。
(ちなみに、5時起き&2時間半×2のハンズオンを成し遂げたrosylillyさんは、交流会の頃には魂が抜けていました・・・おつかれさまでした・・・)

最初にアンケートを取ってくださったんですが、
参加者はISUCON未参加の人が多数でした。

内容は、完全なハンズオンというよりは、時間の関係で講義メインで、
https://github.com/catatsuy/private-isu のWebアプリとベンチマークを立ち上げてみるところまでを全員にやってもらいつつ、
ボトルネックとなる部分の見つけ方や実際の直し方、
スコアが上がっていく様子はrosylillyさんがおこなって見せていくという形式でした。

private-isu は画像ファイルと db dump がそれぞれ1GBある関係で、
みんなが休憩時間の開始とともにダウンロードするも、
さすがに重くなって、20分の休憩時間中にダウンロードが終わらないという珍事件もありました(笑)

役立つ話がいろいろあったのですが、改めて文章に直すと長くなってしまうので、
ハンズオンを聞きながら書いていたメモの一部をここに貼っておきます。

  • 8時間かけてチューニングし続ける競技でなく、8時間かけてデプロイし続ける競技
    • くり返しお話されていた大事な概念
  • そのときの流行りが問題に影響することがあるので、そこを知っておくことが対策になったりする。
    • 例えばそのときの流行に関連して nginx でなく envoy が使われたり、MySQL 8.0 への移行の過渡期には、MySQL 5.7 から 8.0 への移行ができるとスコアアップできる問題が出たこともあった
  • アプリからは呼び出されていないのに、マニュアルには「バルクリクエストができます」と書いてあって、バルクリクエストをすると実際速くなるようなこともw
  • Goでやると
    • go fmt などの兼ね合いでコンフリクトが起こりやすいところが欠点
    • 型情報があるのでエラーが起こりにくいことが利点
    • 実行速度の話はよく出てくるが、実際のところISUCONではそこはほぼ影響しない
  • GitHub Copilot めっちゃ便利。関数名や変数名を書くと、代わりにコードを書いてくれる
  • なんとなくの手順
    • ウェブアプリをさわってみて、routing を見てみて、なんとなくどんなアプリかを把握
    • Developer Tools でどういうものが見えるか見る
      • 本番のベンチマークは、わざとログインに失敗したりするなど、カバレッジを満たすようにいじわるなリクエストもおこなうように作っている
      • 返ってくるレスポンスが同じになるようになればいい
        • だから、フルスクラッチでコードを書き直す宗派もいる。そっちのほうが楽な人も
  • ISUCON特有のエンドポイント: initialize
    • DBリセットをおこなう
    • 今回でいうと db_initialize メソッドがあるが、例えば memcached を使うなら、そこのメソッドで削除をおこなう必要がある
    • CREATE TABLE と db_initialize メソッドを合わせてみると、テーブルの足りていないインデックスがわかるだけでなく、ベンチマークが何件のデータを作っているのかわかる
  • 運営による再起動計測
    • 11211ポートで動く偽memcachedがあって、それに気付いても、再起動後に元の偽memcachedが再起動後に立ち上がってポートぶつかって……という事例があった
  • 最初の初期データを無くしてしまうとインスタンス立て直しになるので注意
  • ベンチマークの score を取得したら、そのスコアで score-1234 などブランチを切っておくかタグを付けるとわかりやすい

その他にも、いろいろな知識と心得を得られました。
ありがとうございます。

また、ハンズオンの終わりに、自分の気になっていた
「3台のサーバーってどう使い分ければいいの?」という質問にも答えてくださりました。

もちろんそのときの問題によるけれど、
よくやるのは2台をアプリケーションサーバーにして1台をDBサーバーにするやり方とのこと。

DBサーバーについては、
MySQLだけだとCPU負荷とdisk I/Oの負荷がある一方、メモリ負荷はそんなないので、
そこの余ったメモリリソースを埋めるよう、 memcached や redis など KVS 系のDBを入れていると伺って
「なるほど〜〜〜!!!!」とめっちゃタメになりました。

最後の交流会

午後のハンズオンが終わり、しばらくすると交流会でした!

ISUCONに興味ある層なだけあって、
技術的なチャレンジを普段からされている方が多く、楽しい時間でした。

参加者全員の写真撮影があり……
(一番最初に貼った集合写真の撮られる側の視点ですねw)

このイベントの運営代表をしてくださった Shoco さんの
お誕生日をお祝いするケーキが登場するなど、
優しさあふれるとても素敵な会でした。

とてもいいイベントで、参加できてよかったです。

運営スタッフの方々、
知見を共有してくださった登壇者の方々、
わかりやすいハンズオンをおこなってくださった rosylilly さん、
会場を提供してくださったヤフー株式会社さん、
交流会で突然話しかけても優しく応えてくださった方々、みなさまありがとうございました!

次回も楽しみにしています!!!!!!!!!
>>> 突然の運営への圧 <<<

急に思い出したからここで書きますが、
お昼のクイズ大会、ISUCONに詳しくないから心配だったけど、
詳しくない人もわかる問題が多くていい難易度で楽しめました!
ありがとうございました。