Я разрабатываю конвейер Varnish, который обслуживает как общедоступные, так и ограниченные ресурсы.
Поскольку доступ к публичным ресурсам составляет большую часть (>99,9%) трафика, я хочу создать ярлыки для обхода проверки токена аутентификации и других подобных вещей для ресурсов без ограничений — или, что еще лучше, проходить по пути authN/Z только в том случае, если ресурс находится в своего рода черном списке.
Этот черный список может содержать до 1 млн (в течение следующих нескольких лет) записей UUID4. Такой файл в виде обычного текста занимает около 3,7 ГБ на диске, поэтому машина с хорошим объемом оперативной памяти должна иметь возможность хранить все это в памяти.
Мой вопрос о том, как реализовать этот черный список, чтобы поиск был очень быстрым. Я думал о «родном» наборе хэшей, или Memcached, или подобных методах. Memcached, скорее всего, замедлит работу, если он распределен. Кто-нибудь реализовал подобный подход? Какие инструменты есть в моем распоряжении у Varnish?
решение1
В 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
ЕслиЛак Предприятиене для вас, вы также можете использоватьRedis VMOD Карлоса Абальде. Он бесплатный, с открытым исходным кодом и отлично справляется со своей задачей.
Вы даже можете бежатьЛУАскрипты внутри VCL для запуска более сложной логики из Redis.
Если вы опасаетесь, что Redis замедлит вашу работу, вы можете ограничить количество подключений и даже убедиться, что подключение является общим.