ISUCON14参加記 (最終スコア 10,285)

ISUCON14 にチーム「完璧な一日」で参加しました。技術サークルの友人2人とチームを組みました。

最終スコアは10,285でした。

関連:

isucon.net

github.com

オブザーバビリティ

OpenTelemetry を使ってオブザーバビリティのある状態を作りました。実際には十分なオブザーバビリティとは言えない様子だったのですが、最低限競技に使えるくらいにはなりました。

オブザーバビリティバックエンドは Honeycomb というサービスを使いました。

www.honeycomb.io

次のようなダッシュボードを作り、ボトルネックを探すのに役立てました。

例1. Nginx のリクエストを遅い順に並べる

Nginxのリクエス

例2. MySQL クエリのダイジェストを遅い順に並べる

MySQLのクエリ

もちろん、これらの設定を当日準備するのは時間がかかるので、事前にコンフィグのスニペットを作ったり、Ansible で OpenTelemetry Collector をインストールできるようにしています。また、オーバーヘッドもあるので、競技終了直前に OpenTelemetry Collector のサービスは止めました。

サーバー構成

競技環境の3台のサーバーは次の構成にしました。

構成図

  • ユーザーからのリクエストを受け付ける Nginx とアプリ本体を動かすサーバー
  • MySQL 専用のサーバー
  • isuride-matcher サービスを動かすサーバー

「サーバーは3台使えたほうがいいだろうから、すぐに分けられるところを分けよう」という方針でやったので、もっといいやり方がありそうです (MySQL を分けるとか) 。

やりたかったこと

大会本番にできなかったことは、MySQL でパフォーマンススキーマを使った分析です。OpenTelemetry の SQL Query Receiver と合わせてモニタリングできたら便利だったなと思っています。

例えば、実行したクエリについて rows_examinedrows_sent をモニタリングできると、問題あるクエリの発見が早くなるだろうと思ってます。

感想

競技環境はダッシュボードがかっこよかったですし、ベンチマークがすぐに実行されるのもよかったです。

個人的には、参加登録時点で OpenTelemetry を使いたいと思っていたので使えてよかったです。また、データベースに苦手意識があったのですが、今回の ISUCON を機に入門して苦手意識が減ったのもよかったです。

最後に、チーム組んでくれた2人に感謝。