math314のブログ

主に競技プログラミング,CTFの結果を載せます

ISUCON10で予選敗退した

予選敗退しました。 多分最高得点は開始4,5時間目の1600前後ですが、多くの結果がcancelledになっており、我々のアプリのバグがシミュレーターのバグなのかわかっていません。

やったこと

  • MySQLのバージョンを確認。DESCとASCを混ぜたindexを作るもEXPLAINするとFileを使っていることを確認。どうやらMYSQL8.xではないと駄目らしいので -popularityをinsertして全部ASCでorder by 出来るように
  • ChairとEstateでDBを分ける。1台目をgo app, 2台目をChair用MySQL, 3台目をEstate用MySQL
  • Search用にindexを山盛り作る
  • 各low priceをcache
  • Spatial Indexを入れるために MySQL 8.xを採用、その後 -popularityは削除
  • range query (80 <= height && height < 150 みたいなの)を heightRangeId = xxx の形に出来るように,DBのデータを追加したり
  • Nginx側でbotを弾く

やってないこと

  • NazotteのN+1の削減
  • Recommendの大量のor句の削減。工夫すれば and 2個だけになりますね

感想

ポジティブ

  • 運営お疲れさまでした!頭が上がらない
  • 問題は非常に面白かった。コードが簡潔にも関わらず工夫する点が多数。

ネガティブ

  • シミュレーターとポータルが両方不安定で、途中質問ページにすらたどり着けなかった。我々のアプリは得点は出ているにも関わらずcancelled、という状態で中盤止まってしまい身動きが取れなかった。
    • 10分間以上Runningのテストを2回ほどcancelしてもらっていたので、"cancelled"は運営が負荷軽減のため手動でcancelしていたものだと勘違い。質問するまでに時間がかかった。
    • タイミング悪く質問が出来なかったり(質問ページが502)、cancelledの理由は我々側かシミュレーター側の問題かの質問の回答に時間がかかったり。何回かの質問の回答待ちで1時間以上はかかったかも
  • 競技中のシミュレーターに対する信用度が6割程度しかなく(言い換えれば4割はシミュレーターがバグっていると疑っていた)、シミュレータのバグだと信じて改善を続けるか、ある程度ロールバックするかで滅茶苦茶悩んだ。ロールバックしてしまったがそのまま突き進むべきだった。理由は以下の文章 (http://isucon.net/archives/55007956.html より)

    ベンチマーカーの不具合により、スコアが 0 点となってしまう、あるいは正常に終了しない事象が発生しておりました。そのため、競技終了後、本不具合を修正した上で運営にて全チームに対して追試を行いました。

  • ロールバックしてほとんどスコアの上がらないものを一から直すより、最新のcancelされてしまうものを改善し続けた方が通過する可能性は高かったように思う
  • 前半4時間が楽しかっただけに後半が本当に残念。実力が足りずに落ちたと実感出来れば反省も出来るのだが…

その他

  • シミュレーターとポータルの安定性を向上してほしいとは思うものの、それだけのことを行う人的余裕はないのでは?この規模の運営って死ぬほど大変だよね?とも思っている。
  • 競技参加者なのでどうしてもネガティブな部分が具体的になって長めになっているが、毎年面白い大会を開催してくれている運営の人々に感謝しています