3

memcached が分散キャッシング システムであることを理解しています。しかし、memcached がレプリケートすることは完全に必要なのでしょうか? 目的は、クラスター化された環境でセッションを永続化することです。

たとえば、2 台のサーバーで memcached を実行しており、両方にデータがあり、サーバー #1 がダウンした場合、そこに保存されていたセッション データが失われる可能性はありますか? 言い換えれば、memcached サーバー (データを保存する) がダウンした場合に何が起こると予想すべきであり、クラスター化された環境でセッションにどのような影響を与えるでしょうか?

結局のところ、アプリケーションにフォールト トレランスを追加する必要があるでしょうか? たとえば、おそらくキーが存在していたサーバーの 1 つがダウンしたためにキーが存在しない場合、再クエリを実行して memcached に保存しますか?

私が読んでいるものから、この方向に傾いているように見えますが、確認が必要です: https://developers.google.com/appengine/articles/scaling/memcache#transient

前もって感謝します!

4

2 に答える 2

0

Couchbase に埋め込まれた memcached と「バニラ」の memcached にはいくつかの違いがあります。私の知る限り、そのうちの 1 つは、couchbase の memcached サーバーが 1 つのように動作することです。これは、キー値を 1 つのサーバーに保存すると、クラスター内の別のサーバーから取得できることを意味します。また、バニラの memcached の「クラスター」は通常、シャーディング手法を使用して構築されます。つまり、アプリ側では、どのサーバーに目的のキーが含まれているかを知る必要があります。

私の意見では、memcached データの複製は不要です。最新のデータセンターは、ほぼ 99% のアップタイムを提供します。そのため、いつか memcached サーバーの 1 つがダウンした場合、オンライン ユーザーの一部だけが再ログインする必要があります。

また、多くの Web サイトでは、セッションの復元に使用できる Cookie を設定する [Remember me] チェックボックスが表示されます。ユーザーがその Cookie を持っていれば、サーバーの 1 つがダウンしていることにさえ気付かないでしょう。(これは、「アプリケーションにフォールト トレランスを追加する」という質問に対する回答です)

ただし、常に haproxy などを使用して、すべてのセッション データを 2 つ以上の独立したサーバーに複製することができます。この場合、1 つのユーザー セッションを保存するには、N 倍の RAM が必要になります。N はレプリカの数です。

別の方法-couchbaseを使用してセッションを保存します。Couchbase クラスターは「すぐに使える」レプリカをサポートし、データをディスクにも保存するため、ノード (またはすべてのノード) が突然シャットダウンまたは再起動しても、セッション データは失われません。

簡単な答え: 「remember me」Cookie を使用し、レプリケーションを使用しない memcached で十分です。

于 2013-09-12T18:34:16.623 に答える