ISUCON 13 に参加して20位でした (最終スコア: 91,400 なんかいい感じではやいやつ)
ISUCON 13に参加して20位になりました。
また、Tver賞として Firetv stick 4K max を獲得しました!
ありがとうございます!
参加確定まで
ISUCON 参加はこれで3回目でした。
最初の難関が、申し込みです。
DOS攻撃ばりのアクセスするのは嫌だったので、参加確定券付きの個人スポンサーとして申し込みました。
割とチームメンバーは決まっていて、去年と同じメンバーで参加するかなーと考えていました。(リーダー、セキュリティ・ネットワークマスター、自分)
しかし、セキュリティ・ネットワークマスターが今年は一人で参加してみたい(多分)とのことだったので、新しく一人誘う必要がありました。
現職のCTOをなんとか説得しました。
競技前日まで
- リーダー
- CTO
- 自分
というチームメンバーが確定してからは、10月中旬くらいから4回練習しました。
練習した問題は、 ここら辺
- private ISU
- ISUCON Prior
- ISUCON10 本線
- ISUCON10 予選
- ISUCON11 予選
- ISUCON12 本線
当日
時間 | 初期スコア | 最終スコア |
---|---|---|
10時~11時 | 3,816 |
2,224 |
11時~12時 | 2,224 |
6,766 |
12時~13時 | 6,766 |
7,570 |
13時~14時 | 7,570 |
11,218 |
14時~15時 | 11,218 |
19,875 |
15時~16時 | 19,875 |
31,206 |
16時~17時 | 31,206 |
50,472 |
17時~18時 | 50,472 |
91,400 |
9時-10時
当日は、9時にみんなで集まりました。
昼は買いに行く時間がないので、10時までに各々が買いに行きました。
YouTube 放送で、ライブが少し遅れた際に、「あれ、これ動画配信サイトの問題か?」と言ったのがまさか当たってしまいました。
- モニターセットアップ
- お昼買い出し
- 作戦会議
- リモートサーバー(開発用)のセットアップ
10時-11時
初期: 3,816
最終: 2,224
10時10分くらいに、サーバーが全部立ち上がりました。
初期ベンチ 3,816点
プロファイラー等をまいたりして、一時的にベンチが下がる (2,224
点)
一旦、powerDNSとか水責め攻撃とかわからん...になっているので、通常通り、indexを貼る,N+1解消を進めていこうになった
この段階では、user周り等のN+1が重そうになっていた
- CloudFormation で、サーバーを立ち上げる
- プロファイラーを撒く (秘伝、netdata等)
-
初期ベンチ(10:09:10:
3,816
点) - DB周りを見る -> index貼りましょうになる
- powerDNS ってなんや...になる
11時-12時
初期: 2,224
最終: 6,766
11時の頭に、アプリケーション、当日マニュアルを読む。
index貼り、N+1解消を進めていき、スコアが上がる
tagsが、N+1になっていたので、bulkにする
11:54:18, 6,766
点
- マニュアルの読み合わせ
- インデックス貼り
- tagsのbulk
12時-13時
初期: 6,766
最終: 7,570
tagsは、insert が走っていないので、オンメモリで良さげという話になり実装する
- user icon 周り
- tags のオンメモリ化
- theme のオンメモリ化
13時-14時
初期: 7,570
最終: 11,218
13時くらいになると、themeのオンメモリ化を進めました。
user ごとの dark_theme 等ですが、ほぼほぼ更新がなく、データー数も1000くらいのオーダーでした。
失敗としては、insertがあったのですがここの永続化はすっ飛ばしてはいけなかったです。(後から気づいた)
ここで、ベンチマーカーの不調もありました。
- theme のオンメモリ化
- mysql interpolate の有効化
14時-15時
初期: 11,218
最終: 19,875
次は、そもそもuserがあんまりレコードが少なかったのでオンメモリ化を進めました。
ここは、iconとコンフリクトして、「うーん。なんでfailするんだろ...」となっていて悩んでいました。(結局、コードに問題はなかったがicon hash の永続化周りの問題そうだった)
- user のオンメモリ化
15時-16時
初期: 19,875
最終: 31,206
userのところで悩みつつ、サーバー分割を考え始めました。
また、
- user のオンメモリ化
- db の max_con を変えてみる(app)
- サーバーの分割を考え始める -> (s1: app, s2: mysql, s3: powerdns)
16時-17時
初期: 31,206
最終: 50,472
- サーバーの分割 -> かなりエラーが出て焦る
17時-18時
この時間は、やばいやばいになっていました。
サーバー分割が完了して、点数が安定するようになり安心しました。
まだ、ログを消しきれていない箇所もありましたが、もうやめておこうという判断になりました。
初期: 50,472
最終: 91,400
- サーバーの分割完了
- 再起動時のキャッシュが永続されていないエラーを直す
- ベンチがちゃ
18時以降
セブンにご飯を買いに行って、みんなで生放送を見守りました。
TVer賞が貰えてとても嬉しかったです。
最後に
このチームでできて、とても楽しかったです!
去年は、26位で順位が一桁足りずに本戦を逃したのが悔しかったです。
今年は、20位、去年の挽回ができました。(優勝したかった)
30位以上は、
- スポンサー企業ノベルティ詰め合わせセット
- ISUCON13オリジナルTシャツ
- ネームカード
- 認定証
が貰えるらしいので楽しみ!