復興ログ

未来の被災地にいるアナタと数十年後のキミたちへ。すべての記録を残します。

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

講演者:ラスマス・ラードフ(Rasmus Lerdorf) - 発表資料

http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs688.snc4/62788_436706529097_670989097_4930927_7785479_n.jpg:image:w504:h378

PHP 5.3 について

一週間前にPHP 5.3.3 をリリース
PHP 5.3.3 Released!

4にくらべ5はかなり高速になっている

5.3 の新機能について

http://sphotos.ak.fbcdn.net/hphotos-ak-ash2/hs006.ash2/33681_436706559097_670989097_4930930_5359508_n.jpg:image:w504:h378

Facebookのコンテンツについて

  • 80億分を全ユーザがfacebookで使っています
  • 50億のコンテンツが毎週共有されます
  • 30億の写真が毎月アップされます
  • 10億のデベロッパーがいます

スケールの問題

ユーザーごとにコンテンツを別々のサーバにコンテンツを蓄積する必要がある
各ページが友人につながっているサーバがバラバラ
それが5億のユニークページがある
一人のページを作るのも数千のサーバがある
http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs673.snc4/61375_436706619097_670989097_4930935_6257097_n.jpg:image:w504:h378

PHPfacebookにおける問題

  1. High CPU - PHPはプログラム言語の中で最もメモリを使う
  2. High Memory - メモリの使用量が多い
  3. Reue of PHP logic in other system - PHPでコーディングしたのを他の言語で再利用
  4. Extensions are hard to write for most PHP developers - PHPのエクステンションを書こうとするのは敷居が高い。

HipHop for phpスケール問題の解決

HipHop transforms PHP into highly optimized C++
簡単に言うとHipHopはPHPを最適化しC++に変換する手法です

そのための2つのステップ

  1. コード変換
  2. ランタイム

PHPのコードをC++に変換する時
最適化したPHPC++の関数、クラスに変換する

コンパイラの最適化
Manudane → 通常のコードMagic → ダイナミックな変換実行時に評価(evalなど)

変換プロセス
http://sphotos.ak.fbcdn.net/hphotos-ak-ash2/hs353.ash2/63292_436706664097_670989097_4930937_356475_n.jpg:image:w504:h378

  1. Static analysis - ファイル、依存関係の解析
  2. Type Inference - 定義されている変数の型の推定型のcast
  3. 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をサポートしてます。

http://sphotos.ak.fbcdn.net/hphotos-ak-ash2/hs353.ash2/63292_436706679097_670989097_4930940_4385610_n.jpg:image:w504:h378

fb_parallel_query
MySQLのクエリーをパラレルでリクエスト

コードをジェネレートするのに時間がかかる

会場でのデモ

とあるコード
普通php
 4.009秒
HioHop
 1.118秒

通常は2倍位の高速化

質問など

なぜ、HipHopという名称なのか?
hphpと呼んでいた→ノリでhiphop
これ以上PHPを最適化できないとなりHipHopにした

感想

PHPの歴史から始まり、(一応)PHPを利用した世界一大きなシステムであるfacebookの話はとても貴重な話でした。

これ以上最適化が出来ないと思い、PHPC++に変換する手法を編み出したfacebookはさすがに、技術を持っていると思いました。facebookPHPが書ければ行けるかなー。。コードは世界共通だし。

パフォーマンスを技術で2倍稼いでサーバの台数を減らすことができれば、facebook程大きなサービスには大きな意味があるのでしょうね。

写真:http://www.facebook.com/album.php?aid=212355&id=670989097&l=e6c7527186