isucon8本戦に出たものの惨敗しました
ものすごくありがたいことにisucon8の本戦まで出場することできました。 ぶっちゃけチームメンバーが優秀すぎて自分はほとんど何もできなかったけど!
本戦出場の証。アイコンは先日の技術書典5で出した本のキャラクター。
本戦でやったこと
クエリ改善
SELECT ORDER BYでフルスキャンするクエリをLIMIT 1つけて改善する。 しかしPHPのソース的にパフォーマンスにはそこまで影響しなかった。
諸々キャッシュしようとする
とりあえずredisで最高買値と最高売値をキャッシュしようとする
キャッシュしたと思ったらベンチマークコケてうまくいかない…キャッシュ削除のタイミングとかいろいろ悪かったかもしれない。
泥沼にハマりそうだったので途中で諦める
(ほんと時間を無駄にした…申し訳ない)
N+1問題に対応
for文ぶんまわしでパフォーマンス悪いところがあったので
SQLのクエリ修正したり、INDEX貼り直したりする。プログラム側のデータの詰替えも修正する。
これでちょっとスコアあがる。2200ぐらいになった。
他のメンバーの修正をマージする
ぶっちゃけ自分が出来たのはこれぐらいで、あとは他のメンバーの修正をマージしてフィニッシュしました。 DB専用サーバーを1個別サーバーに設けたり、nginx側でWebサーバー負荷分散したりしましたが最終的に4200ほどに落ち着きました。 最後ベンチマークうまく動かず超ギリギリで最後動いたw
反省点
反省が多すぎて困る…
- インフラはチームメンバーにお任せしていたが僕はdockerになれてないのですでに厳しかった。
- キャッシュは早々に諦めるべきだったなぁと…そもそも効果うすそうだったし。
- logのbulk_sendの存在に終了30分前ぐらいに気づいた…辛い
- enable_shareの存在に気づかず最後まで放置してた
- 途中でDataGripからisuconサーバーのmysqlに繋がらなくなりパニック
感想
- イベントは予選は本戦もめっちゃ楽しかったです。休日潰してでも行く価値あり!
- 本戦振り返ってみるともっと色々できただろ!って反省が多くてしばらくずっと悔しい思いしてましたw
- でも予選通過は17倍ぐらいの倍率だったらしいので、初めてのisucon挑戦で本戦まで行けただけでも良かったとしよう!
- dockerを捨ててるチームがあって、なるほどな…って思った。めっちゃ良い判断だと思った
- ちゃんとソースとドキュメントは読もう!思わぬ落とし穴が潜んでるぞ!
カップケーキ美味しかったです。その他のケータリングもどれも美味しくて運営さまには感謝です。