私はmemcachedの学習の初心者です。 memcachedサーバーは私を最も混乱させました。 Webサーバーのように単一のサーバーコンピューターとして表示できますか? memcachedサーバーとクライアントの関係についても混乱しています。それらは異なるコンピューターにありますか?
@phihagが答えたほとんどのことに同意しますが、いくつかのことを明確にしなければなりません。
Memcachedはキーに従ってデータを格納します(phihagはデータベースIDと混同しないようにIDと呼びます)。データはさまざまなサイズであるため、小さなビット(データベースから取得した1つのレコードなど)を保存したり、巨大なデータチャンク(数百のレコードや完成したHTMLページ全体など)を保存したりできます。
Memcached ではない通常、アプリケーションサーバーと同じマシンで使用されます。これは、TCP経由でアクセスできるように設計されているためです。同じサーバー上で動作するように設計されていて、プーリングサーバーとして設計されていた場合はソケット。
プーリング部分は興味深いです-Memcachedを実行している10台のマシンに、それぞれこの目的で最大10GBのRAMを割り当てることができます。 10 * 10 = 100GBのRAMスペース。
Memcachedに値を書き込むと、サーバーの1つだけが(ランダムに、またはアルゴリズムを介して)保存されます。 Memcachedから値を読み取ろうとすると、値を保存したサーバーのみがその値を送信します。
したがって、実際にはcanすべてのdatabase/memcached/application/fileserverを同じマシンに配置します。通常は、開発サンドボックス用にそれを行います。しかし、あなたもcanを別々のマシンと他の2つの組み合わせに置きます。
Memcachedサーバーが1つだけ必要な場合は、おそらくアプリケーションコードと同じマシンでホストしても構いません。
ニスなどのフロントエンドキャッシュサーバーの使用を開始する場合、またはNginXをフロントエンドキャッシュサーバーとして構成する場合、これらのフロントエンドキャッシュサーバーがキャッシュしているデータを保存するために、一部のMemcachedサーバーを構成する必要があります。
データベースを複数のサーバーに分散し、ファイルサーバーをCDNに分散すると、アプリケーションが短時間で大量のデータを処理するため、多くのRAMスペースが必要になります単一のアプリケーションサーバーでは利用できませんでした。
また、Memcachedサーバーのメモリプールを拡張することは、新しいサーバーのIPをリストに追加するのと同じくらい簡単なので、多くのサーバーのように水平にスケーリングします(Memcachedの真の典型的な使用方法です)。
Memcachedサーバーはprogramであり、memcachedが保存するデータを管理します(サーバーとも呼ばれるmachineと混同しないでください)。理論的には、どのコンピューターでも実行できます。ただし、通常は、メインアプリケーションが実行されているのと同じマシンで実行されます。
次に、アプリケーションはmemcachedクライアントを使用してmemcachedサーバーと通信し、キャッシュされたコンテンツを要求します。これは、従来のデータベースからデータをクエリするよりも高速です。