Назад | Перейти на главную страницу

Регистрировать запросы API через кеш Varnish

У меня есть Varnish перед стандартным REST API. Запросы должны быть аутентифицированы с помощью заголовка X-Access-Token. Теперь мне нужно отслеживать запросы для каждого ресурса по используемому токену доступа. Например, токен abcd1234 запрашивал / items / xyz 10 раз.

Первоначально я просто собирался подсчитать данные в серверном приложении (PHP), но потом понял, что Varnish, конечно, перехватит любые запросы после первого.

Как лучше всего отслеживать запросы по токенам?

На данный момент я ищу либо чтение varnishlog / varnishncsa в отдельном потоке, либо добавление чего-то вроде Redis VMOD и увеличения счетчика на основе token: url.

Кто-нибудь еще что-нибудь подобное делал?

Я бы посоветовал вам позволить varnish делать то, что он делает лучше всего, кэшировать, и позволить отслеживанию делать varnishog / ncsa

Добавляя Redis Vmod, вы усложняете свой vcl, и если по каким-то причинам ваш Redis выйдет из строя, вы потеряете отслеживание.

Используя varnishlog / ncsa, вы можете построить свою логику отслеживания вне varnish, обрабатывать журнал в реальном времени, передавая процесс varnishlog, или сохранять журнал для последующего использования.

На мой взгляд, здесь есть три разумных варианта:

  1. С помощью Пользовательская статистика Varnish. VCS является частью Лак Плюс и он был специально разработан для решения таких задач, как тот, который вы описываете. Если вы используете Varnish Plus, это то, что вам нужно.

  2. Использование varnishog / varnishncsa вместе с некоторыми счетчиками сброса скриптов во внешнюю базу данных.

  3. Использование Redis или Memcached VMOD. По сравнению с вариантом (2) это добавит незначительные накладные расходы на каждый запрос, но вы сэкономите некоторые операции ввода-вывода и сможете избежать реализации / поддержки сценария. Я думаю, что это лучшая альтернатива, если нельзя использовать VCS.