No.2080 HipHopforPHP
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: facebook php