第50回 PHP勉強会に参加しました。

今週の月曜日、第50回のPHP勉強会に参加してきました。
http://events.php.gr.jp/events/show/90

これまでPHPを触る機会が少なかったのですが、良い機会だと思い、参加してみました。
それから、ブログに書く事も勉強会の一環とのご指摘があったので、エントリーしました。

内容的には、オープンソーシャルがテーマという事で、それほどPHPの理解が浅くても理解して聞く事ができました。


当日は3人のスピーカーの方が発表をされました。


1. mixiアプリについて(Weboo!さん)

mixiアプリがスタートして数ヶ月が過ぎ、ミクシーアプリの概要から、運用上の大変なポイントを教えていただきました。
mixiソーシャルグラフを用いたアプリであって、友人とつながってゲームを進めたりすることに意義があるとの事。
PCでは、OpenSocial Javascript APIの理解が必要。モバイルでは、OpenSocial Restful Protocol。
mixiでは、Open Social用のAPIとミクシー独自のAPIがあるそうです。
大事なのは、もしヒットした時の対策。ヒットすると、数千万〜数億PV/日のアクセスがくるかもらしいです。ユーザーがリクエストしてから、10秒以内にレスポンスを返す必要があります。OpenSocial APIを使う部分では、下手をすると何度もコンテナと何度もリクエストを繰り返す事もあるので、外部サーバーにmemcachedを入れたりする必要があるとの話でした。


2. PHPでWEB開発を行うようにしてオープンソーシャルアプリを作る(KuniTsujiさん)

普段CodelgniterというPHPフレームワークで開発をされるらしいですが、Flashを使わずに、Mixiアプリが作れないかという事で、取り組みをされた事のお話でした。
モバイル版とPC版で比較した場合、モバイル版のほうが、取り組みやすいとの事で、今回はモバイル版作成でのポイントが中心でした。
Mixiアプリを作る際に、GadgetXMLが必要ですが、GadgetXMLの内容をPHPで自動生成させることで処理してるそうです。

まず必要な処理として、以下のものがあるとの事。
1.gadgets.util.registerOnLoadHandler(init)でVIEWER,OWNER,アプリ情報を取得する。
2. gedgets.io.makeRequestを使ってサーバに接続し、リソースを取得する。
3. ページ移動するため、gadgets.views.requestNavigateTo(supportedViews[view].params);が必要
他に取り組んだ事として、OAuthの処理を意識させないライブラリを作った事。
大事なのは、やはりサーバのインフラ周りや、膨大なリクエストをどう捌くか、DBの負荷をどうするかよく考える事が重要だろうとの話でした。


3.運用した気になるモバイルオープンソーシャル (個々一番)
昨年から開発を行い、リリースされたmixiアプリモバイル版「まちつく!」についてのお話でした。大変な苦労があって、ヒット商品としての現在があるとの事でした。
リリース後に遥に予想を超えるユーザーが来て(リリースしてから、毎日10万人会員が増えるペース…) 、様々な実施された対策をお聞きしました。
まず、画像生成用の外部サーバーのロードアベレージが一番ネックだったので、画像生成をキュー処理に書き換えたり、ボトルネック処理を全部つぶしたりして当時対応されたそうです。あとは、memcachedの適用範囲を大幅にしたり、DBマスターを分割したり(ORMを使ったり)することが負荷対策に有効だったようです。
いろいろ苦労をして負荷対策をしたけど、最大の負荷対策はサーバーのランクを上げる事で解消できたそうです。


すべての発表者の方を通じて印象的だったのは、インフラの整備をしっかりして置かないと大変になるという事でした。
オープンソーシャルアプリの開発は、いつヒットするかもしれないし、最初から大規模なインフラの準備は必要ないかもしれないけれど、もしヒットしたら、それからは長いアプリと負荷対策と改修の付き合いの始まりとなる。何か他にまた勉強したことがあればエントリーしてゆこうと思います。

運営者の皆様、スピーカーの方々、そして会場をご提供くださったコンテンツワン様、貴重な機会をありがとうございました。今後とも宜しくお願い致します。