LoginSignup
0
0

ISUCON 13 に参加して20位でした (最終スコア: 91,400 なんかいい感じではやいやつ)

Posted at

ISUCON 13 に参加して20位でした (最終スコア: 91,400 なんかいい感じではやいやつ)

ISUCON 13に参加して20位になりました。
また、Tver賞として Firetv stick 4K max を獲得しました!
ありがとうございます!

image.png

image.png

参加確定まで

ISUCON 参加はこれで3回目でした。
最初の難関が、申し込みです。
DOS攻撃ばりのアクセスするのは嫌だったので、参加確定券付きの個人スポンサーとして申し込みました。

割とチームメンバーは決まっていて、去年と同じメンバーで参加するかなーと考えていました。(リーダー、セキュリティ・ネットワークマスター、自分)
しかし、セキュリティ・ネットワークマスターが今年は一人で参加してみたい(多分)とのことだったので、新しく一人誘う必要がありました。

現職のCTOをなんとか説得しました。

競技前日まで

  • リーダー
  • CTO
  • 自分

というチームメンバーが確定してからは、10月中旬くらいから4回練習しました。
練習した問題は、 ここら辺

  1. private ISU
  2. ISUCON Prior
  3. ISUCON10 本線
  4. ISUCON10 予選
  5. ISUCON11 予選
  6. 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シャツ
  • ネームカード
  • 認定証

が貰えるらしいので楽しみ!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0