2011年9月7日水曜日

#isucon で優勝ビリとりました。

ブログに技術的な事以外書きたくないのですが、本件については書かなければならないでしょう。
という事で、つまらないタイトルでpostした通り#isuconに参加しました。
あの日何を考え参加したのか、思い出しながら書いてみます。
くわしい技術的な事は、他の方が沢山書いてくれているので、いまさら詳しく書くこともないでしょう。

当日の方針等は一応考えて参加しました。
一人で参加したので、簡単な事はさっさと済ませて、効果がなければ深追いせず、一つでも効果があれば儲けもの。効果がなければ次の策。時間が余ればじっくり取り組むといった方針で挑みました。
あまり事前調査や予習をしても自分本来の力ではありませんし、むしろドタバタした感じで自分がどこまでやれるのか試してみたいという心情でありました。

実際には次のような方針
環境はちょいちょい整えるが、こだわる時間もないから、screen、ngrepだけはインストールしよう。
(yumで簡単に終わらせる。ngrepはソースからでも簡単にインストール)
apacheはさっくりnginxへ変更
(これにはまった。)
mod_pagespeedをインストール
(結構前に話題になったけど今はあまり聞かない。誰も覚えていないんじゃないかという淡い期待)
mysqlはHandlerSocketで高速化
(参照だけでも早くなればいいんじゃないか。ここに時間をかけよう)

でまぁ当日。

phpによる実装ないじゃん。

これは痛かった。
自分は普段プログラムを書かないので、言語の事はさっぱりな訳で。
ましてや会社で使ってない、node.jsやrubyとか無理なんですよ。
ま実際出来たとしても、あのメンバーに勝ち得る訳ない。(←ここ後ほど重要。)
この段階で心半分以上折れました。orz

とまぁぼやいても始まらないので、nginxにしようと。
で他の方が書いてらっしゃる@kazebroさんの罠にまんまとはまりました。
ngrep入れたのだからちゃんと見ればよかった。
(↑実際そんな精神的余裕が持てませんでした。)
フロントはapacheでappサーバ2台にリバースプロクシーでリクエストを渡しているだけ。
↑ここに対してもはまった。
nginxのリバースープロクシー書くにしても数行で済む設定なので、間違う訳ない。
と思って、設定ファイルを穴が開くほど見直し。
でもよくわかんらん。何がわるいか。

設定書き間違えたかな?そん訳ないよな?ひさびさにビルドするから何か不足があるのか?いやpcreは入れたしな。
とかなり自問自答。

実際当日のプロクシー設定はIPアドレス指定によるものだったのだが、ここが悪いのか?
まぁphpじゃないんだからやることやるしか無いよな。
と思いhost名を指定。
やはりsyntaxミス?
nginx -tによる構文チェックとかすっかり忘れていたので、nginx再起動を繰り返す。再起動なので余計に時間がかかる。
やっぱり、わからない。
これは何か細工があるなと推測。一人なので出来ることは少ないんだし深追いはしない方針なのでスルー。
だいたいリバースプロクシーしかしてないんだから、ものすごい改善にはならない。

あきらめて、mysqlを見てみる。(この時点で13時は過ぎていたはず。)
クエリはngrepを使ったか余り思い出せないが、問題のSQLは簡単にわかった。
ただしこれをどうやってruby等に組み込めるか?
rubyのソースはクエリがまとまっていて見やすい。


ただ、いろいろあるクエリーの一つや一部だけポート番号を変えて、HandlerSocketにアクセスする文法がわからない。(おちついて考えれば変数上書きすればいいだけのはず。)
だいたい今日9/6に知ったことだけど、DESCとかコーディングで頑張るのが辛い。


あと座席の都合でmysqlに詳しい方が目に入る。
この方がいる場所でチューニングしても太刀打ちできないしなぁ。とも思う。


という訳であきらめapacheのmod_pagespeedをインストール。
あっさり入るが予習した訳ではないので、設定ファイルの項目や効果がわからない。
でも待てよ、画像やjsファイルが少ないんでそもそも効果が少ないんじゃ。。?


以下apacheに手を入れるかmysqlまわりに手を入れるか、ちょっと調べて挫折。
これを繰り返していた。


という事を15:00までやってた気がする。
何もできないから、mysqlのバージョンでも上げよう。
rpmでインストールされていて見慣れた感じ。
いくつかrpmを取得してインストールできたが、upgradeとかまともにやった事がないので、時間切れ。
無念。


で反省点。
他のメンバーにとらわれず自分の出来ることを着実にやればよかったと。
少しでも成果があればいいじゃないか。そもそも一人なんだし勝てる訳がない。
といまだ後悔しております。


でも良い思い出になりました。
ひさびさに、難題を与えられて苦労したりするシュチュエーションを思い出しました。
ものすごい、いい意味でのプレッシャー等感じました。


会場の様子など思い出した事と言えば、無線LANが切れると一斉にやる事が無くなるので強制休憩w。
自分は途中でPocketWifiにしてしまいました。
また笑えるのが、競技中と懇親会での落差。
懇親会、京都に帰る方々除いてほぼほぼ全員参加というのもイベントとしては珍しい。
皆さんかなり盛り上がってましたからね。
自分はよく読むブログの半袖さんや、主催の方といろいろ話して、ブログ記事に書いてある事のちょっとした疑問等が晴れました。


こんな楽しい時間を提供してくださった、運営の方々には非常に感謝しております。
参加者も凄腕の方が集まり楽しませていただきました。
熱かった。勉強会でもなんでもそうだけど一過性のブームで終わって欲しくないと思いました。
この熱さが後世というほどでもないけど、何年も続けば嬉しい。
ぜひwikiぺディアに残したい。#ISUCON。誰か書いて(というか自分がこっそり書けばいいか。)


次は見るだけ枠の人の為に、screenコマンドでwatch -n 1 pstreeとかした結果が延々写るモニター等があったらうれしいと思いました。
まぁpsとかでもいいけど。それだけ見てニヤニヤする人専用の部屋(というかパーテーションでも可)があればサーバ台数用意しなくても見学だけもかなり盛り上がる。(俺的には絶対盛り上がる。)


という事で次回類似イベント、10/1に参加します。
今日別のイベントでお会いした方も出場されるようなのでまた楽しみです。
今度は着実に出来る事をやろうと思う次第。

こんな駄文を最後まで読んでくれた方ありがとうございます。

0 件のコメント: