Varnish Version 3 には、さまざまな操作用のオブジェクトがいくつかあります。
たとえば、パスはバックエンドからデータを取得する必要がある場合に使用されます。キャッシュ内でコンテンツを要求している場合は、hit を使用します。
しかし、ヒットフォーパスの使い方が理解できません。ワニスはいつそれを使用しますか? ネット上で私を明確にする有用な資料は見つかりませんでした。
Varnish Version 3 には、さまざまな操作用のオブジェクトがいくつかあります。
たとえば、パスはバックエンドからデータを取得する必要がある場合に使用されます。キャッシュ内でコンテンツを要求している場合は、hit を使用します。
しかし、ヒットフォーパスの使い方が理解できません。ワニスはいつそれを使用しますか? ネット上で私を明確にする有用な資料は見つかりませんでした。
バックエンド サーバーに対するフェッチ手順を最適化するために、hit_for_pass オブジェクトが作成されます。
通常のキャッシュ ミスの場合、Varnish は同じキャッシュ オブジェクトを要求するすべてのクライアントをキューに入れ、1 つの要求をバックエンドに送信します。これは通常、バックエンドが n 個のリクエストで同時に処理するのではなく、単一のリクエストで動作するようにするため、最も高速です。
一部のバックエンドでは、オブジェクトの準備に多くの時間がかかることに注意してください。10秒は珍しくありません。これがフロント ページの HTML で、それに対して 3000 リクエスト/秒がある場合、バックエンド リクエストを 1 つだけ送信することは非常に理にかなっています。
この問題は、Varnish がオブジェクトをフェッチした後、キャッシュできないことがわかったときに発生します。この理由は、バックエンドが「Cache-Control: max-age=0」、または (より頻繁に) Set-Cookie ヘッダーを送信することです。この場合、3,000 から 30,000 のクライアント (3k 要求/秒 * 10 秒) がキューにアイドル状態であり、これらのクライアントのそれぞれに対して、一度に 1 つずつ同じ遅いバックエンド リクエストを処理してサービスを提供する必要があります。これにより、サイトの応答時間が台無しになります。
そのため、Varnish は、hit_for_pass オブジェクトを作成することで、このリクエストをキャッシュできないという決定を回避します。
同じ URL に対する次の要求で、キャッシュ ルックアップは hit_for_pass オブジェクトを返します。これは、複数のフェッチが同時に実行される可能性があることを示しています。あなたのバックエンドはそれについてあまり満足していないかもしれませんが、少なくとも Varnish は理由もなくクライアントをキューに入れていません.