ISUCON12に参加してきました
ISUCON12に参加してきました。
チーム名:otemoto
結果:5444 otemoto 3回の再現スコア計測で85%以下のスコアしかでなかったため失格
理由はツイートの通り、競技終了後にインスタンスを停止、削除していたからでした。
何やってるんだと自分自身に落胆してますが、マニュアルを読んでいなかったせいです。
失敗して気づく学びもありますが、失敗しないに越したことはないです。無念…
理由わかった。悔しい。。
— moriso (@_moriso) July 24, 2022
費用かかるの怖くてインスタンス停止させてたし、なんなら使わなかった2台は削除してたからだ。
"競技終了後は主催者からアナウンスがあるまで競技環境のシャットダウンや停止などは行わず、3 台とも起動した状態を維持してください。"https://t.co/21rfmk5VIP
ISUCON 初挑戦 かつ 一人での参戦ということで 出来たことにかなり限りがありましたが、「手を施したことでスコアが上がる」という体験はとても心地よかったです。
ISUCON運営の皆様本当にありがとうございました。
以下、競技中にやったことを軽く書き連ねておきます。
競技中にやったこと
午前中はアプリケーションをブラウザで確認したり、各種計測ツール(alp, pt-query-digest)の導入、slow-queryの設定、 nginxのアクセスログ設定などをおこなっていました。
nginxのアクセスログフォーマットをltsvに変更するのに嵌ったのが痛手でした。
log_format ltsv "time:$time_local" "\thost:$remote_addr" "\tforwardedfor:$http_x_forwarded_for" "\treq:$request" "\tstatus:$status" "\tmethod:$request_method" "\turi:$request_uri" "\tsize:$body_bytes_sent" "\treferer:$http_referer" "\tua:$http_user_agent" "\treqtime:$request_time" "\tcache:$upstream_http_x_cache" "\truntime:$upstream_http_x_runtime" "\tapptime:$upstream_response_time" "\tvhost:$host"; access_log /var/log/nginx/access.log ltsv; #<-ここにltsv指定するの忘れてた
午後からはスロークエリを見たり、alpから重いエンドポイントを調査したりしました。具体的には
- 一意なID生成でDBアクセスしてたのでGo上でUUID生成
- スコアが3,200から4,800に上がった
- MySQL visit_history テーブルへのインデックス追加、SQLite3へのインデックス追加
- スコアは4,800から5,600に
などを行いました。
課題
SQLiteの扱いに慣れていなかった
前提として、ISUCONでは「できることをやる」時間しかない。
SQLiteを組み込んだ経験がなく、改善にどのくらい時間がかかるのか想像できなかったので改善には着手できなかった。
サーバー分割ができなかった
せめてAPIサーバーとMySQLは別々のサーバーで動かしたかったが、方法が分からず断念した。
参戦時のリポジトリはこちらです GitHub - moritasoshi/isucon12q