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

Быстрый доступ к хеш-набору в Varnish

Я разрабатываю пайплайн Varnish, который обслуживает как общедоступные, так и ограниченные ресурсы.

Поскольку доступ к общедоступным ресурсам составляет подавляющее большинство (> 99,9%) трафика, я хочу создать ярлыки для обхода проверки токена аутентификации и других подобных вещей для неограниченных ресурсов - или, что еще лучше, пройти только через authN / Z путь, если ресурс находится в некоем черном списке.

Этот черный список может содержать до 1 миллиона (в течение следующих нескольких лет) записей UUID4. Такой файл в виде обычного текста занимает около 3,7 ГБ на диске, поэтому машина с хорошим объемом оперативной памяти должна иметь возможность хранить все это в памяти.

Мой вопрос о том, как реализовать этот черный список, чтобы поиск происходил очень быстро. Я думал о «родном» наборе хешей, или о Memcached, или о подобных методах. Распространение Memcached, скорее всего, замедлит работу. Кто-нибудь реализовал подобный подход? Какие инструменты есть в моем распоряжении Varnish?

В Varnish у вас нет прямого доступа к хешу объекта.

Однако, как вы указали, вы можете сохранить список ограниченных ресурсов в хранилище "ключ-значение".

KVStore в Varnish Enterprise

Когда мы говорим о чистой скорости исполнения, Varnish Enterprise имеет модуль KVStore. это KVStore хранится в локальной памяти и может быть восстановлен из файла при перезапуске.

Varnish Enterprise не является бесплатным и требует приобретения лицензионного ключа. Если вам нужен более низкий порог входа для корпоративной версии, есть официальные образы компьютеров Varnish Enterprise на AWS, Azure, GCP и OCI. И для Ubuntu, и для Red Hat. Вы не платите предоплату за лицензию и оплачиваете почасовую оплату. Видеть https://aws.amazon.com/marketplace/pp/B07L7HVVMF?ref_=srh_res_product_title для примера на AWS

Redis VMOD

Если Varnish Enterprise не для вас, вы также можете использовать Redis VMOD Карлоса Абальде. Это бесплатно, с открытым исходным кодом и достаточно хорошо выполняет свою работу.

Вы можете бегать LUA сценарии внутри VCL для запуска более сложной логики из Redis.

Если вы боитесь, что Redis замедлит вашу работу, вы можете ограничить количество подключений и даже сделать так, чтобы подключение было общим.