0

に関する記事Distributed Hash Tablesを読んだことがありますが、APCを使用してmemcacheのようなものを実装することは可能だと思われます。ご存知のように、単一のサーバーからキーをフェッチする場合、APCはmemcacheよりもはるかに高速です。したがって、APCを分散させると、パフォーマンスと分散の両方が得られます。私はそれを始めるためにいくつかの考えが必要です。ハッシュテーブルに精通している人がその方法を説明できますか?APCをmemcacheのようにする方法は?
あなたが何かを知っていてkeyspace partitioningOverlay networkそれがはるかに良いでしょう。

4

1 に答える 1

1

表面的には両方のソフトウェアが同等のサービスを提供しますが、それらの基盤は完全に異なり、それがパフォーマンスの劇的な違いを説明しています。

APCは基本的に、オブジェクト(ユーザーオブジェクトまたは解析されたオペコードチャンク)を共有メモリに格納できるようにするシステムです。共有メモリは、私が知っているすべてのシステムで、ポインタを取得するとローカルRAMと同じくらい高速になります。

つまり、オブジェクトの書き込みまたは読み取りを行うためにAPCが実行する必要があるのは次のとおりです。

  • shmアクセスを要求し、それへのポインタを取得します
  • shmでオブジェクトのオフセットとサイズを計算します
  • そのメモリゾーンをバッファに、またはその逆にmemcpyします。
  • 終わり

シンプルで、最近のメモリ帯域幅が数十ギガバイト/秒であることを考慮すると、高速です。

memcacheシナリオでは分散型であるため、さらに多くのことを行う必要があります。

  • クライアントはリクエストをエンコードして送信します
  • サーバーはリクエストを受信して​​デコードします
  • サーバーは、memcachedのメモリ内のオブジェクトのオフセットとサイズを計算します
  • サーバーmemcpyはそのメモリゾーンをバッファに、またはその逆に
  • サーバー送信バッファ
  • クライアントはバッファを受信して​​デコードします

ここで、APCを配布する場合は、クライアントとサーバーが相互に通信する必要があります。そして突然、重要性の低いいくつかの詳細を除いて、memcacheで使用されるものと同じシナリオに遭遇しました。そして、すべての高価な操作が再び必要になります。つまり、すべてのコピー、ネットワークスタックを介した送信が含まれます。

これは、ローカルホストで実行されているmemcacheインスタンスでも、ノード間のギガビットイーサネットがひどく遅い場合でも、分散システムを機能させるために必要な作業にかなりのオーバーヘッドがある理由の説明でもあります。

そのため、ここで間違った容疑者を見ていると確信しています。APCを分散させると、同じパフォーマンス/スループットのカテゴリになります。

于 2012-07-20T21:37:57.657 に答える