web-dev-qa-db-ja.com

memcachedサーバーとは

私はmemcachedの学習の初心者です。 memcachedサーバーは私を最も混乱させました。 Webサーバーのように単一のサーバーコンピューターとして表示できますか? memcachedサーバーとクライアントの関係についても混乱しています。それらは異なるコンピューターにありますか?

42
Allen Jee

@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の真の典型的な使用方法です)。

64
Mihai Stancu

Memcachedサーバーはprogramであり、memcachedが保存するデータを管理します(サーバーとも呼ばれるmachineと混同しないでください)。理論的には、どのコンピューターでも実行できます。ただし、通常は、メインアプリケーションが実行されているのと同じマシンで実行されます。

次に、アプリケーションはmemcachedクライアントを使用してmemcachedサーバーと通信し、キャッシュされたコンテンツを要求します。これは、従来のデータベースからデータをクエリするよりも高速です。

  1. MemcachedサーバーはIDを値にマップするだけで、テーブル全体をスキャンする必要はありません
  2. Memcachedプロトコルの方が簡単です。サーバーはSQLなどを解析する必要がなく、クライアントはSQLを作成する必要がありません。
  3. Memcachedはデータベースの信頼性(バックアップ、障害分離、クラスタリング、セキュリティなど)を必要としないため、アプリケーションが実行されているのと同じマシンで実行できます。アプリケーションを実行しているのと同じマシンでデータベースを実行することもできますが、上記の理由により、そうすることは嫌われます。
28
phihag