isucon14に参加してきました
友達に「isucon出ない?」と誘われたので初参加してきました。
仕事が繁忙期だったりプライベートが諸々いそがしかったのも有り、素振りが5時間くらいしかなかったのでisuconとはの概要をさら~っと把握したくらいで、あまりセオリー的なのはわからない状態で突撃しました。
今年のお題
ライドチェアというライドシェアサービスがお題でした(動画のクオリティがすごい)
この世界では椅子が目的地まで自分を運んでくれるそうです。
やったこと
1. MySQLを別サーバーに移行
競技開始時点では3台のサーバーにそれぞれアプリもDBも乗っている状態だったので、サーバーの役割を分割させることにしました。
いらないサービスを全部止めてから(APPのservice、cronとか)作業したので、特にハマることなくスムーズに行ったのですが、他チームでDB分けるのハマった、みたいな投稿があったので、いらないものは止めてから作業するのはよかったかもしれません。
とにかくDBの負荷が高かったので、DBサーバーを作ることでリソースをいい感じに使えるようになりました。
2. インデックスをはる
- をやっている最中チームメンバーがインデックスを張ってくれました。
点数めちゃ伸びた、すごい、インデックス大事
3. スロークエリ出してみる
MySQLのスロークエリを出しました。
pt-query-digestも使ってみて、チームメンバーにクエリ修正をお願いしました。(修正は間に合わなかった)
4. 椅子のマッチロジックを変えてみる
椅子のマッチロジックが「配車を受け付けている椅子をランダムで1台ピックする」というロジックだったので、せめてもの思いで一番近い椅子をマッチするようにしました。
ただ、チームで言語はnodejsを採用することになっていたのですが、私のほうが1mmもnodejsを触ったことがなくコードを読むのが精一杯だったので、コードはChatGPT(GPT-4o)に書いてもらいました。
提案されたコードはバグなく動くレベルでAIの進化に感動しました。
(プロンプトを上手に使う能力が求められますね...)
ちなみにこれも結構点数が上がりました。
...とこんな感じで初isuconは5400点くらいで終了しました。
やりたかったこと
- 決済周りの処理を別サーバーに切り出し&ロジックを読み込みたかった
- マッチ速度改善したものの、ユーザー様の不満度が依然として高めだったので、もっと他のロジックを考えたかった(が、具体的にどうしたら良かったかまではわからず)
感想
- 楽しい!!!!(サーバー飛ばしても決済できなくなっても誰からも怒られないので、試したいこと試したい放題)
- コード読む時間が全然足りなかった
- 意外とアプリケーションのロジック触ることになった(もっとサーバーやミドルウェア周りのチューニングをするイメージだった)
- AIすごい
運営の皆さん&一緒に出てくれた友達の方ありがとうございました!