hypermkt blog

ISUCON6予選にチーム「Slow Queries」で参加しました

September 18, 2016

日曜参加でした。前の木金が会社の開発合宿ということもあり1日休暇日を挟んでの参戦となりました。

結果は23,181点でした。くやしいいいいいい!!

isucon_result##チーム「Slow Queries」です

インフラ担当1名( じっぱーさん)、アプリケーション担当2名( 局長@hypermkt)、の計3名で参加しました。

当日に向けての準備

社内からも優勝者を出してほしいというあんちぽさんの願いのもと社内で模擬戦をしましょうということで社内ISUCONが実施されました。結果は追試時にサーバーの再起動に失敗し死亡で0点・・・。その後予選参加を決めた一部メンバーで週末に練習会を実施して2万点をどうにか出せるようになるも同僚に完敗・・・。

この悔しさをバネに予選では!と意気込み臨んだISUCON6でした。

実施したこと

私達が実施できたのは以下の箇所です。

  • インデックス調整

  • isutarのisuda統合

  • select * をカラム指定

  • Twigのキャッシュ利用

  • PHPセッションのRedis化

  • DBのSELECT結果をRedis保持

  • PHP-FPMをsocketにする

  • Nginxチューニング

  • OPCache有効

最初に悩んだのはCHARACTER_LENGTH

主に自分が担当して解決できなかった箇所です。SELECTのORDER BY するときに都度文字数を計算していたんで、それをやめてentry.keyword_lengthカラムにキーワード登録時に文字数を登録し、 order by keyword_lengthにすれば高速化できるのでは?と睨んでいたのですがFAILとなってしまい対処できませんでした。今振り返ればこれ自体は大した問題ではなかったのかもしれません。

一番悩んだ箇所は htmlifyの正規表現

正直お手上げでした。キーワード数が増えればいつか破綻する実装になっておりどうにかしなくてはいけないのは分かっていたのですが解決方法が全く思いつきませんでした。チームメンバーからはmecabを利用し形態素解析をする案もでていたのですが、誰も実装経験はなく具体的な実装例まで考えられませんでした。今更ですが「PHP 自動リンク」と検索し実装例を見ていればまた違ったのかもしれませんが、なぜ検索すらしなかったのか・・・(泣)

Nginx + MySQL + Redis + PHP7 on Dockerのローカル開発環境が遂に出来た!

過去2回の練習時に毎回悩んでいたのがPHPのローカル開発環境の構築でした。毎回デプロイして本番サーバーで確認するのは手間なので各自の手元で開発できる環境がほしいと思っていましたが、Redisがうまくビルドできなかったりいろいろ躓いて構築できませんでした。

今回は事前にNginx + MySQL + Redis + PHP7 on Dockerを用意し、当日状況に合わせて調整する予定でした。アプリケーション構成が複雑になっておりお昼過ぎまでかかりましたが無事にローカル開発環境が完成しました。そのおかげで修正・調査はとても快適になりました。じっぱーさんに圧倒的感謝です。

感想

自分への戒めとして恥を忍んで書くとアプリケーション担当としてあまり仕事が出来ていなかったと感じました。一部挙動が分からず読解に時間を要してしまったり、CHARACTER_LENGTHの箇所で時間を無駄に使ってしまったりとあまり得点に貢献できませんでした。短時間で既存の構成やライブラリの機能、オプション、仕様を把握するのも試されるコンテストであり、コードリーディングの読解力や発想が足りないという印象でした。

ただマイナスなことばかり書いてしまうとあれなので、プラスの面も考えるとまずは予選に参加できて良かったです。少なくとも過去最高得点です!これは一重に @tnmtさん@pyama86さんが社内ISUCONを実施してくれたおかげです。本当にありがとうございます。また唐突なお誘いにも関わらず一緒に参加してくれたチームメンバーにも感謝です!

来年も必ず参加してこの悔しさを取り返すしか無い!!次こそはーーーーーーーー!!!!


都内で働くWebアプリケーションエンジニア。主にサーバーサイド。最近はRuby/Railsでコードを書くのが楽しい。