0.01mmの向こうへ

エーテル化して浸透する質量をもった残像についての考察

ISUCON 2013 にチーム「 50ms or die. 」として参加してきました

2013/10/06 の日曜日、 ISUCON 2013 オンライン予選に参加しました。
 
21. 50ms or die.
    @myfinder
    @kan
    @bonnu
このチームメンバでの参加は ISUCON2 に続いて2回目となります。

ISUCON2 の無念

ISUCON2 では最後の最後にベンチが fail して失格で終わってしまって、悔しい思いをしました。
なので今回はとにかく雪辱を晴らそう!というモチベーションでの参加。
 
個人的に前回は二人のパフォーマンスに圧倒されてばかりで何をすれば良いかもわからずに過ごす時間が多かったので(凹んだ)、今回はそれを教訓に「二人がやらなさそうな事をやる(コンフリクトを回避して精神的な消耗を避ける…)」というポジション取りを心がけました。

やったこと

  • まずは apache -> nginx に切り替え。
  • 設定全反映コマンド「 isucon_restart 」を準備(nginx、memd、supervisord 総リロード)。
  • 11211 が memcached いないのに動いてるので不審に思って port:11212 を参照するように。
  • nginx の gzip が意味ないのは見た瞬間に把握したので off で。
  • Starlet を試したり、max-workers と nginx processes とか keep alive を調整していくつかベンチ → 結局 Starman のままで行く事に。
  • コード変更の度に NYTProf して、上位のボトルネックをひたすらアプリ内コンテナ変数にキャッシュ。
    • user 情報、total_memo 件数。
    • render 内での uri_for 変換処理も render にクロージャを渡してキャッシュ。

みんな

  • @kan さんが10時ジャストに起床。1時間遅れで参加。おいしい。
  • DB への index 発行。
  • 不要な DB クエリの削除、改修。
    (この辺りは完全に @myfinder さん、@kan さんにお任せしっぱなしでした…)。
  • @myfinder さんメインで initialize.sh のメンテを始める。
    • 実行時起動スクリプト。DB 暖めて、インデックス貼って。
    • アプリケーションにシーケンシャルで curl リクエストして、基本的なデータを memd に載せたり。
  • nginx ログに request_time を出してベンチ実行 -> log を集計してホットスポットを探す。
  • @kan さんが github の private リポジトリ化をしてくれた。
  • markdown を Text::Markdown::Discount に変更。
  • たぶん他にもたくさんありそうです…

結果

2013/10/06 17:55:14 done benchmark
Result:   SUCCESS
RawScore: 10787.2
Fails:    0
Score:    10787.2
[OK] 結果を管理サーバに送信しました 

上位にはイマイチ食い込めませんでしたが、無難な結果でしょうか。

前回の「最後の最後に fail 」は避けられたかなーと思うんですが、事後に提出した AMI が無事に動いてくれるかは今でも不安です。

 やれなかったこと

  • workload を変えてベンチ調整
    (コア数 -1 で試したくなったのが 17:50 くらい…時すでに遅し)
  • forword_proxy 層での根本的なキャッシュ化・静的ファイル化とか
  • プロファイルから微改善できる事もまだたくさんあった気がする

感想!

今回はオンライン予選からの参戦ですが、好きな場所でやれるのでリラックスしてやれてとてもよかったです。

チームメンバにも恵まれて、楽しく参加できました。

開催してくださった LINE 様、カヤック様、課題を作成されたマスターの皆様、ありがとうございました!