梅の仁TL;DR:ISUCON9で予選敗退しました。悔しい!!!!!!!!これはなに初めまして。皆さんご存じ梅の仁です。ひょんなことからISUCONに初参加してしまったフロントエンドマン、梅の仁!「フロント改善してやる」と思ってたら、フロントはほぼいじれないしバックエンドが迫ってきた!果たして持ち前の才能で「あれ?俺、なんかボトルネック解消しちゃいました?」となるのか!?いきさつISUCONの存在を学友から聞き、興味が湧いていた所に@_nemohemからお誘いを受けました。「わ~い@_nemohemと一緒うれしい参加する~」と伝えた所、@_nemohemが@anqouを連れてきたので、「あれ?2人ともヤバくね?マジ卍」とか思っていました。私は二人とも面識があったんですけど、@_nemohemと@anqouにはあまり面識がなかったようで、最初の顔合わせの時にげらげら笑った記憶があります。私の認識の中でのチームメンバーはこんな感じ。わし:フロントエンドマン担当する予定だったことそれとなくインフラ担当クエリを見つめる担当スピリチュアル・エンジニアリング担当@_nemohem:アプリや人工知能系などモダンな開発にお強い人@anqou:C++と言語処理大好きな深海魚鯖管。言語を理解するのにコンパイラを実装するやつ。二人に任せる予定だったことGolang前日譚ISUCONの過去問を解くまでは、フロントエンドを普段書いているのでせっかくならフロントを改善しようと思っていました。「フロントってそんなに改善ポイントあるのかなあ」と思っていたら、フロントは競技自体に含まれないと発覚。他チームメンバーがGolangを理解しそうで、かつ自分がMySQLぐらいしかわからなかったので、MySQLを主軸としてインフラを担当すると決意しました。そこからは、MySQL知識に特化すべきと、書籍を数冊読んでみたり、App-Go-Tourをかじったりしました。ISUCON過去問をvagrantで提供してくださっているrepoがあったので、「vagrantってなんやdockerとはちゃうんか」とアワアワしながら解いたりもしていました。あと、「インフラ担当は全体の司令塔になるべきだよ」という参加記を読んでいたので、他のチームの過去問の解法を見て、様々な構成を知識として仕入れるようにしていました。私では司令塔になり切れず......アプリをやってくれる二人、割と司令塔いらずだったと思います。始動@_nemohemがインスタンス建てと初期設定、@anqouがマニュアルを読んでいる横で、環境構築とレギュレーションを一読しました。SSH通ってからは、まずみんなでアプリの動作確認、ベンチマーカーの挙動を確認しました。「椅子借(?)り」は最高の命名センスだと思います。アプリを一通り理解したのち、MySQLのログの収集を始め、スロークエリの把握と伝達を行いました。WorkbenchをSSH接続させようとしましたが、過去問のようにうまくいかず断念。ここらへんでスキーマを眺めてると、mediumblobを使ってるテーブルがあったため「ISUCONの過去問で見たやつだ!」とわくわく。@_nemohemが固定データのDBを調査していた気がします。インデックス貼りN+1問題を解決してる人(@anqou)やコード読みをしている人(@_nemohem)の横で、あれやこれやとインデックスを貼り、初期段階でのスロークエリを撲滅。ついでにMySQLのパラメーターの初期設定を投入しました。あと画像ファイルの配信がshippng.img_binaryなのかを@_nemohemが特定し、DBは関係ない?ぽいと分かったので、nginxの設定をしようとしましたがよくわからず断念。ポイント:そう!インフラ担当と宣いながら!nginxの勉強がおろそかだったのである!原因としては、/webapp/publicのパス間違えと、locationの指定ミスでした。静的ファイルの場所を突き詰められてなかったのが原因です。このせいで@anqouの負担が2倍になりました。ごはん一つ目のN+1が解決の目を見たらしいので、ベンチを回すとなんか動かない。wait-timeoutの調整で対応しました。ここらへんは過去問を解いていたのが活きました。ここで名残惜しいながらもいったん昼食。@anqouと食べたものが一緒だったので、以下@anqouの参加記から引用します。諦めてご飯を食べに行く。店に入るほどの余裕はなかったのでローソンで冷やし中華を買って食べた。麺がゴムっぽかったが、お腹も減っていたのでまあまあ美味しかった。タレで味がついていれば大抵の物は食えるんだなぁ。