Facebook の PHP 向け HipHop: 速く動く

WBOY
リリース: 2016-06-23 14:37:46
オリジナル
844 人が閲覧しました

Facebook における重要な価値観の 1 つは、迅速に行動することです。過去 6 年間、PHP の急速な開発ペースのおかげで、私たちは多くのことを達成することができました。 PHP はプログラミング言語としてはシンプルです。学習も書き込みも読み取りもデバッグも簡単です。 PHP を使用すると、他の言語よりもはるかに早く Facebook で新しいエンジニアを登用することができ、より早くイノベーションを起こすことができます。

今日は、素晴らしい人々からなる小さなチームでプロジェクトを共有できることを嬉しく思い、私はこれまで取り組んできました。過去2年間続いています。 PHP 用のヒップホップ。 HipHop を使用すると、Web サーバーの CPU 使用率が、ページによって異なりますが、平均して約 50 パーセント削減されました。 CPU が少ないということはサーバーが少ないことを意味し、オーバーヘッドが少なくなります。このプロジェクトは Facebook に多大な影響を与えました。 Web 全般が HipHop の恩恵を受けることができると私たちは感じているので、PHP を使用して大規模で複雑な Web サイトを拡張することに新たな焦点をもたらすことを期待して、今晩これをオープンソースとしてリリースします。 HipHop は素晴らしい結果を示してくれましたが、確かに完全ではないため、試す前にベータ ソフトウェアに慣れておく必要があります。

PHP 用の HipHop は、技術的にはそれ自体がコンパイラーではありません。むしろ、それはソースコードトランスフォーマーです。 HipHop はプログラムによって PHP ソース コードを高度に最適化された C++ に変換し、g++ を使用してコンパイルします。 HipHop はソース コードを意味的に同等の方法で実行し、まれに使用されるいくつかの機能を犠牲にします。 eval() のような?パフォーマンスの向上と引き換えに。 HipHop には、コード トランスフォーマー、PHP ランタイム システムの再実装、およびパフォーマンスの最適化を活用するための多くの一般的な PHP 拡張機能の書き換えが含まれています。
スクリプト言語としての PHP のスケーリング

PHP のルーツは、Perl などのスクリプト言語です。 Python と Ruby はすべて、プログラマーの生産性と、製品を迅速に反復できるという点で大きな利点があります。これは、C++ などの従来のコンパイル言語や Java などのインタプリタ言語と比較されます。一方、スクリプト言語は、CPU とメモリの使用効率が一般的に低いことが知られています。このため、Facebook を毎月 4,000 億を超える PHP ベースのページビューに拡張することは困難でした。

これらの非効率性に対処する一般的な方法の 1 つは、PHP アプリケーションのより複雑な部分を PHP 拡張機能として C++ で直接書き直すことです。これにより、PHP はフロントエンド HTML と C++ のアプリケーション ロジックの間の接着言語に大きく変わります。技術的な観点から見ると、これはうまく機能しますが、アプリケーション全体に携わることができるエンジニアの数が大幅に減少します。 C++ の学習は PHP 拡張機能を作成するための最初のステップにすぎません。2 番目のステップは Zend API を理解することです。私たちのエンジニアリングチームは比較的小規模であることを考えると?すべてのエンジニアに対して 100 万人以上のユーザーがいるのですか?コードベースの一部を他の部分よりもアクセスしにくくするわけにはいきません。

Facebook のスケーリングは、ほぼすべてのページ ビューがカスタマイズされたエクスペリエンスを持つログイン ユーザーであるため、特に困難です。あなたがあなたのホームページを閲覧するとき、私たちはあなたのすべての友人を検索し、(マルチフィードと呼ばれる私たちが構築したカスタムサービスから) 最も関連性の高い更新をクエリし、あなたのプライバシー設定に基づいて結果をフィルタリングし、その後コメントをストーリーに記入する必要があります。 、写真、いいね、Facebook に関する人々が愛するすべての豊富なデータ。これらはすべて 1 秒足らずで完了します。 HipHop を使用すると、最終的なページのアセンブリを行うロジックを PHP で記述し、C++、Erlang、Java、または Python のカスタム バックエンド サービスに依存しながら、ニュース フィード、検索、チャット、その他のコア部分を処理するロジックを迅速に繰り返すことができます。

2007 年以来、私たちはこれらの問題を解決するためにいくつかの異なる方法を考え、いくつかの実装を試みてきました。一般的な提案は、Facebook を別の言語で書き直すことですが、サイトの開発の複雑さと速度を考慮すると、これを実現するには時間がかかるでしょう。 Zend エンジンのさまざまな部分を書き直しました。 PHPの内部構造?そしてそれらのパッチを PHP プロジェクトに戻しましたが、最終的には必要なパフォーマンスの向上は見られませんでした。 HipHop の利点は開発速度にほぼ影響しません。
HipHop のハッキング

数年前のハッカソンのある夜 (プライムタイム ハックを参照)、私は PHP を C++ に変換する最初のコードを開始しました。これらの言語は構文的にかなり似ており、CPU とメモリの使用量の両方に関して C++ が PHP よりも大幅に優れています。 PHP 自体も C で書かれています。このサイズのコードベース全体を手動で書き直すのは不可能であることはわかっていましたが、それをプログラムで行うシステムを構築したらどうなるだろうかと考えました。

   PHP のパフォーマンスを向上させる新しい方法を見つけることは、新しい概念ではありません。実行時に、Zend Engine は PHP ソースをオペコードに変換し、その後 Zend 仮想マシンを通じて実行されます。 APC や eAccelerator などのオープン ソース プロジェクトはこの出力をキャッシュし、PHP を利用した Web サイトの大部分で使用されています。また、オペコードの最適化とキャッシュによって PHP を高速化する商用製品である Zend Server もあります。代わりに、PHP ソースを C++ に直接変換し、ネイティブ マシン コードに変換できるようにすることを考えていました。 PHP をコンパイルすることさえ新しいアイデアではありません。Roadsend や phc のようなオープンソース プロジェクトは PHP を C にコンパイルし、Quercus は PHP を Java にコンパイルし、Phalanger は PHP を .Net にコンパイルします。

言うまでもなく、その 1 回のハッカソンよりも時間がかかりました。 8 か月後、コンパイルされたコードを使用すると実際に高速に実行できることを実証するのに十分なコードができました。プロジェクトのペースを速めるために、私たちはすぐに Iain Proctor と Minghui Yang をチームに加えました。次の 10 か月をかけてすべてのコーディングを完了し、その後の 6 か月を実稼働サーバーでのテストに費やしました。導入後わずか 6 か月で、現時点で Web トラフィックの 90% 以上を HipHop を使用して提供していることを誇りに思います。
HipHop の仕組み

プロジェクトの主な課題は、PHP と C++ の間のギャップを埋めることでした。 。 PHP は、動的で弱い型付けを備えたスクリプト言語です。 C++ は静的型付けを備えたコンパイル言語です。 PHP では魔法のような動的な機能を作成できますが、ほとんどの PHP は比較的単純です。 function foo($x) { include $x; を見るよりも、if (...) {...} else {..} を見る可能性が高くなります。 }。ここでパフォーマンスが向上します。生成されたコードは可能な限り、関数と変数に静的バインディングを使用します。また、型推論を使用して、変数に可能な限り最も具体的な型を選択し、メモリを節約します。

変換プロセスには、次の 3 つの主要なステップが含まれます:

誰が何を宣言するか、および依存関係に関する情報を収集する静的分析、
型推論、 C++ スカラー、文字列、配列、クラス、オブジェクト、バリアントの中から最も具体的な型を選択します。
ほとんどの部分が PHP ステートメントと式から C++ ステートメントと式に直接対応するコード生成です。

また私たちは開発しました。 HPHPi は、開発用に設計された実験的なインタープリターです。 HPHPi を使用する場合、実行前に PHP ソース コードをコンパイルする必要はありません。これは、HipHop 自体のバグを発見するのに役立ち、エンジニアが PHP の記述方法を変更することなく HipHop を使用する方法を提供します。

全体的に HipHop により、C++ のパフォーマンス上の利点を活用しながら、PHP の最良の側面を維持できます。合計で 300,000 行を超えるコードと 5,000 を超える単体テストを作成しました。これらはすべて、オープンソース PHP ライセンスの下で今晩 GitHub でリリースされます。
今夜詳細をご覧ください

今晩、PHP 向けの HipHop をさらに深く掘り下げるために少人数の開発者グループを主催し、この技術トークをライブでストリーミング配信します。ご覧になりたい場合は、太平洋時間の午後 7 時 30 分頃にここに戻ってください。

たくさんの質問があると思いますので、今晩から HipHop wiki を参照するか、HipHop 開発者メーリング リストに参加してください。また、今後数か月間、FOSDEM、SCALE、PHP UK、ConFoo、TEK X、OSCON で、PHP 向け HipHop について話し合う予定です。私たちは、皆さんと一緒に HipHop を成長するオープンソース プロジェクトに進化させることに非常に興奮しています。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート