flavorじっくりコトコト煮込んだみかん2。知らないことを知りたい。2014の予選をほぼ一人で戦うハメになった話eventAMI提出した!2人目が起きたのが14時、3人目は17時という厳しい状況の割には頑張ったと思う。10位には入れなかったけど。28まとめリモートでタイムゾーンが違うと大変Pythonを選んだRedisのみを使う実装に書き換えた提出スコアは32710準備したこと事前にチームで昨年の問題を解きました。プロファイリング方法を全然わかってなかったので、制限時間内にほとんどスコアが伸びませんでした。1週間かけて勉強し、MySQLのスロークエリログやApache/nginxのログを集計する方法を知りました。継続的にプロファイリングできるようにするのが大事だと痛感したので、以下の様なツールを作りました。ベンチマークを回すと同時に、以下の様なデータを収集する。収集したデータを集計し、Jenkins上で成果物として保存し、スコアのグラフをプロットする。やったこと10:00-開始時刻になっても他の2人が現れないので、一人で作業することに。最初のところで、案内された手順でRuby実装が終了しない問題や、isuconユーザーでSSH接続できない問題などでかなり手間取ってしまいました。ブラウザでの挙動、DBの構造、稼働中のミドルウェアを確認をした上で、事前に準備したツールでリクエストログやスロークエリログの集計などを行いました。11:00-アプリのソースコードを読み、データ構造を変えたらBAN/Lockの判別はO(1)にできるし、JOINとかないからKVS向きだと判断しました。上位陣はMySQLのままで高いスコアを出していたので読みが甘かったかもしれません。インメモリで高速に処理できてかつ永続化もできるKVS、ということでRedisを選択しました。Redisはこれまで話を聞くだけで実際に使ったことなかったですが、Pythonから簡単に使えました。tagomorisさんがISUCONは新しいことに挑戦できる場だと仰っていたのはほんとそう思います。*112:00-ご飯を食べ、Redisをインストールしました。yumでインストール出来ないのは辛かったです。Redisの使い方を勉強しながらアプリを書き換えました。書き換えられるか自信がなかったので、少しづつ書き換えて確認する戦略をとりました。上がったのが13:30頃でした。14:00-14:00になってようやく2人目のメンバーが参加しました。状況を把握できるわけではありません。login_logに初期データがあることに気づき、reportが通るようになったのが14:20頃。レポートの出力順をチェックされていたらどうしようとドキドキしてましたが、無事SUCCESS。Redisのデータがちゃんと永続化されているか自信がなかったので、サーバーを再起動して問題ないことを確認。nginxで静的ファイルを返すよう設定してもらいました。初期化処理でMySQLからRedisにデータをロードする処理が遅くてイライラしてきたので、予め初期化済みのaofファイルを用意して置き換えるようにしました。これによって軽快にベンチを回すことができるようになりました。nginxで静的ファイルを返すとContent-Typeが正しく設定されないという罠に引っかかって二人で直しました。addressというエラーが出るようになります。