チューニンガソン2に参加してきたったー

ほぼT/Oです。参加させて頂きましたが、ほぼ何もできませんでした。
チューニングとか出来るわけでもなく、フロント寄りのエンジニアが参加してみた。
そういった場合に何を考えたか?といった目線で読んでいただければと思います。
(2011-10-03 二行を追記)
結果は11位以下ということで分かりませんが、極めて最下位に近いと思います。
PHP5.4にするだとか、nginxを使うだとか、APC入れるだとか
isuconで@fujiwaraさんがされていたIPTablesのOFFだとか、
色々とできそうな気はしていましたが、実際にあの場に入ると忘れちゃいました。
何だかスマホの充電をさせてもらいに寄ったくらいな感じでした。

内容はほぼ前回と同じでソフトウェアの改変は一切せずにインフラのみでチューニング。
対象はMediawiki、レスポンス1秒くらいかかりますよというもの。
更に無作為に抽出したURLのリストからの一度きりのアクセス(閲覧のみがチェック対象)
正直、この時点でキャッシュに載せるのは不可能だろうなと思考の対象外に。
※いくつかの方法は思いつきましたが試すには至らず(後述)

今回のチューニングはアプリケーション作者が避けたかったであろうシチュエーション、
最初のアクセスに負荷を背負ってもらうというポリシーを攻めるというものでした。
作者さんからすれば、ノコギリを作ったけど、釘を打つのに使われてた><
という感じでしょうね。

また、インスタンスを二つ提供されましたが、DBの設定を変更できないということで
APとDBにそれぞれ分けるという運用が出来ない点で頑張るだけムダかなという点、
出来たとしてもネットワーク越しになり、遅くなる懸念もあったためパス。
インスタンス一台は累積負荷を減らすためだけに終了前に慌てて素で用意だけ。

結果を聞くと一位の方は"disk_cache_module"を使われたそうでした。
ちなみにこのモジュールを知りませんでした。知識のなさ自慢ですね><
上位の方たちは前回の@methaneさんに倣いPHP5.4のコンパイル、前回実績のあるAPCの導入、
mediawikiのチューニングページにあったmbstringのOFF等をされていた様です。

結果的に何も出来なかったのでどうやってまとめようかなと悩みましたが、
いくつか思いついたチート、実際に業務で行うことになった場合どうするか?
という2点で書いてみたいと思います。

チート

前回の優勝者でもある@methaneさんのインスタンスにリダイレクトをかける

実際にコレを実行すれば、チェックの対象外だったと思うとのことでした。
2回目だからこそ出来るとことだし、これはかなりやりたかったなーと思いますね。

例えば、MySQLを動かさない

今回のレギュレーションではMySQLの動作は単なる足枷でした。
どういうことかというと、『登録はする、だがそれだけだ』ということです。
つまり、それっぽいリスナさえ動いていればOKなわけです。
即座にダミーの返却値を返すプログラムを書ければよかったのですが、漏れたらエラー
また、MySQLのダミープログラムの書き方を調査する時間もなかったのでムリポでしたね。

キャッシュを作る

アクセスのタイミングでキャッシュしていくのであればテスト前にアクセスを発生させればいい
とはいえ、truncateしますよというアナウンスはあったのでタイミングを考えないと!

  1. Apacheの起動シェルに書き込む
  2. cronを設定して1分単位で回す

最初に1を思いついたのですが、タイミングがApacheの起動->trunacateになると意味ないですね。
で、cronを回すという手も考えたのですが、1分でそもそも終わらないし、
直前でtruncateされたらバッチがガリガリ動いてる中でテストを迎えるという罠。。。
どう考えても現実的ではないなと思いました。

実際にやるであろう対策

懇親会まではスクレイパだと思っていたのですが、ソースを見た方のお話を聞くとクローラもしてる?
だとすれば、最小のコストで済ませるためにクローラ部分をコメントアウトしますね。
その上でJSでユーザに分からない程度にバックグラウンドでリクエストを投げる。
ページ内のリンクのキャッシュさえ出来れば上々ですし、
次のページを神速で開くユーザというケースはさすがに考慮しません。

最後に

@zakiさんのチューニンガソンを開く意図を聞いて、なるほどーと思いましたが、
知りたいという方は是非、チューニンガソン3に足を運んで自分の耳で聞いて判断してください。
さすがに参加すべき方に参加してもらいたいのですが、席が余っていたら懲りずに参加したいと思います。
スポンサーのAmazonWebService, Gihyo, VOYAGE GROUP(Alpha順、敬称略)、
主催のゼロスタートの皆様、スタッフとしてサポートされた方々、
楽しいイベントをありがとうございました。