#infrapp2012 に参加してきた
ちょくちょくTLで流れてきていこーかなーと思ってたときにid:akuwano氏が行くと行っていて(スタッフだったw)、じゃー行くーと思って行った#infrapp2012。
場所は晴海ということで、大江戸線で無事到着。始まりは飲みでしたw
飲みと自己紹介とテーマ決め
各テーブルでわいわいしながら、自己紹介などもありつつ、チーム決めへ。
今回は、@kogeeさんと@pandeiro373さんとチームに。チーム名はこのときまだ決まってませんでした。
お題はWordpress, Redmine, Racktableが挙がって、それぞれ重かったり、使いづらかったりするんだけど、それをどうするかそれとももっとよい代替案を出すかということでした。
正直、これらをチューニングしてもフィードバックとして渡せそうなものがあまりなさそうで、せっかくみんな集まる合宿なんだし、もう少し違った観点からアプローチしたほうがよいんじゃないかと思ってました。
ただ、居酒屋ではそこまで深く堀り下げられなかったので、会場に持ち越しに。このとき@myfinderさんと対面で出会い真面目に話したのはいい思い出でございます。
んで、実践
居酒屋で飲んで、移動後会場にて。チームで各テーブルに分かれ、とりあえずユーザ作ったり、レポジトリ作ったり、チームでゴニョゴニョと。この時点である程度お酒が入っていた自分はどこまで進んでいたか未だに思い出せていないという状態ですいません… 公に謝罪を…
んで、やることですが、
ただゼロから作るほどちゃんと話してなかったこともあり、まず言語を対象として、チームのみんな触っていた過去がある&広く使われているPHPにターゲットを絞り、アプリはお題のWordpressを選択。PHPお久しぶりでございます。
んで、その上でこのWordpressをネタにどうしようかなというときに、せっかくPHPアプリのチューニングとかボトルネックの解消までのひと通りの流れを丁寧に追っておいたら、いいフィードバックになるんじゃねということで、「PHPアプリケーションのボトルネック解消を、丁寧に残していく!!」ということに決めました。24時前にちゃんと呟いて第一関門突破!!
こんなこと呟いてます。
#infrapp2012 今回はPHPの一般的なアプリケーションのチューニングチュートリアルを攻めてきますおー
そして、次の日
myfinderさんとずっとワイワイ飲んでて、二日酔い&睡眠不足がたかりながらも、作業再開。
前日からボトルネック調査のときに自分がどうコマンドを打つかとかどこら辺調べるかとかは共有していて、資料もどんどん進んでいたので、インフラ側のタスクはそのまま継続にしていて、アプリ側のアプローチも触れて行きたかったので、xhprofでコードのプロファイリングできる状態にもっていくことと、Redisを入れて、重い部分はキャッシュするという流れとなりました。
自分は完全にxhprofを動かすことに専念。xdebugでいいやと思ってたんだけど、Win機なんてないし、OS依存とかあまり好きじゃないこともあり、しかも使ったことないほうが面白いなと思い、xhprofにすることに。資料として見栄えがよくなるGUIはさすがというかなんというか…
とはいいつつ、なかなか言うこと聞かなくて悩ましい時間。PECLから持ってきていれたら、入れたあとどうしたらいいか全然分からなくて困った困った。Githubからcloneしたものはdocsしっかりしていて、ソースの構造が分かりやすかったので、入れやすかった。
ちなみに、これが動いたときのSS。
こんな感じでかかった時間とかコールされた回数とかがでます。
んで、次が結合の部分をグラフ化したもの。
一部ですが、カオスでしょう。
全体のも上げたけど、でかいんだこれが…
※Dropboxに生画像置いときましたが、1.2MBある&圧縮する気がなかったので、回線が早い時に見てくださいw xhprofで出力されたWordpressのプロファイル画像(1.2MB)。
こんな風にプロファイリングやったり、あとクエリ改善で9分のクエリを3秒とかにしてみたりしてました。本来はクエリでのアプローチより、別カラム設けたりして、参照すべきだとは思うけど、せっかくなのでクエリチューニングも明文化して、簡単にまとめたりしてました。
@kogeeさんが、Redisを呼び出せるクラス書いてくれて、そのあいだにも資料を整えていく流れに。この辺はこのあたりの履歴見るのがよいかも。
https://github.com/pandeiro245/php-tutorial/commit/d33c39a278db7e8aac69bf5a5c6e234cab5e7c48
レポジトリ周りやDBの各サーバでの構築、Redis周りは@pandeiro373さんがやってくれて、各自自分のやること淡々とやっていく。
そして、タイムリミット
んで、完成したのがこちら。チーム名は「マスダック2」です。チーム名どうしてこうなった…
https://docs.google.com/present/view?id=dfj27z2n_544d3m8msf2&pli=1
https://github.com/pandeiro245/php-tutorial
やっぱ手を動かして、その上でまとめるとなると一日じゃ足りなくて、荒削りではありますが、世間に少しでもフィードバックできるものができればという思いで作りましたです。
以下感想・反省。
- アプリ・インフラ含めて、一般的でためになりそうなものを明文化して残せたのはよかったと思う
- というか、こういう合宿でこういうタイミングじゃなきゃ、とてもじゃないけど作れない
- その一方でやっぱ荒削りな部分があるし、他の人のやり方も追加していったら、絶対面白い資料になると思う
- そして、PHPプロパーじゃないものも是非あるといいなと
- ただ、もうちょっとコード書いて手を動かしてもよかったかも
- ほとんどコミットしてねぇ…
- あと、チュートリアル向けのアプローチが多くなってしまい、あまりうがったことができなくて、無難すぎたかも…
- チームマスダックはうちが本物です。なぜチームマスダック2と二番手にしてしまったんだ…
- myfinder元気すぎるw
- そして、最後に二日酔いしてごめんなさい…
という感じでしたが、アウトプットしなければいけないというなかで、ひと通り頑張って形にして、すごくいい機会になりました。やっぱリミットがあるイベントはツライですけど、好きだったりします。
今回はドキュメント苦手な人もいただろうし、随分と巻き込んでしまいました。また次どういうことになるか分かりませんが、是非運営の力でよりパワーアップして、良いイベントになったらいいなと思います!!
一緒のチームで僕のこんなテンションに巻き込んでしまったのに一緒にやってくださった@kogeeさん、@pandeiro373さんありがとうございます!!そして、運営の方々、最後にスポンサーでサーバ提供してくれたNTTPC様、ありがとうございました!!
P.S.
今回みんなで作り上げた資料は、他のエンジニアも追記していけば、ちゃんとした良い資料になると思ってる次第であります。当日言われたコメントの一つに、新人の教育的資料になるかもしれないとあったし、それにはすごく共感したくて。
自分もわりと経験からだったり、人が打ってるの見て覚えるとかだったりして、非体系的な覚え方をしてるので、色々不安だったり、興味ある人がひと通り頭に叩き込むには良い材料にならないかなーと思ってます。
ただ、いいアプローチ思いつかないので、何か妙案あれば、いつでも@masudaKまで連絡くださいな!!とりあえずは資料誰でも編集可からかなぁ。
更なるP.S
いちお、Gistはっとく。
そして、Sphinxでまとめればよかったとばばさんに言われて気づいた今…