2012-10-02 2 views
46

ワニスバージョン3には、異なる操作のためのオブジェクトがいくつかあります。ヒット・フォー・パスの手段は?

たとえば、バックエンドからデータを取得する必要がある場合は、passが使用されます。キャッシュ内のコンテンツを要求するとヒットします。

しかし、ヒット・フォー・パスの使用法はわかりません。ニスがそれを使用するとき?私は明らかにするネット上の有用な材料を見つけていない。

答えて

153

ヒット・フォー・パスオブジェクトは、バックエンド・サーバーに対してフェッチ・プロシージャを最適化するために作成されます。

通常のキャッシュミスの場合、Varnishは同じキャッシュオブジェクトを要求するすべてのクライアントをキューに入れ、バックエンドに単一の要求を送信します。これは通常、バックエンドがn回の要求で同時にスワンプするのではなく、1回のリクエストで動作するようにすることで最も簡単です。

バックエンドの中には、オブジェクトを準備するのに多くの時間を費やすものがあることに注意してください。 10秒は珍しくありません。これがフロントページのHTMLで3000 req/sの場合は、バックエンドリクエストを1回送信するだけで大​​丈夫です。

この問題は、Varnishがオブジェクトをフェッチした後に、キャッシュできないと判断された場合に発生します。この理由は、バックエンドが "Cache-Control:max-age = 0"、または(より頻繁に)Set-Cookieヘッダーを送信することがあります。この場合、3,000〜30,000の間のクライアント(3k req/s * 10sec)が待ち行列に入っていて、これらのクライアントのそれぞれに対して、同じ遅い1度に1つのバックエンド要求が完了しなければなりません。これにより、サイトの応答時間が損なわれます。

したがって、Varnishはhit_for_passオブジェクトを作成することでこの要求をキャッシュできないという決定を保存します。

同じURLに対する次の要求では、キャッシュルックアップはhit_for_passオブジェクトを返します。これは、複数のフェッチが同時に実行される可能性があることを示します。あなたのバックエンドはあまり幸せではないかもしれませんが、少なくともワニスは何の理由もなく顧客を待ち行列に入れていません。

+0

だらけ。ありがとう@ikarsten –

+1

非常に明確な説明。ありがとうございました。 – Vaheh

+0

素晴らしいどうもありがとう! – tven