いつも心にB+treeスロークエリをさらに切り詰めると、categoriesがそろそろ無駄になってきていたのでGolang側に乗せてもらうことに賛成する。filesortは殺しきる。indexはきもちええんじゃ。置いておいて、12時ごろの作業の続きとして、fs.file-maxやipv6の無効化などのカーネルパラメーターの調整を行う。nginxなんもわからんnginxのキャッシュ、圧縮、パラメーター調整を行う。これによって304がブラウザ上でしょっちゅう帰ってくるようになったが、多分実装ミスの気がしている。スコアが伸びず、nginxが悪いと推測しキャッシュと圧縮を外す。ポイント:推測ではなく計測結果で語るべき。「15時には複数台構成を導入しよう」と@anqouから提案を受けていたため、ちょっと焦りつつも@_nemohemがインスタンスの用意を始める。複数台へ複数台構成にするにあたって会議。@anqouがnginx,app,dbサーバーを提案し、私がnginx(+app),nginx+app,nginx+dbサーバーを提案。この構成については、ISUCON7予選を突破したチームのものを参考にしてました。nginxレイヤーで画像のアップロードに対応できるのがよいという話になり、構成を決定。今までのconfファイルなどを突っ込んだrepoを@anqouが用意してくれたため、nginx+DBサーバーを用意し、パラメーターの調整を始めました。ポイント:カーネルパラメーターの設定ファイルをrepoに移すことを提案しそびれる。やらかし!!!nginx-MySQL間の通信がTCPベースでどうもうまくいかず、@anqouに見てもらうように依頼。あれやこれやと試すもどうもつながらない。解決できず悶々とする。-pコマンドとか、mysqlコマンドとかをいろんなターミナルで叩くわけですよ。ログとかもたくさん出るわけですね?その時梅の仁に激震走る。SOCKETでいいやん!!!!!!!!!!!!!!!!!!!!!」ここに気づいてからはチームで爆速で修正し、画像のアップロードにも何とか対応してくれました。ブラウザ上で動くようになりました。ラストスパートクエリを最後まで見つめる。('on_sale','trading','sold_out','cancel','stop')とかが確実に不要と気づき、修正すると当該クエリが10倍速くなりご満悦。ベンチが再起動直後にfailする不安と闘いながらも、無事通ることが確認できたため再起動試験に移行。プロファイルの除去、サービスの再確認、ロギングの削除を行って再起動。数回ベンチを回すと、17:45に過去最高得点が出たので撤退。最終スコアは9670でした。打ち上げるモダン焼きを食べながら打ち上げ。感想部屋を見ながら「デッドロックか」「非同期API~~~!!!!!」と叫ぶ。UPDATEあったもんなあ、とクエリを見つめる側から大反省。打ち上げ中に順位の発表があり、10000点ほどがボーダーと知り死ぬほど悔しがる。初参加にしてはいい点が取れたよね、と大満足。私も無料で新宿に行きたい人生だった...椅子から100万円手に入れたかった...(?)と思いながら帰路につくと、9880点がボーダーと変更になりさらに悔しがる。参考スコアの発表となり、9880点のすぐ下につけていたと分かり泣く。今回のISUCONではアプリ側の改善の量が多く、いくらインフラ担当と宣えどもGolangの修正を担当すべきでした。N+1問題のクエリをもらい、すぐ解消できるようなクエリを発行するとかならできたでしょうね。アプリ側の人に任せっぱなしなのはよくなかったなあと。実装速度が遅いのも考え物ですね。あとアクセス解析という観点があることを感想戦で知りました。スコアの出し方が「売上のコイン数」であることをマニュアルからちゃんと読み取れば、アクセスの偏りや、売り上げを伸ばすために表示を調整するなど、まだまだ取り組めたことがあるように思います。新着一覧については、上記の制限を満たした上でよりユーザにあわせた商品の一覧を返すことで、購入の機会を増やすことができます。↑↑↑これとかね...!!!(マニュアルより引用)あとガバ大杉な!!!!!!!!!!!!!!!!!!ア!!!!!!!!!!!!!!!次があるなら、まずnginxを理解して参戦したいですね。インフラチューニングができるようになりたい。チームメンバーと、過去問の情報を提供してくださってる皆様、楽しい大会作ってくださった運営の皆様に感謝し私のISUCON参加記は終了です。コメントをキャンセルメールアドレスが公開されることはありません。