ISUCON9予選に参加した話
こんにちはhelloooです。弊グループのアドベントカレンダーを埋めるネタが思いつかなかったので9月に参加したISUCONについての振り返りをしようかなと思います。
ISUCONとは
ISUCONは2011年から行われているコンテストで、課題となるアプリケーションを最も性能が出るように修正したチームが優勝というコンテストです。
チームについて
大学の友人たちと一緒に参加しました。言語はチームメンバーの2/3が慣れているRubyで参加しました。チーム構成はインフラ:1名,アプリ:2名
で行いました。
実際に編集したコードはこちらです
取り組み
使用ツール
- pt-query-digest
- alp
あとなにか使っていた気がするが記憶を失った。
実施内容
N+1の解消
ベンチワークを回した結果GET /new_items.json
が遅すぎたのでslow queryを消すことに。一つ一つ修正していくとスコアが上がっていた。
Seller_list
buyer_list
についても同様に修正def get_category_by_id
の修正に合わせてfixを行う。
indexを張る作業も同時に行っていた。
1台構成を3台構成に変更
初期起動時は1台構成であり、web + app + db
がすべて一台で起動されている状態なので
- 1台目:WEB+APP
- 2台目:App +DB
- 3台目:APP
の構成に変更した気がする。
nginx.conf・mysqld.confの設定修正
キャッシュ周りを主にやってもらった記憶がある...
わかっていたが対応できなかったもの
- 外部API呼び出し
- 1: db 2:app 3:app構成
- 一度実施したが、画像のURLが違うというエラーが発生。画像アップロードを含むエンドポイント
/sell
と/upload
を片方のAppに流すようにしたが解決せず。- 今でもなんでだめなのかいっちょんわからん
- 一度実施したが、画像のURLが違うというエラーが発生。画像アップロードを含むエンドポイント
反省・所感
- N+1については修正までのフローが去年に比べ早くなりスコアが上がりやすくなったと感じています。 ただindexについては感覚でやっていることがあり、もっと知識をつけるべきだなぁ
- 方針についての判断を早くすべきでした。対応できなかったものについてどちらも中途半端に取り組み結果が出ずに終わりました。どちらに取り組むかを決めて動いていれば本戦のスコアに届く未来があったと思うと悲しみが深いです。
- Rubyでの非同期処理について少し学んで起きましょうね!!!!!
終わりに
順位は161という形で終わりましたが去年よりも順位を上げているので成長はしているのかなぁと思います。 ISUCONは業務ともつながりが深く誰もが楽しんでもらえるコンテストですので社内開催をしても面白いイベント&技術力向上になると思いますねぇ....