0

VCL を使用して Varnish で私の (おそらく奇妙な) ユース ケースを実装できるかどうか疑問に思っています。私のアプリケーションは、キャッシュ可能な API サーバーから非常に短い待ち時間 (つまり、可能であればサブミリ秒) で応答を受信することに依存しています。アプリケーションは、「空」の応答が適切に処理される (場合によっては有効な応答である) ように記述されており、API は、空でない応答が長期間有効になるように設計されています (つまり、日々)。

だから、私がやりたいのは、ワニスを次のように構成することです:

  1. 指定された API 呼び出しに対してキャッシュされた応答を検索 (および返す) しようとします。
  2. キャッシュ ミスの場合、すぐに「空」の応答を返し、バックエンドの要求をキューに入れます
  3. #2 でキャッシュ ミスだった URL への将来の呼び出しで、現在キャッシュされている応答を返す

VCL だけを使用して Varnish をこのように動作させることは可能ですか? そうでない場合、これを行うために VMOD を作成することは可能ですか (そうであれば、ポインター、ヒントなどを大歓迎です!)

4

1 に答える 1

1

VCL だけではできないと思いますが、VCL といくつかのクライアント ロジックを使用すると、非常に簡単に管理できると思います。

vcl_miss では、エラー 200 を使用して空のドキュメントを返し、デフォルトのケースでは X-Try-Again という応答ヘッダーを設定します。クライアント アプリで、X-Try-Again が設定された空の応答を受信した場合、同じリソースを非同期で要求しますが、X-Always-Fetch というヘッダーを要求に追加します。アプリは、応答を待機したり、応答が到着しても何もしません。また、vcl_miss で、同じ X-Always-Fetch ヘッダーの存在を確認します。存在する場合は、空のドキュメントの代わりに (フェッチ) を返します。これにより、バックエンドからコンテンツが要求され、将来の要求のためにキャッシュされます。

また、クライアントコードを使用するだけでなく、実装が少し不格好ですが、この記事も役立つ可能性があります。-再取得中のコンテンツ/

于 2013-07-17T18:38:28.330 に答える