Как Vercel масштабирует редиректы до миллионов без потери скорости
Vercel разработала новую систему обработки редиректов, которая позволяет поддерживать миллионы правил без увеличения задержки. Ранее платформа использовала два подхода: правила маршрутизации (routing rules) и middleware. Правила поддерживают до 2000 сложных редиректов с подстановочными знаками, но р

Vercel разработала новую систему обработки редиректов, которая позволяет поддерживать миллионы правил без увеличения задержки. Ранее платформа использовала два подхода: правила маршрутизации (routing rules) и middleware. Правила поддерживают до 2000 сложных редиректов с подстановочными знаками, но работают как последовательный список — каждый запрос проверяется по всем правилам, что при росте числа редиректов приводит к линейному увеличению времени обработки. Middleware даёт больше гибкости, но добавляет задержку за счёт выполнения кода на каждом запросе. Новая система решает эти ограничения с помощью фильтров Блума и шардирования.
Почему старые подходы перестали работать
При увеличении числа редиректов до десятков тысяч и миллионов старые методы становились узким местом. Последовательный перебор правил — даже при 2000 правилах — добавлял заметную задержку, а middleware требовал выполнения кода на каждом запросе, что увеличивало время ответа. Для сайтов с высоким трафиком это могло привести к снижению производительности и ухудшению пользовательского опыта. Инженеры Vercel поняли, что нужен принципиально новый подход, который бы отделял проверку наличия редиректа от его выполнения.
Как фильтры Блума ускоряют проверку
Фильтр Блума — это вероятностная структура данных, которая позволяет быстро определить, есть ли элемент во множестве. Он может давать ложноположительные срабатывания (сказать, что элемент есть, когда его нет), но никогда не пропускает существующий элемент. Это свойство идеально подходит для редиректов: если фильтр говорит «редиректа нет», то его точно нет. Vercel решили сначала проверять небольшой кэшированный фильтр Блума, и только в случае положительного ответа обращаться к полному файлу с правилами. Для большинства запросов (которые не требуют редиректа) это позволяет обходиться минимальными затратами — фильтр Блума занимает всего несколько килобайт и проверяется за константное время.
Какова вероятность ложноположительного срабатывания?
Вероятность ложноположительного срабатывания фильтра Блума можно настроить, изменяя его размер и количество хеш-функций. В системе Vercel эта вероятность составляет менее 1%. Даже если фильтр ошибается, система просто загружает шард с правилами, не находит там редиректа и продолжает обработку. Это добавляет небольшую задержку, но не нарушает корректность. Для снижения влияния ложных срабатываний Vercel использует оптимальные параметры фильтра, которые минимизируют их количество.
Шардирование для работы с миллионами правил
Хранить все правила редиректов в одном файле было бы неэффективно — при миллионе правил файл может достигать сотен мегабайт. Загрузка и разбор такого объёма данных на каждый запрос привела бы к недопустимой задержке и расходу памяти. Решением стало шардирование: данные разбиваются на несколько частей с помощью хеширования ключа редиректа. При запросе система вычисляет хеш, определяет нужный шард и загружает только его. Это позволяет держать в памяти лишь небольшую часть данных, а полный набор остаётся на диске или в распределённом хранилище. Каждый шард содержит подмножество правил и свой локальный фильтр Блума, что позволяет независимо проверять наличие редиректа внутри шарда.
Технические детали реализации
Ключевые компоненты решения: фильтр Блума, шардирование на основе хеша и формат JSONL. Фильтр Блума строится на основе всех существующих редиректов и может быть сериализован в JSON. При развёртывании фильтр кэшируется в CDN-узлах, что обеспечивает быстрый доступ. Шардирование выполняется с помощью криптографической хеш-функции (например, SHA-256), которая преобразует URL или ключ редиректа в число, а затем по модулю количества шардов определяется нужный файл. Для снижения ложноположительных срабатываний используются несколько хеш-функций и оптимальный размер фильтра. Формат JSONL (JSON Lines) позволяет легко комбинировать данные редиректов и фильтры Блума — каждая строка файла представляет собой отдельный JSON-объект.
Кого затронет это нововведение
В первую очередь обновление полезно разработчикам и компаниям, которые используют Vercel для хостинга сайтов с большим количеством редиректов — например, после миграции доменов, реструктуризации URL или SEO-оптимизации. Ранее они были ограничены 2000 правилами или вынуждены были использовать middleware с дополнительной задержкой. Теперь можно задавать миллионы редиректов без ущерба для производительности. Для конечных пользователей изменения незаметны — скорость загрузки страниц остаётся высокой. Однако владельцы сайтов, особенно с трафиком в миллионы посетителей, смогут значительно упростить управление редиректами и сократить расходы на инфраструктуру, так как новая система эффективнее использует ресурсы.
Что будет дальше
Vercel продолжает развивать инфраструктуру маршрутизации. В планах — интеграция этой системы с другими продуктами, такими как Edge Functions и Incremental Static Regeneration. Также возможно появление инструментов для автоматического создания редиректов на основе анализа трафика и 404 ошибок. Пока решение доступно в бета-версии для всех пользователей платформы, а в будущем может стать частью стандартного набора функций.
Итог
Новая система редиректов Vercel — пример того, как продуманная архитектура позволяет решить проблему масштабирования, не жертвуя производительностью. Использование фильтров Блума и шардирования даёт возможность обрабатывать миллионы правил с минимальной задержкой. Это важный шаг для платформы, которая стремится поддерживать проекты любого размера, от небольших сайтов до крупных корпоративных порталов.