ISUCON9予選参加した

反省会。

チームについて

@kadokusei , @watiko と3人で sisisinと愉快な仲間たち チームとして参加。
kadokusei がインフラ、 watiko・自分がアプリとかボトルネック調査を担当

自分の覚えてる範囲でやったこととか書き残しておきます

最終的に出来たこと

  • /users/transaction.json の外部API呼び出しのキャッシュ
    • redisに /status の結果をキャッシュしておいてそこから引く処理を入れた
    • /initialize 時に初期データから取得できるステータスを全てキャッシュに突っ込んだ
  • DBインスタンスを分けた・DBインスタンスにredisを載せた
  • categories テーブルのデータをメモリにキャッシュ
    • 最初から全部乗せるのはテーブル構造が地味に複雑だったので諦めて、結果をメモ化するにとどめた
  • items,transaction_evidences,shippingsに適当にインデックスをはった

やろうとしたけどダメだったこと

  • appの複数台構成
    • 画像をwebdavで一台にまとめて置く、などを試すも、アプリからwebdavにファイルを置くのが上手く行かず断念
  • /users/transaction.json の外部API呼び出しの並列化
    • こんなに言語によって難易度差出るやつは想定解法じゃないんじゃ?って疑問に思ってドキュメント見たらキャッシュできそうだったので方針切り替えた

調べて気付いたこと

  • datadog APM使って各種エンドポイントとそのどこに時間がかかっているかの調査
    • /users/transaction.json , /items/:item_id.json , /new_items.json 辺りが重い
  • DB全然時間かかってなさそう
  • /users/transaction.json はN+1に目がいったけど実際はAPI呼び出しがめっちゃ時間食っている
  • categoriesusers テーブルの呼び出し回数がやたら多い(が、時間はかかってない)

つらかったこと

  • 初手アリババクラウドから身分証明書提出を求められるダイアログが出てしまって運営の対応待ち。
    • 10:30ぐらいまで何もすることがなかったのでマニュアルを読んでいた。
    • せめて /docs だけでも最初に配布しておいてもらえればまだ良かったんだけど・・・

  • デプロイ周り整えるのに時間食いすぎた

よかったこと

  • 準備してたところはちゃんと出来た
    • redis用意、datadog apm用意、初期のconfig作成など
  • ローカル環境整えたのは便利に活用できた人もいた(自分は /users/transaction.json の動かし方がわからなかったのであまり活用できず。。)

感想

最終的に目の付け所は悪くなかったと思ってるんだけど、自分の地力不足を感じた
たかがインデックス貼るスクリプト書くのに30分とかかけてて雑魚乙って感じになってしまった、もっと上手くなりたい・・・

あとデプロイ周りは書いて終わりじゃなくてデプロイしてベンチするところまでちゃんとやりたいとか、ボトルネック調査もっと上手くやりたいとか色々ありつつ

初参加だったけど手応えはあった気もする
ただちょっと微妙な点として、普段こんなに生のインスタンス触らないから練習負荷が高いのがなんともなあという気持ちがちょっとだけあったりも。

結構悔しいので来年もまた頑張りたい所存