Обзор YDB

YDB — это горизонтально масштабируемая распределенная отказоустойчивая СУБД. YDB спроектирована с учетом требований высокой производительности — например, обычный сервер может обрабатывать десятки тысяч запросов в секунду. В дизайн системы заложена работа с объемами данных в сотни петабайт. YDB может эксплуатироваться в однодатацентровом и геораспределенном (кросс-датацентровый) режимах на кластере из тысяч серверов.

YDB обеспечивает:

  • строгую консистентность с возможностью ослабления для увеличения производительности;
  • поддержку запросов YQL (диалект SQL для работы с большими данными);
  • автоматическую репликацию данных;
  • высокую доступность с автоматической обработкой отказов вычислительных узлов, стоек, или зон доступности;
  • автоматическое партицирование данных при увеличении их объема или увеличении нагрузки.

Для взаимодействия с YDB доступен YDB CLI, а также SDK для C++, C#, Go, Java, Node.js, PHP, Python и Rust.

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

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

В YDB поддерживаются высокопроизводительные распределенные ACID-транзакции, которые могут затрагивать несколько записей из разных таблиц. Обеспечивается самый строгий уровень изоляции транзакций — serializable. Также имеется возможность ослабления уровня изоляции для увеличения производительности.

В дизайн YDB заложена поддержка разных сценариев нагрузки, таких как OLTP и OLAP. В текущей реализации поддержка аналитических запросов ограничена. Поэтому можно говорить, что в данный момент YDB — это OLTP-база данных.

YDB — открытая система. Исходный код YDB доступен под лицензией Apache License 2.0. Взаимодействие клиентских приложений с YDB построено на базе протокола gRPC, спецификация которого открыта, что позволяет реализовать SDK для любого языка программирования.

Сценарии применения

YDB является альтернативой имеющимся решениям в следующих случаях:

  • При использовании NoSQL-систем, когда требуется строгая консистентность данных.
  • При использовании NoSQL-систем, когда требуется транзакционное изменение данных, хранящихся в разных строках одной или нескольких таблиц.
  • В системах, требующих обработки и хранения большого объема данных, с возможностью практически неограниченного горизонтального масштабирования (в эксплуатации находятся промышленные кластеры более чем из 5000 узлов, обрабатывающие нагрузку в миллионы RPS и хранящие петабайты данных).
  • В системах с незначительной нагрузкой, когда поддержка отдельного инстанса базы данных будет расточительна с материальной точки зрения (предлагается использовать YDB в режиме бессерверных вычислений).
  • В системах с плохо предсказуемой или сезонно меняющейся нагрузкой (используя возможность добавления/уменьшения вычислительных ресурсов по запросу и/или в режиме бессерверных вычислений).
  • В высоконагруженных системах, которые шардируют нагрузку между инстансами реляционной базы данных.
  • При разработке нового продукта, для которого нет надежного прогноза будущей нагрузки, или ожидается большая нагрузка, превышающая возможности традиционных реляционных баз данных.

Как это работает?

Полное объяснение того, как работает YDB, получилось бы слишком объемным. Ниже вы можете ознакомиться с несколькими основными моментами, а затем продолжить изучение документации, чтобы узнать больше.

Архитектура YDB

Архитектура YDB

Кластеры YDB обычно работают с shared nothing архитектурой на обычном оборудовании. Уровни вычислений и хранения являются разнёсенными. Они могут работать как на отдельных наборах узлов, так и быть совмещёнными.

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

Более подробная информация об общей архитектуре YDB объясняется в разделе документации о кластерах YDB.

Иерархия

Иерархия

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

Таблица

Таблица

YDB предоставляет пользователям хорошо известную абстракцию: таблицы. В YDB таблицы должны содержать первичный ключ, данные физически сортируются по первичному ключу. Таблицы автоматически шардируются по диапазонам первичных ключей в зависимости от нагрузки и объема данных. Каждый диапазон первичных ключей таблицы обрабатывается определенной таблеткой, называемой data shard.

Разделение по нагрузке

Разделение по нагрузке

Data shard автоматически разделяются на большее количество при увеличении нагрузки. Они автоматически объединяются в нужное количество, когда пиковая нагрузка уходит.

Разделение по размеру

Разделение по размеру

Data shard также автоматически разделяются при увеличении размера данных. Они автоматически сливаются обратно, если достаточное количество данных будет удалено.

Автоматическая балансировка

Автоматическое балансирование

YDB равномерно распределяет таблетки среди доступных узлов. Она перемещает тяжело загруженные таблетки с перегруженных узлов. Метрики CPU, памяти и сети отслеживаются для облегчения этого процесса.

Внутреннее устройство распределенного хранилища

Внутреннее устройство распределенного хранилища

YDB не полагается на сторонние файловые системы. Она хранит данные, работая непосредственно с дисковыми накопителями как блочными устройствами. Поддерживаются все основные типы дисков: NVMe, SSD или HDD. За работу с конкретным блочным устройством отвечает компонент PDisk. Уровень абстракции выше PDisk называется VDisk. Также есть специальный компонент, называемый DSProxy, между таблеткой и VDisk. DSProxy анализирует доступность и характеристики дисков и выбирает, какие диски будут обрабатывать запрос, а какие нет.

Прокси распределенного хранилища (DSProxy)

DSProxy

Геораспределенная и отказоустойчивая конфигурация YDB обычно охватывает 3 датацентра или зоны доступности (Availability Zone - AZ). Когда YDB записывает данные на 3 зоны доступности, он не отправляет запросы на явно некорректные диски и продолжает работать без прерываний даже если одна зона доступности и диск в другой зоне доступности потеряны.

Что дальше?

Если вас интересует более подробная информация о различных аспектах YDB, ознакомьтесь с соседними статьями в данном разделе документации. Если вы готовы к более практическому контенту, вы можете перейти к быстрому старту или курсу по YQL.