Перейти к содержанию

Глоссарий

Общие сведения

Данный раздел описывает значения основных терминов, которые используются в Picodata.

Подсистемы

Raft

Raft является алгоритмом распределенного консенсуса, который нужен, чтобы несколько участников могли совместно решить, произошло ли событие или нет, и что за чем следовало. Raft используется в Picodata для согласования работы узлов и поддержания консистентности в кластере. Концепция распределенного консенсуса предполагает, что в кластере всегда есть только один лидер и некоторое количество голосующих узлов. Эти узлы в нормальном состоянии подтверждают легитимность лидера, а при отказе текущего лидера организуют выборы нового.

Web UI

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

CLI (Command-line interface)

CLI — это интерфейс командной строки для запуска и управления как отдельными инстансами, так и всем кластером Picodata.

Дискавери (discovery)

Discovery — алгоритм, по которому инстансы обнаруживают друг друга. Этот шаг необходим на старте каждого инстанса для корректной работы кластера.

Vshard

Vshard — библиотека из экосистемы СУБД Tarantool, используемая в Picodata для горизонтального масштабирования — сегментирования данных по нескольким узлам в кластере. Это становится важным по мере увеличения объёма хранимых данных, ввода в строй новых узлов — т.е. роста кластера. Библиотека Vshard встроена в Picodata и является неотъемлемой ее частью. В клиентских интерфейсах Vshard желательно прятать за фасадом, но при острой необходимости ничто не помешает им воспользоваться.

Сущности

В начале идёт общее обозначение термина, затем в скобках указан предпочтительный вариант употребления в коде (без пробелов в “змеином регистре”).

Инстанс (instance)

Обозначение единицы кластера СУБД и сервера приложений При описании кластера мы различаем программный и логический уровни.

На программном уровне единицей кластера является экземпляр приложения Picodata, также на техническом жаргоне называемый инстансом. Среда выполнения приложения может быть как виртуальной, так и физической. В разрезе операционных систем каждый инстанс порождает два процесса: собственно экземпляр приложения и вспомогательный процесс (supervisor), управляющий жизненным циклом первого.

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

Также инстанс является репликой в составе репликасета и может входить в указанную при его запуске группу инстансов.

Кластер (cluster)

Кластер — набор логических и программных узлов, составляющих отдельную централизованно управляемую группу с общим пространством хранения.

Кластер является наиболее крупной сущностью в системе хранения, в некотором смысле он и есть система хранения. Внутри кластера находятся инстансы, объединенные в репликасеты (см. ниже). Дополнительно, в Picodata используется понятие групп инстансов — отдельного способа более гибко управлять большим числом инстансов в зависимости от их ролей, характера нагрузки и топологии сети.

Схематичное представление кластера, в составе которого есть некоторое число инстансов, репликасетов и групп инстансов, показано ниже.

Репликасет (replicaset)

Репликасет — буквально «набор реплик», экземпляров приложений, в которых хранится один и тот же набор данных. Реплика в составе репликасета может быть в одном из двух состояний:

  • активная (active) — доступная на запись, иногда ее называют мастером или лидером репликасета.
  • резервная (standby) — доступная только на чтение, read-only. В нормальных условиях в репликасете активной является ровно одна реплика, но в отдельных случаях их может быть несколько или не быть вообще.

Группа инстансов (instance_group)

Группа инстансов — это логическое объединение инстансов с общим фактором репликации и ролями. Каждая группа шардируется индивидуально.

Концепция групп является аналогом vshard_group из Cartridge, но дополнительно позволяет назначать роли группам (в Cartridge роли настраивались индивидуально для каждого репликасета).

Группа инстансов является более крупным образованием, чем репликасет. См пояснительную картинку.

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

Домен отказа (failure_domain)

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

Домен отказа представляет собой набор пар “ключ=значение”, которые соответствуют отдельным зонам (географический регион, датацентр, стойка и т.д.). Зоны задаются пользователем исходя из фактической конфигурации оборудования, будь то виртуальные машины в облаке (“region=eu”) или физические сервера (“dc=msk”). Домен отказа может включать несколько зон (“dc=msk,srv=msk-1”).

Можно использовать любые ключи и значения. Picodata не делает предположений об иерархии зон или их физическом смысле и просто сравнивает строки. Тем не менее, чтобы избежать человеческих ошибок, Picodata требует, чтобы набор зон (ключей) на всех инстансах был одинаковым.

Если домены отказа двух инстансов имеют хотя бы одну общую зону (и ключ, и значение), то допускается возможность одновременной потери связи с обоими. Поэтому инстансы, делящие общую зону, не будут объединены в репликасет. Picodata также стремится распределить голосующие raft-узлы таким образом, чтобы их домены отказа имели по-минимуму общих зон.

Фактор репликации (replication_factor)

Фактор репликации — число инстансов в репликасете. Задается общим на группу инстансов (так же как и набор ролей). Отредактировать фактор репликации, сохраненный в конфигурации кластера, можно командой picodata set-replication-factor. Редактирование конфигурации сказывается только на вновь добавляемых инстансах, но не затрагивает уже работающие.

Бакет (bucket)

Bucket (бакет) — виртуальная неделимая единица хранения данных, обеспечивающая их локальность (т. е. нахождение на каком-то одном репликасете).

Спейс (space)

Space (спейс) — пространство хранения данных в СУБД. В резидентных СУБД спейс является синонимом таблицы из реляционных СУБД.

Индекс (index)

Индекс — это специальная структура данных, которая хранит группу ключевых значений и указателей. Индекс строится по какому-либо одному столб таблицы и используется для эффективного поиска значений этого столбца. У каждого спейса обязательно должен быть первичный индекс и опционально некоторое число вторичных индексов.

Терм (term)

Часть алгоритма Raft, порядковый номер временного отрезка, в течение которого правил некоторый один лидер. То есть, в этом промежутке времени не может существовать более одного лидера Raft-группы.

Сетевой адрес (address)

Сетевой адрес — это комбинация host:port, используемая для связи инстансов друг с другом по сети. Другие названия для связки host:port (например URL, URI) мы стараемся искоренить. Расширенная версия user:pass@host:port все равно определяется термином “адрес”.

Грейд (grade)

Grade (грейд) — специфичный для Picodata способ обозначения состояния инстанса. Грейд отражает то, как инстанс сконфигурирован его соседями. Существуют текущий (current) и целевой (target) типы грейдов. За приведение первого ко второму отвечает governor (губернатор).

Губернатор (governor)

Governor (губернатор) — внутренняя централизованная сущность, управляющая конфигурациями и жизненными циклами инстансов в соответствие с изменениями их грейдов. "Губернатор" выполняется на лидере raft-группы.

Крейт (crate)

Крейт (буквально “ящик”) — наименьшая логическая единица проекта, написанного на Rust. С точки зрения компилятора rustc, любой отдельный фрагмент кода является крейтом. Из одного крейта может быть скомпилирован бинарный исполняемый файл, либо разделяемая библиотека. Несколько крейтов могут вместе составлять пакет (package). Пакет может состоять также и из одного крейта. Если крейтов в пакете несколько, то из них только один может предоставлять разделяемую библиотеку.

Процессы и алгоритмы

Компактизация raft-журнала (raft log compaction)

Компактизация — процесс, не допускающий бесконтрольного роста журнала записей Raft. Компактизация заключается в удалении части журнала, относящейся к сделанному ранее снапшоту.

Создание снапшотов (snapshotting)

Создание снапшотов — процесс периодического сохранения состояния инстанса на жесткий диск. Наличие снапшотов (т.е. снимков состояния) позволяют восстановить инстанс в прежнем виде после его перезапуска.

Фенсинг (fencing)

Фенсинг — это подпись всех запросов в кластере номером эпохи или терма, и отказ обслуживать запросы со устаревшей эпохой. Данный инструмент используется для корректной работы распределенной блокировки, т.е. ситуации, когда из нескольких узлов нужно гарантированно выбрать один для выполнения запроса.

СaS (compare and swap)

Compare and swap — особый алгоритм в составе Picodata. Он обеспечивает уровень изоляции транзакций “serializable”, тем самым не допуская случаев несогласованности данных в результате выполнения конкурирующих запросов/транзакций. Таким случаем, например, может быть ситуация, когда одна транзакция затирает результат действия другой, выполняющейся в тоже время. Compare and swap решает эту проблему с помощью проверки предиката, т.е. меняет данные какого-либо параметра кластера только в том случае, если исходное ожидаемое значение этого параметра соответствует исходному фактическому. Технически данный алгоритм реализован в виде хранимой процедуры proc_cas().

Бутстрап (bootstrap)

Bootstrap — процесс первоначального объединения разрозненных инстансов в единый кластер.

Репликация (replication)

Репликация — механизм синхронизации данных между инстансами. В Picodata существует два вида репликации: Tarantool (внутри репликасета) и Raft (глобальная на весь кластер).

RPC

RPC — Remote Procedure Call, т.е. вызов удалённой процедуры. В консоли picodata такими процедурами выступают: - .proc_cas (вызов процедуры Compare and Swap для изменения данных с их текущего состояния); - .proc_read_index (получение текущего значения Raft-индекса).

Общие концепции

Отказоустойчивость

Отказоустойчивость — свойство кластера сохранять наличие и доступность данных при выходе из строя части узлов. В Picodata отказоустойчивость обеспечивается репликацией и грамотным проектированием алгоритмов.

Горизонтальное масштабирование

Горизонтальное масштабирование (оно же сегментирование или шардирование, sharding) — подход, предполагающий разделение данных на сегменты (бакеты, buckets), которые могут храниться на отдельных репликасетах кластера. С точки зрения набора хранимых данных, каждый репликасет называется шардом. Деление на шарды — это ещё один вариант логического деления кластера, но без привязки к серверам, на которых выполняются инстансы. Деление на шарды — это ещё один вариант логического деления кластера, но без привязки к серверам, на которых выполняются инстансы.


Исходный код страницы


Последнее обновление: 25 мая 2023 г.
Дата создания: 10 апреля 2023 г.