2013-04-25 2 views
0

Надеюсь, вы сможете помочьЛак: Как отправить статистику хита/промаха на бэкэнд

У меня есть сервер изображений, который генерирует изображения на лету. Я использую лак для создания сгенерированных изображений.

Мне нужно записать, сколько запросов (на изображение) получает лак, а также если это был хит или промах (пропуск становится помеченным как промах). В настоящее время я пишу журналы доступ с хитовым/промахом файл, я затем с помощью процесса CRONTAB этого файла доступ журнала и записать данные в мою БД ...

То, что я хотел бы сделать вместо этого:

Имейте лак, чтобы сделать запрос на мой бэкэнд, уведомляя его о попадании в кеш (и, если возможно, размер ответа (байты)). Мой backend смог бы сохранить эти данные ...

Возможно ли это, и если да, то каким образом?


В случае, кто заинтересован:

  • 2 лака экземпляры каждый с 1 (Java + TOMCAT) бэкэндом.
  • Service манипулирует и формирует каждое изображение, специфичную для требований, предъявляемых в запросе ...

Ниже указаны за день:

  • Более 35 миллионов просмотров страниц, где каждая страница имеет, по меньшей мере, 3 изображения в нем.
  • Varnish получает около 3 миллионов запросов на изображения (изображения также кэшируются браузером).
  • Лак имеет 87% попаданий
  • Время отклика для сЗпп несколько микросекунд
  • Время отклика для промаха являются 50мс до 1000 мс в зависимости от размера изображения (как источника и вывода)

ответ

2

Лучший способ сделать это - иметь вспомогательный процесс, который обрабатывает вывод varnishlog и выполняет ли HTTP-вызовы, когда это необходимо.

Вы можете сделать это, зарегистрировав необходимые данные с помощью std.log() в vcl_deliver, поэтому вспомогательный процесс получает все необходимые ему данные. Используйте obj.hits > 0, чтобы проверить, был ли это хитом кеша.

Если вы действительно должны сделать это рядным (и замедляя все кэша хитов плохо), вы можете использовать libvmod-curl:

https://github.com/varnish/libvmod-curl 
+0

Hi Ikarsten. Спасибо, что нашли время ответить на вопрос. Хорошо, очевидно, что производительность очень важна, поэтому libvmod-curl не вариант. Мое текущее решение работает, однако, я надеялся получить лучшее решение, я рассмотрю использование varnishlog со вспомогательным процессом (как это было предложено) – NeilA

1

Если вы собираетесь отправить запрос на сервер статистики из в вашем vcl я попытался бы включить некоторый тип агрегированного запроса, где вы отправляете его каждые 100 (или любые) запросы вместо каждого входящего запроса.

Как и в другом ответе, я бы рекомендовал использовать varnishncsa (или varnishlog) с процессом, который обрабатывает файл журнала.В этом методе может быть какая-то задержка, но если это приемлемо, я бы рассмотрел пост-обработку журнала лаков при логротате. Таким образом, у вас есть данные за целый день, и вы можете их прокормить, создавая любой отчет, который вам нужен.