ぱいぱいにっき

Pythonが好きすぎるけれど、今からPerlを好きになりますにっき

#isucon で fail して きました(チームぽわわ2)

どうもマコピーだよ。

そんなことはさておき前回の予選から引き続き本戦のISUCONに行ってきたので報告させていただきます。

チームぽわわ2のメンバー紹介

  • @shogo82148氏

我がチームのリーダー。主にアプリケーションを担当。Redis::Fastなどのモジュールを書くも今回の懇親会で「もうXSは嫌です〜」と言う。

彼の本戦の記事
ISUCON3の本戦に参加してきた - Shogo's Blog

  • @9re氏

今回はnginxを担当。普段はAndroidのアプリを書いているそうです。

  • ぼく( @mackee_w )

インフラ周りを担当。

時系列を追って説明

10時





http://instagram.com/p/gecpvcoD6f/
戦場にきた

35分ごろにヒカリエに到着。他の2人は来ていました。
45分になってISUCON恒例のストーリー仕立てのレギュレーション説明が開始。

今回は「サービス作ったら社長がプロモーション打つでっていきなり行ってきて、負荷に耐えられませんって言ったら、そんなこともあろうかと4台まっさらな2コア1GBメモリのVPSサーバをドヤ顔で渡して去っていった」っていう設定なので、去年のISUCONと違って実はミドルウェアの設定も特にされていないサーバを使っていろいろしなければなりません。

あと、そのサービスっていうのが画像版Twitterで公開範囲設定もあるっていうことなので体調悪くなっていたのがこの辺り。

11時

サーバ情報が書かれた封筒を開封して作業開始

  • 1台目の既にアプリが動いているサーバに入って他のサーバにssh isu[2-5]で入れるようにした。
  • その間にリーダーがgithubにリポジトリを作って既存アプリをコミット。
  • @9reさんがopenrestyをビルドして僕がsupervisorで起動させるようにしてベンチを動かす。だが通らず。このときは後ろ(=アプリ)がまだ詰まっている状態だからダメなのかな〜〜〜〜ってなって、結局またapacheに戻す。
  • ベンチ中のtopを見てたらconvertなるプログラムがめっちゃいっぱい動いていたので、「予選の時のmarkdownを外部プロセスとして立ち上げるやつか〜〜〜〜」ってなってコード見たらやっぱりそうだったのでリーダーにImagerあたりに書き換えるようにお願いした。あとcartonで落とされたモジュールもリポジトリに含めちゃっていて、それを含んだリポジトリをローカルにcloneしたらアンチウィルスがImagerのバイナリに反応しちゃって、それでImager使ってないけれど既に入ってるよってわかった。ウケる。

12時

  • 僕はnginxでうまくいかないの調べてた。JSで作られたフロントエンドでちゃんと画像とか表示されてなかったので予選の時のsrcの指定がおかしいことになっているのと同じにおいかなとか思って調べたらjQueryでそこらへん組まれてて涙目。結局リバースプロキシするときにちゃんとヘッダを設定していなかったのが原因だった
  • リーダーのImager書き換えが出来たっぽいのでベンチを通す。でも通らない。よく見たら画像差分の差分が発生しているよと言われているっぽい。「pngがうまく変換できないっぽいんです」と言われたのでそこで作業ストップしてもらった
  • ごはんは麻婆豆腐丼。あとリーダーがこのあと中華あんかけ定食みたいな弁当を5時間ぐらい書けて食べてた。
  • あとボクは去年のサバ弁当、好きだったです。

13時

  • nginxも使えないし、Imagerも使えないし、よくわかんないなーって思ってたらリーダーが「キャッシュしましょう」と言って一回変換した画像ファイルをローカルにファイルでキャッシュするみたいなの書きはじめた。
  • convertを置換できないならもう横に並べて数量勝負だなーって思ってNFSについて調べ始めた。
  • ちなみにこのあたりで前もってお願いしてたSQLをEXPLAINして見てもらうのを聞いたらそんなに重たいポイントないっぽいのでクエリ改善のお仕事はやらないと決めた。

14時

  • リーダーのキャッシュする奴が書き上がって何度か試行錯誤してベンチが通る。このときworkload=1の1台でスコア6000ぐらいだった。topみてmysqlがconvertの上に上がってくるのを見てDBサーバを他のサーバに任せるのを判断して2台目でMySQLサーバの構築を始めた。1台目以外を使い始めたのはこの辺りから。
  • 何故か5台目にNFSの構築を始める。その間にリーダーにキャッシュとか画像の向き先を変えられるようにしてってお願いしてた。
  • MySQLの向き先変えられるような設定探した。僕がアプリのコードを見たのはたしかこの時だけ。

15時

  • NFS化とMySQL外出しが出来たのでそれでベンチを通す。内部の場合workload=2で9000ぐらいで外の場合はworkload=2で8000ぐらいだったのでこりゃいけるなってなって、アプリを他のサーバでも動かせるようにし始めた。
  • rsyncめったに使わない情弱だったのでググってた。そんでもって配信。配信するのにスクリプトは作らなかった。。。

16時

  • 3台目と4台目にアプリのセットアップ完了。このとき全部apacheを表に立てて裏にstarletのサーバ立ててた。そういえば前回やったmax-workersチューニングは全くやってない。
  • ./benchmark -w 2 -t 1,3,4でベンチ。15000ぐらいいった。一瞬一位になった気がする。

  • でもこのあとにLINE選抜が確か4万とかいってぶっちぎって特別賞を持ち去っていった。社会は厳しい。
  • そんなところで「そろそろnginxのやつ上げる」って@9reさんが言ったのでそれの対応とかしてた。アイコンのキャッシュとかフロントでするやつっぽい。ここで1台だけnginx化してベンチが通る。1台でworkload=4で13000とかいった気がする。

17時

  • 3台目と4台目にnginxセットアップ
  • 30分ぐらいで3台目と4台目ありでworkload=4で27000ぐらい。
  • 5台目CPUあんま使ってないしアプリ動かすかーーーーってなっていや、再起動試験するかーーーって迷って「1位じゃないと意味が無いし!!!!!!」ってなってアプリセットアップ開始。完了したのが50分で、1回コケて直してもらって最後に./benchmark -w 5 1,3,4,5でベンチしたら32000行った。この時はカヤック選抜を抜かして何故かガッツポーズした。そこで時間切れ。

18時

  • 終わった直後にカヤック選抜の人たちに「勝ったで〜〜〜」って言いに行ったらスコア指さされて最後の最後に35000とか叩きだされたことを見せられて落胆。その後カヤック選抜の人たちと人間だめになる椅子が置いてあるスペースで魂の抜け殻になっていた。

ビーズクッション CUBE L ブラウン

ビーズクッション CUBE L ブラウン

↑こういうの

19時

  • 結果発表。fail 0点だった。心が震えた。はかない。社会は厳しい。
  • LINE選抜チームの方々、おめでとうございます!!!!

最終的な構成

f:id:mackee_w:20131111023835p:plain

反省点

来年はちゃんと再起動して動くかやろう。

最後に

  • @さん、@さん、@さんをはじめ運営のみなさま、ありがとうございます。問題を見た時は鬼かと思いましたが、たぶんめっちゃ苦労されたと思いますし、懇親会で実際に苦労したって言ってたので、お疲れ様でした。
  • @氏、@さん、一緒に戦ってくれて本当にありがとうございます!!
  • あと参加した皆様が予選のあとやこの本戦のあとの知見や感想など、本当に興味深くて勉強になります。ありがとうございます。一年に一回、こういう会があってそれを眺めるだけでも楽しいのに、実際に参加できてめちゃくちゃ経験になりました。

そんなわけで今年の僕たちの夏は終わりです。次は81忘年会でまた会いましょう。