ISUCON9予選参加した
反省会。
チームについて
@kadokusei , @watiko と3人で sisisinと愉快な仲間たち
チームとして参加。
kadokusei がインフラ、 watiko・自分がアプリとかボトルネック調査を担当
自分の覚えてる範囲でやったこととか書き残しておきます
最終的に出来たこと
/users/transaction.json
の外部API呼び出しのキャッシュ- redisに
/status
の結果をキャッシュしておいてそこから引く処理を入れた /initialize
時に初期データから取得できるステータスを全てキャッシュに突っ込んだ
- redisに
- DBインスタンスを分けた・DBインスタンスにredisを載せた
categories
テーブルのデータをメモリにキャッシュ- 最初から全部乗せるのはテーブル構造が地味に複雑だったので諦めて、結果をメモ化するにとどめた
- items,transaction_evidences,shippingsに適当にインデックスをはった
やろうとしたけどダメだったこと
- appの複数台構成
/users/transaction.json
の外部API呼び出しの並列化- こんなに言語によって難易度差出るやつは想定解法じゃないんじゃ?って疑問に思ってドキュメント見たらキャッシュできそうだったので方針切り替えた
調べて気付いたこと
- datadog APM使って各種エンドポイントとそのどこに時間がかかっているかの調査
/users/transaction.json
,/items/:item_id.json
,/new_items.json
辺りが重い
- DB全然時間かかってなさそう
/users/transaction.json
はN+1に目がいったけど実際はAPI呼び出しがめっちゃ時間食っているcategories
やusers
テーブルの呼び出し回数がやたら多い(が、時間はかかってない)
つらかったこと
- 初手アリババクラウドから身分証明書提出を求められるダイアログが出てしまって運営の対応待ち。
- 10:30ぐらいまで何もすることがなかったのでマニュアルを読んでいた。
- せめて
/docs
だけでも最初に配布しておいてもらえればまだ良かったんだけど・・・
セキュリティリスクがっていわれてインスタンス立ち上がらなかったイエーイ #isucon
— しめにゃん (@_sisisin) September 8, 2019
- デプロイ周り整えるのに時間食いすぎた
よかったこと
- 準備してたところはちゃんと出来た
- redis用意、datadog apm用意、初期のconfig作成など
- ローカル環境整えたのは便利に活用できた人もいた(自分は
/users/transaction.json
の動かし方がわからなかったのであまり活用できず。。)
感想
最終的に目の付け所は悪くなかったと思ってるんだけど、自分の地力不足を感じた
たかがインデックス貼るスクリプト書くのに30分とかかけてて雑魚乙って感じになってしまった、もっと上手くなりたい・・・
あとデプロイ周りは書いて終わりじゃなくてデプロイしてベンチするところまでちゃんとやりたいとか、ボトルネック調査もっと上手くやりたいとか色々ありつつ
初参加だったけど手応えはあった気もする
ただちょっと微妙な点として、普段こんなに生のインスタンス触らないから練習負荷が高いのがなんともなあという気持ちがちょっとだけあったりも。
結構悔しいので来年もまた頑張りたい所存