おじゃまぷよ系エンジニアメモ

主にスマホネイティブ関連Tips。たまにWebも書きたい。お腹はぷよぷよ

isucon8本戦に出たものの惨敗しました

ものすごくありがたいことにisucon8の本戦まで出場することできました。 ぶっちゃけチームメンバーが優秀すぎて自分はほとんど何もできなかったけど!

本戦出場の証。アイコンは先日の技術書典5で出した本のキャラクター。 f:id:masahide318:20181022194854j:plain

本戦でやったこと

クエリ改善

SELECT ORDER BYでフルスキャンするクエリをLIMIT 1つけて改善する。 しかしPHPのソース的にパフォーマンスにはそこまで影響しなかった。

諸々キャッシュしようとする

とりあえずredisで最高買値と最高売値をキャッシュしようとする
キャッシュしたと思ったらベンチマークコケてうまくいかない…キャッシュ削除のタイミングとかいろいろ悪かったかもしれない。 泥沼にハマりそうだったので途中で諦める (ほんと時間を無駄にした…申し訳ない)

N+1問題に対応

for文ぶんまわしでパフォーマンス悪いところがあったので
SQLのクエリ修正したり、INDEX貼り直したりする。プログラム側のデータの詰替えも修正する。 これでちょっとスコアあがる。2200ぐらいになった。

他のメンバーの修正をマージする

ぶっちゃけ自分が出来たのはこれぐらいで、あとは他のメンバーの修正をマージしてフィニッシュしました。 DB専用サーバーを1個別サーバーに設けたり、nginx側でWebサーバー負荷分散したりしましたが最終的に4200ほどに落ち着きました。 最後ベンチマークうまく動かず超ギリギリで最後動いたw f:id:masahide318:20181022200901p:plain

反省点

反省が多すぎて困る…

  • インフラはチームメンバーにお任せしていたが僕はdockerになれてないのですでに厳しかった。
  • キャッシュは早々に諦めるべきだったなぁと…そもそも効果うすそうだったし。
  • logのbulk_sendの存在に終了30分前ぐらいに気づいた…辛い
  • enable_shareの存在に気づかず最後まで放置してた
  • 途中でDataGripからisuconサーバーのmysqlに繋がらなくなりパニック

感想

  • イベントは予選は本戦もめっちゃ楽しかったです。休日潰してでも行く価値あり!
  • 本戦振り返ってみるともっと色々できただろ!って反省が多くてしばらくずっと悔しい思いしてましたw
  • でも予選通過は17倍ぐらいの倍率だったらしいので、初めてのisucon挑戦で本戦まで行けただけでも良かったとしよう!
  • dockerを捨ててるチームがあって、なるほどな…って思った。めっちゃ良い判断だと思った
  • ちゃんとソースとドキュメントは読もう!思わぬ落とし穴が潜んでるぞ!

カップケーキ美味しかったです。その他のケータリングもどれも美味しくて運営さまには感謝です。 f:id:masahide318:20181022204555j:plain