Serverless и Dedicated режимы работы Yandex Database
Базы YDB могут быть созданы в двух режимах:
- Dedicated — пользователю необходимо при создании базы данных заранее определить, какие ресурсы будет потреблять его база данных в терминах, так называемых compute ресурсов (CPU и RAM) и storage ресурсов; в этом случае пользователь оплачивает выделенные для него ресурсы;
- Serverless — пользователь не определяет ресурсы, которые необходимо выделить для обслуживания его базы, YDB автоматически выделяет и освобождает ресурсы, исходя из пользовательской нагрузки, то есть исходя из объема хранимых данных и количества, и сложности операций, выполняемых с данными; в этом случае пользователь оплачивает стоимость выполнения операций и хранимых данных.
Стоимость работы с YDB описана в разделах Правила тарификации для YDB Serverless и Правила тарификации для YDB Dedicated. В этой статье рассказываются принципы устройства Dedicated и Serverless режима работы YDB.
Разделение compute и storage слоев
Важно понимать, что в YDB явно выделены слои storage и compute. Storage слой отвечает за надежное хранение данных на устройствах хранения и репликацию данных между узлами для обеспечения отказоустойчивости.
В YDB данные пользователя хранятся в таблицах, таблицы партицированы. Шард — это сущность, которая отвечает за хранение партиции таблицы (обычно, одной). За изменение данных в шарде отвечает такая сущность как Таблетка — это компонент, реализующий согласованное изменение данных в шарде и решающий проблему распределенного консенсуса. На инстанс таблетки можно смотреть как на объект, который порожден в адресном пространстве процесса и потребляет процессорные ресурсы и оперативную память. Все свое состояние Таблетка хранит в storage слое. Это, в том числе, означает, что инстанс Таблетки может быть поднят в произвольном процессе, откуда доступен storage слой. Compute слой YDB по сути состоит из Таблеток и слоя выполнения YQL-запросов.
Стоит отметить, что понятие базы данных состоит не только из пользовательских таблиц и, соответственно, Таблеток обслуживающих эти таблицы, но и определенных системных сущностей. Например, есть Таблетка SchemeShard, которая обслуживает схему данных всех таблиц, есть система координации распределенных транзакций, элементы которых также представляют собой Таблетки.
Dedicated режим работы YDB
Режим работы Dedicated предполагает, что ресурсы на инстансы Таблеток и на выполнение YQL-запросов выбираются из явно выделенных для базы данных compute ресурсов. Под compute ресурсами понимаются виртуальные машины, обладаемые определенным количеством vCPU и памяти. Задача выбора оптимального количества ресурсов для базы данных в настоящий момент лежит на пользователе. Если ресурсов будет недостаточно для обслуживания подаваемой нагрузки, то latency запросов начнет увеличиваться, а в пределе будет отказ в обслуживании запросов, например с кодом возврата OVERLOADED
. Пользователь может добавить compute ресурсы (виртуальные машины) в базу данных в UI или CLI для того, чтобы обеспечить базу данных необходимым количеством вычислительных ресурсов. Добавление compute ресурсов в базу данных происходит относительно быстро и сопоставимо со временем запуска виртуальных машин. Далее YDB автоматически отбалансирует Таблетки по кластеру с учетом добавленных ресурсов.
Serverless режим работы YDB
В Serverless режиме работы инфраструктура YDB определяет сколько вычислительных ресурсов необходимо выделить для обслуживания пользовательской базы. Количество выделенных ресурсов может быть как очень большим (произвольное количество ядер), так и очень маленьким (значительно менее одного ядра). Если пользователь создал базу данных из одной таблицы с одной записью в ней, при этом выполняет запросы к базе крайне редко, то YDB по сути тратит незначительный объем памяти на инстансы Таблеток, которые входят в состав пользовательской базы. Это возможно за счет того, что компоненты пользовательской базы представляют собой объекты, а не процессы. Если нагрузка возрастает, то компоненты базы начинают потреблять больше процессорного времени и памяти. Если нагрузка возратает до пределов, когда ресурсов виртуальной машины не хватает, инфраструктура YDB имеет возможность гранулированно балансировать систему, порождая инстансы Таблеток на других виртуальных машинах.
Подобная технология позволяет очень плотно упаковывать виртуальные сущности (инстансы Таблеток) в физические ресурсы на основе реального потребления, что дает возможность выставлять счет пользователю за выполненные операции, а не за выделенные ресурсы.