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