kPHPについて:子猫がVKontakteを高速化する方法

こんにちは、ハブロフスク。 前のトピック他の場所の両方で、多くの人がすでにVKontakteからkPHPを読みましたが、もちろん十分な詳細はありませんでした。 コミュニティ側の私たち自身の好奇心と関心を満足させるために、ソース、つまりPavel Durovにコメントを求めました.Pavel Durovは、VKをフレッシュな開発のトラックに転送する責任があるチームのメンバー、Oleg IllarionovとVasily BabichとkPHPについて話すことを勧めました。



まず第一に、私はアナウンスへのコメントにある質問に尋ねました:OOPはどうですか、誰が速いですか-Java C#GoまたはkPHP エレファントまたはキット 、kPHPプロジェクトが最も役立つなどです。 さらに、開発計画について、そして少し、他の開発とVKの「コード」キッチンについても話しました。



オレグ、ヴァシリー、こんにちは。 それでは、kPHPとは何ですか? その本質は何ですか?



オレグ・イラリオノフ:



こんにちは kPHPはC ++のPHPトランスレーターであり、とりわけコードを分析し、変数のタイプを表示します。明確に推論できなかった場合は、任意のタイプのデータを格納できるユニバーサル変数を使用します。

もちろん、kPHPはPHPコードをコンパイルするものではなく、動作します。実際、kphpは潜在的および実際のエラーを検出する非常に優れた静的コードアナライザーです。 ちなみに、サイトを翻訳するとき(VKontakteについて話しているとき)、少し前に作られた小さなイノベーションさえ開始されましたが、コードのバグのために一般に公開されませんでした。



多くの質問は、メインのPHPメソッドのサポートとOOPの両方に関連しています。 OOPの標準サポートと限定サポートの両方について、すでに表明されているものに加えて、何か追加できますか?



OI:

kPHPには、私たち( VKontakte )が使用していないものも含め 、すべてが非常に大量にありますが、これまでのところ、DOMDocumentなどの非常に深刻なものはありません。

OOPに関しては、いくつかの標準PHPオブジェクトを除き、kPHPでは現在サポートされていません。 サイトをkPHPに翻訳するときのタスクの1つは、OOPを完全に取り除くことでした。 しかし、この不在は機能に似ており、kPHPの開発における主なベクトルは速度でした。これはOOPサポートを支持しません。さらに、OOPは主にプロジェクトに100人の開発者があるか、その中に豊富なインターフェースがある場合に適しています



コメントには古典的な質問がありました:「kPHPはJava C#Goより速いですか?」



OI:

テスト対象とコードの書き方によって異なります。 kPHPでは非常に興味深いです。たとえば、速度は個々の変数のタイプをどのように推測するかによって異なります。 一般的に、kPHPはPHPと互換性のない言語として計画されました。たとえば、変数のタイプを明示的に設定して実行を高速化することができる多くの構造があります。 しかし、多くのコード(コンパイルされたバイナリの重量が約300メガバイト)があるため、コンパイルは計画どおり数秒ではなく、kPHPがコードの変更された部分のみを再コンパイルするという事実にもかかわらず、通常のPHPで機能を開発する必要があります、これではまだ十分に活用できません。



ヴァシリー・バビッチ:

Java C#Goとの比較は複雑です-kPHPの速度は、Olegが既に述べたように、コンパイルするコードに非常に依存しています-それが良ければ、速度はJava / C#の速度よりもはるかに高速です-実際、純粋なC ++です。 ただし、コードがあまり良くない場合は、動作が遅くなります。 おそらく、あなたが非常に一生懸命やるなら、コードが似ているがkPHPの動作がより遅い合成例を思いつくことができます-しかし、そのような目標を設定しませんでした:)



kPHPへの移行により、VKontakteのメインページの読み込みを加速する美しいグラフィックスを既に見ています。 kPHPには他にどのような利点がありますか?



OI:

メモリの使用における大きな利点。



WB:

はい、kPHPを使用すると、CPUとRAMの使用量が大幅に削減されます。 私が知る限り、リクエストの処理にサーバーのほぼ半数を使用し始めましたが、リクエストを処理するだけでなく、memcacheのような他のシステムがリクエストを処理する場合もあります。 もちろん、kPHPは主に高負荷プロジェクトを対象としていますが、開発対象のタスクを考えると驚くことではありません。



一部のハブロフスク市民は、VKontakte速度の2倍の増加に批判的であり、10倍の加速はもちろん、はるかに印象的な結果になることを示しています。 合計2回ですか?



OI:

サイトが2倍速いという事実は、kPHPがPHPの2倍速いという意味ではなく、そうではないことを理解する必要があります。 事実は、コードの実行に加えて、データベース、エンジンなどへのアクセスに非常に多くの時間が費やされているということです。 実際のコードの実行は10倍以上加速したと思います。

また、速度についても説明します。kPHPにはWebサーバーが組み込まれています。つまり、Apacheと組み合わせて使用​​する必要はありません。



WB:

はい、ほとんどの場合、ページの生成ではPHPコードの実行は必要ありませんが、データの要求(他のサーバー)への応答を待機しています。 もちろん、この待機時間を何らかの方法で使用しようとしますが、実際にはまだ多くの期待があり、そのkPHPは加速しません。 オレグが言ったように、速度の実際の増加ははるかに高いです。



オレグ、あなたはベースについて、そしてこれに関連してそれらについての質問に言及しましたか?あなたはあなた自身の開発を使うか、標準ドープされた何かを使いますか?



OI:

現在は、負荷が小さく、独自のエンジンに転送する手がまだ届いていない場合を除き、MySQLを実質的に使用していません。 多くのデータが保存されている場合、それらは長い間使用されてきました。 それらの多くは書かれていますが、MySQLなしでは対処できないタスクを想像することは今では困難です。

一般に、慎重に別のライブラリに移動した標準関数の多くは、C ++で実装されています。

確かに、kPHPの前にこのソリューションを使用しました。ご存知のように、PHPではCで書かれた新しい関数を追加することもできます。



加速の計画はありますか、それとも(突然!)一般向けのエンジンの開示はありますか?



WB:

(MySQLの代わりに)私たちのメンバーによって書かれ、memcacheプロトコルに取り組んでいるものはすでにかなり高速化されています。 ただし、このプロトコルでは、すべてを可能な限り高速化することはできません。 そのため、memcacheプロトコルから徐々に独自のものに移行しています。これは、Android競合で説明されているmtprotoに似ていますが、サーバー側(要求に応答するサーバーとデータサーバー間の通信)について説明しています。

一般公開について-はい、memcacheプロトコルでエンジンを開く予定でしたが、まだ手元に届きませんでした。



kPHPに戻って、その開発とサポートの計画を教えてください。 コミュニティをカットまたは放棄しますか?



OI:

次からは、みんながOOPを追加する予定です。mtprotoを埋め込みたい場合、開発者はそれを必要とするからです。



よろしくお願いします! そして最後に、最も重要な質問:kとは何ですか?



WB:

Kは、子猫の単語の接頭辞です。これは、すでに私たちの開発の伝統になっています:)








ここにそのようなkPHPのインタビューがあります、Habr、1つの絵なしでこのテキストの壁を読んでくれてありがとう。 この厄介さを解消するために、トピックに小さなプレフィックスを追加します。



画像



もちろん、トピックに関する質問がある場合は、 Roem.ruがコミュニティに関心のある他の詳細について喜んで質問します。



All Articles