ISUCON11に参加しました
はじめてISUCON11予選に参加したので、その記録です。
Golangを選択し、結果は130位、33,750点でした。
チーム
チーム名は「慎太郎」。
メンバーは @yktakaha4、@matchasong、そして@kangaechuの3人で参加しました。
ISUCONに参加したかったものの、仲間がいなかったので参加申し込み前週に@yktakaha4を他チームからひきはがし、別の勉強会で自分たちのISUCON過去問を解く様子をzoomで見ていた@matchasongをひきずりこみました。
おおまかな役割として、以下の割り振りで行いました。
- @yktakaha4 : アプリ
- @kangaechu : インフラ
- @matchasong : ベンチマーク実行、全体的な管理
@yktakaha4の参加記録
準備
事前に4回くらい集まり、ISUCON10予選、ISUCON9予選を解きました。
MySQLのインデックスの貼り方から始めるレベルなので、MySQL5系は降順のインデックス無視されるんだーとか学びながら順々に進めていきました。
これと並行し、ベンチマーク実行前のログ取得を自動的に行うスクリプト群を作成しました。Nginxのログ解析にはalp、MySQLのスローログ解析にはpt-query-digestを使用し、ベンチマーク開始スクリプト内で
- Nginx、MySQLログの削除
- git pull
- ビルド
- Nginx、MySQLの再起動
- ベンチマークの実行
- 実行後の点数をGitタグに追加
- 実行後のNgunx、MySQLスローログの解析結果作成
- Nginx、MySQLログをWebブラウザから見れるように、公開ディレクトリに移動
- スコアとログのURLをDiscordにPost
する処理を実行するようにしました。
これにより間違いやすい作業を自動化でき、予選でも役に立ちました。
当日の様子
当日のスコアの様子は以下の通りです。
10時の競技開始後、CloudFormationの起動をしながら、ドキュメントを音読しました。アプリケーションの起動後、実際に画面をさわりながら実行されるAPIのパス・リクエスト・レスポンスを眺めていきました。
11時くらいにだいたいの仕様を理解できたので、@matchasongとベンチマークを流せるよう準備を行いました。サーバのファイルをGit管理し、@yktakaha4にコードを読んでもらいました。また、/etcもGitの管理下に移動し、変更を管理するようにしました。
12時に初のベンチマークを流し、2,066点となりました。
ベンチマーク準備ではDBサーバがMariaDBのため、設定をどこに入れればいいかに時間がかかり、12時すぎくらいまで時間がかかってしまいました。
ごはんを食べ、小休憩。
13時から午後開始。@yktakaha4がインデックスが効きそうなところに貼ってくれたため、点数は17,252点と大幅アップ。また、 dropProbablityStr
を環境変数化し、env.shから変更できるようにしてくれました。自分斬作業をしつつ、与えられた3台のサーバを
- Nginx + WebAPサーバ(Webを処理)
- WebAPサーバ (JSIのPOST /api/condition/:jia_isu_uuid)を処理
- DBサーバ
に分離するための準備をしていました。
14時台はMariaDBをWebAPサーバとは別サーバに移動し、24,794点と7,000点アップ。また、POST /api/condition/:jia_isu_uuid
も分離しましたが、27,324と2,000点程度の増加にとどまりました。@yktakaha4はDBへのアクセスしてる部分をメモリにキャッシュ。@matchasongはdropProbablityStr
の適正値を探してくれました。
15時台はMariaDBのバージョンを最新に更新。スコアが上がるかと思いましたが、変更前と比較し2,000程度の増加にとどまりました。@yktakaha4は文字列比較を正規表現に置き換え、ログレベルの変更を実施。また、ログレベルの変更により+2,000点。
16時台はassetsをNginxから配信。スコアはあまり変わらず。is_dirtyを列として持つ修正をしていたのを手伝ってましたが、マージまでは辿り着けず。この時点で50位台。
17時台は再起動試験して終わりとしようとしたが、ポータルが死亡。その隙に@yktakaha4がバルクインサートを更新。最高で35,578点となった状態でおしまい。
振り返り
- ○ : 3台構成やアセットのNginx配信など、ここら辺は最低限やりたいと思っていたことはできた
- ○ : 楽しく完走することができた
- ○ : 事前にベンチの面倒なものを自動化しておいたのはよかった
- ✖︎ : コスパの良い改善を考えず、割と思いついたところからやってしまった
- ✖︎ : とにかく時間が足りない。もっと手が早く動かないと話にならない
- ✖︎ : ログを落ち着いてみる時間がなかった。改善の手法が掴めていたかも
また次回参加したいです!
Discussion