Как используют YDB в Yandex Cloud

Кажется, ответ на вопрос «Как вы используете СУБД?» тривиален: пишем и читаем данные. Но за годы простые ответы обрастают подробностями: масштабирование, перемещение данных через брокеры сообщений и, конечно, векторный поиск для ИИ и RAG.

Краткий пересказ YandexGPT
  • YDB — это СУБД Яндекса. Её разрабатывают с 2014 года, а с начала 2022 года её исходный код доступен в опенсорсе.
  • В Yandex Cloud доступны два способа развёртывания YDB: serverless (настройкой и масштабированием серверов занимается команда Yandex Cloud) и dedicated (настройкой серверов занимается команда клиента).
  • YDB разделяет серверы на слой хранения и слой вычисления, которые могут масштабироваться независимо друг от друга.
  • YDB используют для работы с операционными данными (бизнес-транзакции, продажи, события от IoT-устройств и т. д.).
  • YDB применяют для хранения метаданных и полуструктурированных данных — например, товарных остатков в формате JSON или Protobuf.
  • YDB поддерживает точный и приближённый векторный поиск, который используется в ИИ-ассистентах, рекомендательных и поисковых системах (например, в Алисе для персонализированного общения).
  • YDB может служить единой точкой доступа для ИИ-сценариев: для векторного и гибридного поиска, работы моделей с фактами, организации долговременной памяти агентов и быстрого прототипирования ИИ-сервисов.
  • YDB надёжно хранит данные в таблицах и топиках, поддерживает транзакции между ними и обеспечивает гарантии строго однократной передачи данных.
  • Топики в YDB совместимы с протоколами Apache Kafka® и Amazon Kinesis, что позволяет использовать YDB как единое хранилище для интеграции данных из разных систем.
  • В Yandex Cloud можно бесплатно выполнить миллион запросов к YDB каждый месяц, а для более масштабных тестов можно запросить дополнительные ресурсы у команды Yandex Cloud.

Меня зовут Максим Зиналь, и мы с командой делаем YDB (СУБД Яндекса). Разработка этого проекта ведётся с 2014 года, а в начале 2022-го мы выложили его исходный код в опенсорс. Кажется, что это было вчера. Но прошло уже больше четырёх лет, и всё больше клиентов за пределами Яндекса используют как коммерческую сборку с открытым ядром, так и управляемый сервис в Yandex Cloud.

Операционные данные

Если бы у YDB было резюме, то работа с операционными данными точно стояла бы в нём на первой строчке. Такими данными могут быть бизнес-транзакции в финтехе, продажи в ритейле, поток событий о действиях пользователя, даже логи и события от IoT-устройств. Бесконечный поток событий может быть неравномерно распределён по времени с пиковыми часами и генерировать большие объёмы данных, которые экономически целесообразно охлаждать в более дешёвых хранилищах.

В Yandex Cloud можно выбрать один из двух способов развёртывания YDB: serverless или dedicated. При первом способе клиентские SDK подключаются к общему пулу серверов СУБД. Настройкой и масштабированием этих серверов занимается команда Yandex Cloud: в слое вычисления всегда будет достаточно узлов, чтобы выдержать резкие всплески нагрузки, а слой хранения масштабируется пропорционально объёму данных клиентов.

Архитектурно YDB разделяет серверы на слой хранения и слой вычисления: они обмениваются данными по сети и могут масштабироваться независимо друг от друга. Например, если в пиковые часы нагрузка на СУБД вырастает десятикратно, то выполнение этих запросов распределяется по серверам слоя вычисления, доступным в serverless-облаке. Эти серверы получают данные со слоя хранения, кешируют данные в памяти, выполняют SQL-запросы и отправляют данные в слой хранения на запись.

Некоторым клиентам, например вендорам прикладного ПО, необходима изоляция СУБД на уровне сети, гарантии отсутствия «шумных соседей» и применение к серверам собственных политик безопасности на уровне сети. Такие клиенты используют YDB в dedicated-режиме: Yandex Cloud эластично выделяет серверы в соответствии с заданными параметрами, в том числе с учётом уровня нагрузки, и позволяет установить нужные ограничения доступа на уровне сети. Настройкой этих серверов и YDB занимается уже команда клиента.

YDB в Yandex Cloud для хранения операционных данных используют ритейл, банки, процессинговые компании и компании, предлагающие сервисы по работе с данными.

Эластичность YDB помогает легко масштабировать не только слой вычисления, но и слой хранения. Мы рассказывали на Хабре про сервис техплатформы городских сервисов Яндекса, где нужно хранить сотни терабайт исторических данных, которые могут понадобиться в любой момент.

Метаданные

В каких ещё ситуациях эластичное масштабирование СУБД в облаке становится выигрышным архитектурным решением? Например, когда в облаке уже есть какой-то эластичный сервис и база данных должна расти вместе с ним. Компания может использовать S3 API для записи и чтения данных, а Yandex Cloud будет заботиться о том, чтобы для надёжного хранения было достаточно места.

YDB в Yandex Cloud и для закрытого контура можно использовать для гибридного хранения структурированных и неструктурированных данных. Тяжёлый неструктурированный контент, например фотографии, аудио- и видеозаписи, можно хранить в экономичном S3-совместимом объектном хранилище, а компактные структурированные описания информации — в реляционном хранилище YDB.

Так, команда Flocktory с нуля разработала Online ML Feature Store: специализированное хранилище для признаков, используемых в машинном обучении. Ежедневно Feature Store обновляет 40 ГБ данных в YDB, добавляя новые и удаляя старые записи. Сервис обрабатывает 1,5 тыс. запросов в секунду, при этом по SLA каждый запрос обрабатывается менее чем за 80 мс.

Мы рассказывали о том, как «1С-Битрикс» реплицирует петабайтное хранилище. YDB используют для хранения метаинформации об отложенном удалении, чтобы файлы можно было восстановить из резервного хранилища в течение двух месяцев. Команда «1С-Битрикс» переиспользовала уже написанный код сервисов, так как Yandex Managed Service for YDB поддерживает популярный интерфейс DynamoDB.

Полноэкранное изображение

Полуструктурированные данные

Кроме журналов событий и метаданных мы часто видим использование YDB в облаке для работы с полуструктурированными данными, например товарными остатками в формате JSON или Protobuf. Такой сценарий популярен для проектов, связанных с ритейлом, где много интеграций с партнёрами. Данные часто выгружаются в виде снапшотов, схема которых постоянно меняется, а сама выгрузка неравномерно распределена по пиковым часам.

В статье на Хабре мы рассказывали о том, как Яндекс Еда использует YDB в роли простого хранилища полуструктурированных данных. Архитектура такого хранилища подразумевает, что оно ничего не знает о хранимых данных. В ритейле схема данных меняется слишком часто: сегодня добавили discount_price, завтра — is_eco_friendly. Чтобы постоянно не мигрировать терабайтные таблицы на новую схему, в основной таблице хранилища всего девять колонок, из которых главную роль играют колонка первичного ключа и колонка data с сериализованным Protobuf.

Полноэкранное изображение

Эмбеддинги для векторного поиска

YDB поддерживает точный и приближённый векторный поиск для нахождения ближайших по смыслу данных: текста, звука, изображений. Такой поиск подходит для RAG, ИИ-ассистентов, рекомендательных и поисковых систем. Векторный поиск используется в Алисе, если включена опция «Персонализированное общение».

Для данных можно создать один или несколько векторных индексов. Это позволяет выполнять семантический поиск по терабайтам данных за десятки миллисекунд. В марте мы рассказывали о том, как Нейроюрист ищет подходящие по смыслу юридические документы и добавляет их в промпт, на основе которого языковая модель формулирует ответ. Такой механизм известен как RAG.

Нейроюрист использует семейство векторных индексов с разными параметрами, ограничивает их предикатами и явно указывает нужный индекс в запросе для поиска. Время векторного поиска топ-50 векторов на стороне YDB составляет около 15 мс для p50 и до 200 мс для p99, а качество поиска для RAG сохраняется как на больших (более 2,5 млн), так и на маленьких (порядка 6 тыс. векторов) подвыборках.

Полноэкранное изображение

YDB в Yandex Cloud можно использовать в роли единой точки доступа для ИИ-сценариев. Одну СУБД можно использовать для векторного и гибридного поиска, для работы моделей с фактами, для организации долговременной памяти агентов и быстрого прототипирования ИИ-сервисов — например, для разработки навыка Алисы.

Данные в YDB могут быть использованы ML-моделями в реальном времени, а онлайн-хранилища признаков (Feature Store, как у Flocktory) могут обновляться почти в реальном времени.

Интеграция данных

YDB надёжно хранит данные в таблицах и топиках, поддерживает транзакции между ними, обеспечивает гарантии строго однократной передачи данных. Топики в YDB — это брокер сообщений, который совместим с протоколами Apache Kafka® и Amazon Kinesis.

Про Apache Kafka API в YDB мы уже рассказывали в статье на Хабре: поддержка разных API позволяет использовать YDB в облаке как единое хранилище для интеграции данных из разных систем. Компании из финтеха, ритейла и телекома, которые сейчас используют Apache Kafka, рассматривают YDB в качестве такого хранилища с автоматическим трансфером данных и гарантиями доставки сообщений между таблицами и топиками.

YDB в Yandex Cloud

Распределённые СУБД и эластично масштабируемые облака дополняют сильные стороны друг друга. В serverless-режиме облако всегда имеет запас мощностей под пиковую нагрузку, и для кластеров YDB выделяется оптимальное количество узлов под слои хранения и вычисления. Команда инженеров Yandex Cloud обслуживает и масштабирует как СУБД, так и облака, обеспечивая совместную работу всех компонентов.

YDB в облаке уже настроена и готова к масштабированию, векторному поиску, потоковой обработке данных. А для переиспользования существующего клиентского кода облако поддерживает протоколы Amazon DynamoDB и Amazon Kinesis.

Всё это можно протестировать перед использованием: проверить архитектуру своего решения, масштабируемость и отказоустойчивость, время отклика СУБД под нагрузкой. Каждый месяц в Yandex Cloud можно бесплатно выполнить миллион запросов к YDB. Для проведения более масштабных тестов дополнительные ресурсы можно запросить у команды Yandex Cloud.

Как используют YDB в Yandex Cloud
Войдите, чтобы сохранить пост