顧客レジストリ データベースのクエリと更新を許可する REST API レイヤーの場合、どのキャッシュ戦略が最適かを理解しようとしています。現在、中央データベース サーバーと通信する 3 つのフロント サーバーがあります。
アイデアは、顧客レコードのバージョン ID (アカウントの変更時に更新されるハッシュ値) と一致する etag を使用して、呼び出し元のクライアントに etag を返し、受信した etag が格納されているバージョン ID と一致する場合にのみ更新呼び出しを受け入れることです。データベース。
クライアントが、ロード バランサーによってサーバー 1 にルーティングされている顧客レコードに対して GET を実行するとします。サーバー 1 には顧客レコードがキャッシュされていないため、データベースにクエリを実行し、レコードをローカルにキャッシュして、etag ヘッダーを含む呼び出しの応答としてレコードを返します。
2 番目のクライアントが到着し、サーバー 2 にルーティングされている同じ顧客レコードに対して同じ GET を実行すると、サーバー 2 もエントリをローカルにキャッシュし、同じ etag ヘッダーを返します。
ここで、最初のクライアントがサーバー 1 を介して同じレコードに対して更新呼び出しを実行したとします。サーバー 1 のキャッシュは最新のレコードの詳細で更新され、最初のクライアントは新しい etag を取得します。
この後、2 番目のクライアントは条件付きの get 呼び出しを実行し、受信した etag を設定した "If-None-Match" ヘッダーを提供します。リクエストは再びサーバー 2 にヒットします。私の仮定では、サーバー 2 はまだ古い etag をキャッシュしており、クライアントに 304 Not Modified 応答を返します。これは正しい仮定ですか?
この状況では、クライアントは簡単に古いデータを取得し、クライアント側で表示および使用されるデータの全体的な一貫性に影響を与えます。
これを解決し、古い顧客記録データがクライアントに返されないようにするには、何が必要でしょうか?
どうもありがとう!