PHPカンファレンス 2010
PHPカンファレンス 2010 に出てきました。
概要
オフィシャルページ
http://phpcon.php.gr.jp/2010/
名称
PHPカンファレンス2010 / PHP Conference Janan 2010
開催日時
2010年9月24日(金)・25日(土)
会場
大田区産業プラザ PiO (東京都大田区)
PHP Then and Now
HiPHoP for PHP
講演者:Scott MacVicar - Facebookのエンジニア
http://sphotos.ak.fbcdn.net/hphotos-ak-ash2/hs006.ash2/33681_436706564097_670989097_4930931_596803_n.jpg:image:w504:h378
スケールの問題
ユーザーごとにコンテンツを別々のサーバにコンテンツを蓄積する必要がある
各ページが友人につながっているサーバがバラバラ
それが5億のユニークページがある
一人のページを作るのも数千のサーバがある
http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs673.snc4/61375_436706619097_670989097_4930935_6257097_n.jpg:image:w504:h378
HipHop for phpスケール問題の解決
HipHop transforms PHP into highly optimized C++
簡単に言うとHipHopはPHPを最適化しC++に変換する手法です
そのための2つのステップ
- コード変換
- ランタイム
PHPのコードをC++に変換する時
最適化したPHPをC++の関数、クラスに変換する
コンパイラの最適化
Manudane → 通常のコードMagic → ダイナミックな変換実行時に評価(evalなど)
- Static analysis - ファイル、依存関係の解析
- Type Inference - 定義されている変数の型の推定型のcast
- Code Generation - コード生成C++のソースが出力される
プロセスParserStaticAnalyser
型の評価Pre-Optimizer 実行されないコードを削除
Type Inferrence EnginePost - Optimizer さらに最適化
Code Generator コードが生成g++
http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs693.snc4/63292_436706669097_670989097_4930938_7706439_n.jpg:image:w504:h378
RuntimePHPのタイプのRuntimeをhiphopで再実装
コアのクラスを再実装
Runtime vs Generation
PHPのランタイムRuntime
HipHopで記述するとコード量が1/4ぐらいになる
サポート
ダイナミックファンクション
マジックメソッドの処理もサポートしている
コードの順番に依存するものはだめ
- Dinamic coding
- eval()
- create_function()
- preg_replace where using/edynamic deine.
- define($var,'value');
コンパイルするのには結構時間がかかる
HPHPi→hiphopのインタプリンタアプリケーションサーバーApacheもいらない、HipHopに組み込まれているwebサーバアプリケーションクラッシュすると、全部落ちる。。
PHPの多くのextensionをサポートしてます。
fb_parallel_query
MySQLのクエリーをパラレルでリクエスト
コードをジェネレートするのに時間がかかる
質問など
なぜ、HipHopという名称なのか?
hphpと呼んでいた→ノリでhiphop
これ以上PHPを最適化できないとなりHipHopにした
感想
PHPの歴史から始まり、(一応)PHPを利用した世界一大きなシステムであるfacebookの話はとても貴重な話でした。
これ以上最適化が出来ないと思い、PHPをC++に変換する手法を編み出したfacebookはさすがに、技術を持っていると思いました。facebookはPHPが書ければ行けるかなー。。コードは世界共通だし。
パフォーマンスを技術で2倍稼いでサーバの台数を減らすことができれば、facebook程大きなサービスには大きな意味があるのでしょうね。
写真:http://www.facebook.com/album.php?aid=212355&id=670989097&l=e6c7527186