2016-11-22 11 views
1

ワニス4を使用して、複数のサーバーからの同じ要求の異なる内容をキャッシュします。あるサーバーからの最初の要求をキャッシュし、その後のすべての要求に対して同じ内容を提供し続けるように見えます。ワニス4を使用して、異なる内容の複数のサーバーからキャッシュする

curlを実行すると、2つのキャッシュと異なる年齢で応答が得られます。

スティッキーの動作に負荷やその他の要因がありますか? ロードでJmeterとApacheのベンチマークを使用しましたが、引き続き同じ動作をしました。

私のvcl_hashは良いですか?バックエンドサーバのurlとipのハッシュコンビネーションでオブジェクトを保存したい。

私の場合、キャッシュオブジェクトのttlのように見えますが、ワニスは2番目のサーバーからキャッシングし、ttlが完了するまで同じものを返します。しかし、これは我々がそれが行動すると期待しているものではありませんか?

何か不足していますか?

ラウンドロビンとhash_dataを使用します。以下を検討するために私config.vcl

backend s1{ 
    .host = "190.120.90.1"; 
} 

backend s2{ 
    .host = "190.120.90.2"; 
} 

sub vcl_init { 
    new vms = directors.round_robin(); 
    vms.add_backend(s1); 
    vms.add_backend(s2); 
} 

sub vcl_recv { 
    set req.backend_hint = vms.backend(); 
} 

sub vcl_hash { 
    hash_data(req.url); 
    if (req.http.host) { 
     hash_data(req.http.host); 
    } else { 
     hash_data(server.ip); 
    } 
    return(lookup); 
} 

答えて

3

まず事は、あなたがオブジェクトがそれからフェッチされた後にのみ、バックエンドのIPを持ってしようとしているということです。したがって、vcl_hashはフェッチ前に発生するため、このIPをハッシュメソッドで使用することはできません。

第2はラウンドロビンについてです。これは、Varnishがオブジェクトをフェッチしているときにのみ発生します。したがって、オブジェクトがすでにキャッシュされているときには発生しません。

あなたの質問に正確にはに答えるには、アプリケーションが同じリクエストに対して異なる内容を配信する理由を知る必要があります。要求が常に同じ場合、どのバックエンドが要求されているかをどのように指定しますか?クッキー、ヘッダー、または要求の発信元IPのようなものが存在していなければなりません。

特定のバックエンドを設定してvcl_hashで使用できることがわかっています。例示の目的のために、あなたがbackend_choiceという名前のヘッダーの存在に基づいて、あなたのバックエンドを設定したいと仮定しましょう:

sub vcl_recv { 
    if (req.http.backends_choice == "s1") { 
    set req.backend_hint = s1; 
    # If the header is not "s1" or does not exist 
    } else { 
    set req.backend_hint = s2; 
    } 
    ... 
} 

sub vcl_hash { 
    hash_data(req.url); 
    if (req.http.host) { 
    hash_data(req.http.host); 
    } else { 
    hash_data(server.ip); 
    } 
    # We use the selected backend to hash the object 
    hash_data(req.backend_hint); 
    return(lookup); 
} 

この答えはあなたのニーズに対応して願っています。私が逃したことがあった場合は、自由にコメントや質問に追加してください。私は自分の答えにいくつかの情報を追加して嬉しいです。

+0

パーフェクト..私は間違っていると思っていました。あなたの答えは私のために働くはずです...さまざまなコンテンツについて、レスポンスはキャッシュされ、キャッシュされたobjを配信します。 – user1609085

+1

あなたのワニス構成でパージを実装し、オブジェクトを無効にする必要があるときはいつでも使用することをお勧めします。ここにリンクがあります:http://book.varnish-software.com/4.0/chapters/Cache_Invalidation.html#http-purge – alejdg

関連する問題