に関する記事Distributed Hash Tables
を読んだことがありますが、APCを使用してmemcacheのようなものを実装することは可能だと思われます。ご存知のように、単一のサーバーからキーをフェッチする場合、APCはmemcacheよりもはるかに高速です。したがって、APCを分散させると、パフォーマンスと分散の両方が得られます。私はそれを始めるためにいくつかの考えが必要です。ハッシュテーブルに精通している人がその方法を説明できますか?APCをmemcacheのようにする方法は?
あなたが何かを知っていてkeyspace partitioning
、Overlay network
それがはるかに良いでしょう。
1 に答える
表面的には両方のソフトウェアが同等のサービスを提供しますが、それらの基盤は完全に異なり、それがパフォーマンスの劇的な違いを説明しています。
APCは基本的に、オブジェクト(ユーザーオブジェクトまたは解析されたオペコードチャンク)を共有メモリに格納できるようにするシステムです。共有メモリは、私が知っているすべてのシステムで、ポインタを取得するとローカルRAMと同じくらい高速になります。
つまり、オブジェクトの書き込みまたは読み取りを行うためにAPCが実行する必要があるのは次のとおりです。
- shmアクセスを要求し、それへのポインタを取得します
- shmでオブジェクトのオフセットとサイズを計算します
- そのメモリゾーンをバッファに、またはその逆にmemcpyします。
- 終わり
シンプルで、最近のメモリ帯域幅が数十ギガバイト/秒であることを考慮すると、高速です。
memcacheシナリオでは分散型であるため、さらに多くのことを行う必要があります。
- クライアントはリクエストをエンコードして送信します
- サーバーはリクエストを受信してデコードします
- サーバーは、memcachedのメモリ内のオブジェクトのオフセットとサイズを計算します
- サーバーmemcpyはそのメモリゾーンをバッファに、またはその逆に
- サーバー送信バッファ
- クライアントはバッファを受信してデコードします
ここで、APCを配布する場合は、クライアントとサーバーが相互に通信する必要があります。そして突然、重要性の低いいくつかの詳細を除いて、memcacheで使用されるものと同じシナリオに遭遇しました。そして、すべての高価な操作が再び必要になります。つまり、すべてのコピー、ネットワークスタックを介した送信が含まれます。
これは、ローカルホストで実行されているmemcacheインスタンスでも、ノード間のギガビットイーサネットがひどく遅い場合でも、分散システムを機能させるために必要な作業にかなりのオーバーヘッドがある理由の説明でもあります。
そのため、ここで間違った容疑者を見ていると確信しています。APCを分散させると、同じパフォーマンス/スループットのカテゴリになります。