0

お役に立てれば幸いです

その場で画像を生成する画像サーバーがあります。生成された画像をキャッシュするためにワニスを使用しています。

ワニスが受け取った (画像ごとの) リクエスト数と、それがヒットかミスか (パスはミスとしてマークされる) を記録する必要があります。現在、ヒット/ミスを含むアクセスログをファイルに書き込んでいます。次に、crontab を使用してこのアクセスログファイルを処理し、データをデータベースに書き込みます...

代わりにやりたいことは次のとおりです。

Varnish でバックエンドにリクエストを送信し、キャッシュ ヒットを通知します (可能であれば、応答サイズ (バイト))。バックエンドはこのデータを保存できます...

これはまったく可能ですか?


誰かが興味を持っている場合:

  • それぞれ 1 つの (java+tomcat) バックエンドを持つ 2 つのワニス インスタンス。
  • サービスは、リクエストで行われた要件に固有の各画像を操作および生成します...

以下は1日あたりです。

  • 各ページに少なくとも 3 つの画像が含まれる 3,500 万を超えるページビュー。
  • Varnish は、約 300 万件以上の画像リクエストを受け取ります (画像はブラウザによってキャッシュされます)。
  • ワニスの命中率は87%
  • ヒットの応答時間は数マイクロ秒
  • ミスの応答時間は、画像のサイズ (ソースと出力の両方) に応じて 50 ミリ秒から 1000 ミリ秒です。
4

2 に答える 2

2

varnishlogこれを行う最善の方法は、出力を追跡し、必要に応じて HTTP 呼び出しを行うヘルパー プロセスを用意することです。

で必要なデータをログに記録することでこれを行うことができるstd.log()ためvcl_deliver、ヘルパー プロセスは必要なすべてのデータを取得します。obj.hits > 0これがキャッシュ ヒットかどうかを確認するために使用します。

本当にインラインで実行する必要がある場合 (およびすべてのキャッシュ ヒットを大幅に遅くする必要がある場合) は、次を使用できますlibvmod-curl

https://github.com/varnish/libvmod-curl
于 2013-04-27T17:29:09.020 に答える
1

vcl 内から統計サーバーにリクエストを送信する場合は、着信リクエストごとではなく、100 (または何でも) リクエストごとに送信する、ある種の集約リクエストを組み込むことを試みます。

他の回答と同様に、ログ ファイルを追跡するプロセスで varnishncsa (または varnishlog) を使用することをお勧めします。その方法では多少の遅延が発生する可能性がありますが、それが許容できる場合は、logrotated の実行時にワニス ログを後処理することを検討します。このようにして、1 日分のデータを取得し、必要なレポートを作成して、それをかき回すことができます。

于 2016-04-28T15:10:52.373 に答える