1

私たちのサイトは最近いくつかの小さなサイトに分かれていて、異なるIDCに配布されています。キャッシュ更新戦略を推奨

これらのサイトの1つは、ユーザー認証やその他のユーザー関連のサービスを提供し、他のサイトはWebサービスを通じてアクセスします。

データをリモートからフェッチするすべてのサイトでは、ユーザー情報が必要なたびにリモートに移動する必要がないようにローカルキャッシュを作成します。

データの整合性を保証するためにどのようなキャッシュ更新戦略をお勧めしますか?

+0

リアルタイムのデータ整合性が必要ですか、または実際のデータを「公開」するのに何らかの遅延が必要ですか? – Vadim

+0

返信用Thx :) SNSアプリケーションであるため少なくともリアルタイムに近いはずです。ユーザーが1つのサイトでニックネームを更新すると、変更はできるだけ早く他のサイトで行われますサイト。 – satoru

答えて

1

更新されたポリシーをリアルタイムに近づける必要があるため、キャッシュ無効化通知エンジンが必要です。

それのための2つの可能な実装モデルがあります:

1.Pull メインサーバが"resourceID=34392 not more valid in your cache"のような通知メッセージで子供のサーバーを引っ張ります。 このメッセージは、メインサーバーの各データ更新時に送信する必要があります。

  1. ポール 各子サーバーは、メインサーバーに、ユーザーにサービスを提供する直前にキャッシュ項目の有効性を尋ねます。 この場合、メインサーバーは最後のキャッシュ存続期間中に更新されたオブジェクトのリストを保持し、"If-object-was-updated"リクエストに非常に迅速に応答する必要があります。

どちらの場合でも、主サーバーは各データ変更時にイベントを発生させる必要があります。 最初のケースでは、このイベントは「通知バス」経由で子サーバーに転送され、2番目のケースではこのイベントはrecently-updated-objectsリストに格納されます。 したがって、両方のオプションでメインサーバー上でコードを変更する必要があります。

私の場合、2番目のオプションは、共通の実装がずっと簡単ですが、使用しているソフトウェアスタックに非常に依存しています。

+0

私たちのアプリケーションはPythonで書かれていますが、通知エンジンとして使用できるサードパーティのライブラリがあるのだろうかと思います。 – satoru

+0

残念ながら、私はPython技術に精通していませんが、私が見ている最も簡単な実装方法は、objectIDをmemcachedに再キャッシュすることです。子サーバーとメインサーバーの間のリバースプロキシとしてnginxをセットアップします。オブジェクトのキャッシュを維持し、memcachedに格納されたリストと直接連携するようにnginxを作成します。とにかく私が言ったように、それは非常にタスク固有であり、より多くの調査が必要です。もっと詳細な議論が必要な場合は、私に連絡することができます。 – Vadim

関連する問題