HipHop for PHP

February 9th, 2010 by naoya | Filed under day.

HipHop for PHP の技術的な講演動画が ustream にあったので、チェックしてみました。動画は、全部で 40 分弱くらいですが、講演自体は 20 分くらい、その他は質問でした。

以下、動画からのメモです。

  • CPU の高い使用率が問題になっていた
  • 10,000 台のウェブサーバ
  • それぞれのリクエストに 800 ミリ秒かかっている
  • コードベースが巨大になるにつれて、さらに遅くなる
  • ハードウェアは、フリーではない
  • 言語ごとのベンチマークした結果の CPU の使用率
  • CPU の使用率が低い順 No1: C++, No2: Java, No3: C#, No4: Erlang, No5: Python, No6: Perl,  No7: PHP
  • PHP と Perl は同等、C++ や Java に比べると10 倍くらい遅いという結果
  • 高いメモリ使用率が問題
  • - 150M
    for ($i = 0; $i < 1000000; $i++) {
    $a[] = $i;
    }
  • - 750MB
    for ($i = 0; $i < 5000000; $i++) {
    $a[] = $i
    }
  • HipHop for PHP では、次の問題点を解消するために作った
  • 高い CPU の使用率を解消するため
  • 多くのメモリの使用率を解消するため
  • 他のシステムで既存の PHP のロジックを再利用するため
  • 拡張は、ほとんどの PHP 開発者には書くことが難しい作業
  • HipHop for PHP は、2年間の成果で、ソースコードの最適化された C++ コード(g++ を使う)の変換機
  • 効果は、ウェブサーバは 50% 以下に下がった、API は 2 倍のトラフィックに対して 30% 以下に下がった(APC を使った PHP コードベースと比べた結果)
  • 7つのステップを通して、コードを変換する
  • 本番環境でのデプロイは、通常の PHP コードでのデプロイとは異なっている
  • 複数のスレッドで一つのプロセスを起動している
  • 再起動している間のダウンタイムがない(port takeover… ポートを乗っ取り?)
  • 巨大なバイナリを置く
  • HipHop は、現在とてもシンプルなウェブサーバ上で使っている
  • これからのロードマップ
  • 現在、PHP 5.2 をサポートしているが、5.3 もサポートしたい
  • ウェブサーバのオプションとして Apache をサポートしたい
  • Facebook では、Apache 1.3 Prefrok で使っているとのこと
  • 同時にデータベースのコネクションも減っている
  • PHP の拡張はスレッドセーフでない問題は解決できていないとのこと

まだ、ちゃんと試していないのでよく分かりませんが、PHP なウェブサービスで PHP が CPU ボトルネックになっている場合には、物理サーバを減らすための有効なソリューションの一つになるかもしれないイメージをうけました。ただし、Facebook では、まだとても単純なウェブサーバ上でしか使っていないそうので、実際のサービスに使うにまだまだ時間がかかりそうです。

あと、個人的には Java は C++ と同様のベンチマーク結果だということも注目です。

なお、HipHop for PHP のソースコードは、github でもうすぐ公開予定とのことです。

Tags:

One Response to “HipHop for PHP”

Leave a Reply