Hyperdrive — это управляемый сервис пулинга соединений, который позволяет Workers напрямую взаимодействовать с базами данных PostgreSQL, включая те, что используют расширение pgvector для векторного поиска. Поддерживая набор повторно используемых соединений с базой данных в непосредственной близости от сервера, Hyperdrive сокращает накладные расходы на handshake, которые долгое время мешали работе AI-нагрузок на edge-узлах.
Почему Workers и PostgreSQL конфликтуют
Cloudflare Workers работают как кратковременные JavaScript-функции в десятках edge-локаций. Каждый входящий запрос запускает новый процесс, и стандартная схема подразумевает открытие нового TCP-соединения с базой данных. Однако PostgreSQL ожидает стабильного соединения для каждого клиентского процесса и ограничивает общее количество одновременных подключений. В результате возникают две проблемы:
- Высокая стоимость соединения — установление соединения требует нескольких циклов приема-передачи (round trips) для аутентификации и согласования протокола. Эти циклы добавляют задержку к каждому запросу.
- Лимиты соединений — Workers могут масштабироваться до тысяч одновременных выполнений, что быстро исчерпывает пул соединений PostgreSQL и может привести к сбою базы данных.
Как Hyperdrive устраняет этот разрыв
Hyperdrive располагается между Worker и базой данных, поддерживая пул постоянных соединений на сервере, который сетевым образом близок к экземпляру PostgreSQL. С точки зрения Worker единственным изменением является новая строка подключения. Внутри прокси-сервер повторно использует существующее соединение для каждого входящего запроса, устраняя затраты на handshake.
Настройка намеренно упрощена:
- Запустите Wrangler CLI (инструмент командной строки Cloudflare), чтобы создать экземпляр Hyperdrive, указав исходный URL базы данных.
- Добавьте созданную привязку (binding) Hyperdrive в конфигурационный файл
wrangler.toml. - Используйте совместимый драйвер, например
node-postgres, в коде Worker; драйвер будет воспринимать эндпоинт Hyperdrive как обычный сервер PostgreSQL.
Поскольку пароль базы данных хранится только в конфигурации Hyperdrive, он никогда не появляется в исходном коде Worker, что уменьшает поверхность атаки.
Практические советы для векторного поиска
Нагрузки векторного поиска с использованием pgvector включают в себя большие массивы чисел с плавающей запятой, которые имеют тенденцию меняться при каждом запросе. Поведение Hyperdrive по умолчанию включает кэширование на чтение, что может конфликтовать с постоянно изменяющимися данными. Чтобы результаты оставались актуальными, создайте вторую конфигурацию Hyperdrive с отключенным кэшированием.
Длительные транзакции — еще одна ловушка. Удержание соединения с базой данных во время ожидания ответа от внешней AI-модели занимает слот в пуле и сводит на нет смысл пулинга. Рекомендуемая схема:
- Откройте транзакцию.
- Выполните запрос.
- Немедленно зафиксируйте (commit) изменения.
- Вызовите AI-модель вне транзакции.
Тонкую настройку параметров pgvector (например, параметр hnsw.ef_search, который управляет точностью поиска) можно выполнить с помощью инструкции SET LOCAL внутри короткой транзакции. Это гарантирует, что изменение применится только к текущему запросу и не затронет другие Workers, использующие этот же пул.
Остающиеся ограничения
Hyperdrive не перемещает саму базу данных. Если сервер PostgreSQL находится в удаленном облачном регионе, задержка все равно будет ограничена этим физическим расстоянием. Функция Cloudflare «Smart Placement» может помочь, направляя Workers к ближайшему edge-узлу, на котором также есть экземпляр Hyperdrive, но она не может устранить сетевые задержки (round-trip) на базовом уровне.
Слой кэширования, полезный для статического чтения, будет часто давать промахи (cache miss) при работе с векторными данными, которые меняются с каждым запросом. Разработчикам необходимо взвесить компромисс между попаданием в кэш (cache hit) и актуальностью результатов поиска.
Когда стоит выбрать альтернативу
Если приложению требуется только чистое векторное хранилище без реляционных соединений (joins), Cloudflare предлагает специализированный сервис под названием Vectorize. Vectorize хранит векторы непосредственно на edge-узлах и избавляет от необходимости использования PostgreSQL в качестве бэкенда. Hyperdrive остается лучшим выбором, когда векторы необходимо объединять с существующими реляционными таблицами, такими как профили пользователей или истории транзакций.
Итог
Hyperdrive предоставляет edge-разработчикам практический инструмент для выполнения векторного поиска на базе AI без превышения лимитов соединений PostgreSQL. Он сокращает задержку handshake, централизует учетные данные и предлагает тонкий контроль над кэшированием и длительностью транзакций. Сервис не устраняет фундаментальное расстояние между edge и базой данных, а промахи кэша остаются фактором, который нужно учитывать, но для нагрузок, требующих как реляционных соединений, так и векторного сходства, Hyperdrive является кратчайшим путем к масштабируемому edge-стеку с низкой задержкой.
