0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Varnishのリクエストアグリゲーション(Request CoalescingまたはRequest Collapsing) Lumen Edge

Last updated at Posted at 2021-11-11

###本項はLumen Edge Application DeliveryでのVarnishについての記述です
https://lumen-28.hubspotpagebuilder.com/lumen-technologies-japan/lumen-edge-cloud-app-delivery

#リクエストのアグリゲーション(リクエストコラプシング/Request Collapsing)
リクエストコラプシング/Request Collapsingとは、同じオブジェクトに対する複数のリクエストを保留し1つのオリジンリクエストにまとめ、レスポンス結果を使用して保留中のすべてのリクエストに対して返答を行う機能です。

これにより、キャッシュ内の人気コンテンツオブジェクトの有効期限が切れた場合に、オリジンサーバーへの複数リクエストが殺到し、オリジン側のサーバリソースを消費するのを防ぎます。トラフィックが多いサービスの場合、リクエストコラプシング(Request Collapsing)を正しく使用すると、オリジンサーバーへのトラフィックが減少して負荷の軽減になります。

キャッシュミス(初回リクエスト及びキャッシュ期限切れ)の場合は、Varnishにてデフォルトでリクエストコラプシング(Request Collapsing)される可能性があります。

Varnish VCLでは、キャッシュ応答のために、vcl_fetchでreturn(pass)が見つかった場合、hit-for-passオブジェクトが作成され、キャッシュに挿入されます。この場合、その後のユーザからの複数リクエストは保留リストに一旦待ち状態とされて個別に処理されます。

これらの動きは以下になります:

ステータス Collapses機能の発動 詳細 VCL処理
Default miss Y 通常のキャッシュミスの場合でかつキャッシュ可能なコンテンツの場合、リクエストはコラプスされ、一番最初のユーザリクエストを待って、オリジンからのレスポンスを持って保留リクエストすべてに回答されます。(Cookie等を利用した特定ユーザセッションに対するプライベートコンテンツなど注意が必要です) vcl_recv: lookup ➔ vcl_miss: fetch ➔ vcl_fetch: deliver ➔ *
Uncacheable response Y とあるリクエストがキャッシュミスの場合で、オリジンからキャッシュしないコンテンツである回答があった場合、一旦コラプスされたリクエストでの一番最初のリクエストにのみ当該レスポンスを返却し、他の保留リクエストに於いても順に個別のリクエストとしてオリジン側に接続を行います。 vcl_recv: lookup ➔ vcl_miss: fetch ➔ vcl_fetch: deliver ➔ *
Pass on response VCL Y VCL設定によりreturn(pass)透過バイパス設定がvcl_fetch内にキャッシュ可能なコンテンツに指定されている場合、一旦コラプスされたリクエストでの一番最初のリクエストにのみ当該レスポンスを返却し、hit-for-passオブジェクトと認識されたのちは、他のリクエストに於いて以降新たな保留キューは作成せず順に個別のリクエストとしてオリジン側に接続を行います→次項のHit for Passに続く vcl_recv: lookup ➔ vcl_miss: fetch ➔ vcl_fetch: pass ➔ *
Hit for pass N とあるコンテンツに対するリクエストにて、当該コンテンツが既にhit-for-pass指定されていた場合他のリクエストに於いて以降新たな保留キューは作成せず順に個別のリクエストとしてオリジン側に接続を行います。 vcl_recv: lookup ➔ vcl_pass: fetch ➔ vcl_fetch: *
Pass on request N vcl_recv内でreturn(pass)透過バイパス設定がされている場合は、当該コンテンツはキャッシュせずコラプシングも発動しません vcl_recv: pass ➔ *
req.hash_ignore_busy N vcl_recv内でreq.hash_ignore_busyをTrue設定にした場合コラプシングは動作しません。 All
VCL
  # Disable request collapsing
  set req.hash_ignore_busy = true;

参考:VCL処理フロー
https://qiita.com/yoshitaka_nakahara/items/316dd9ac221d6a859f66

###キャッシュしないコンテンツとは
下記の通りCache-Controlに**”Private”**と記述されているものだけが対象となる点要注意です。max-age:0やno-cacheはVarnishではキャッシュNGとみなしません。この場合でキャッシュさせたくない、若しくはコラプシングを発動させたくない場合は明示的にPASS設定をする等の対処が必要です。

HTTPHeader
Cache-Control: private
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?