diff --git a/ydb/docs/ru/core/concepts/cluster/_includes/common_scheme_ydb/tablets.md b/ydb/docs/ru/core/concepts/cluster/_includes/common_scheme_ydb/tablets.md index 703eca203790..935c1931e0d8 100644 --- a/ydb/docs/ru/core/concepts/cluster/_includes/common_scheme_ydb/tablets.md +++ b/ydb/docs/ru/core/concepts/cluster/_includes/common_scheme_ydb/tablets.md @@ -1,6 +1,8 @@ ## Таблетки {#tablets} -На каждом узле выполняются специальные микросервисы, которые называются *таблетками*. Каждая таблетка имеет определенный тип и идентификатор и является singleton'ом, что означает, что в каждый момент времени во всем кластере может работать только одна таблетка с конкретным идентификатором. Таблетка может запускаться на любом из подходящих для нее узлов. Важной характеристикой таблетки является ее поколение — *Generation* — которое увеличивается при каждом следующем запуске. Стоит отметить, что в силу распределенности системы и наличии различного рода проблем, например, сетевого партиционирования, может сложиться ситуация, когда одна и та же таблетка будет фактически выполняться на двух разных узлах одновременно. Но BlobStorage гарантирует, что только одна из них сможет успешно завершить операции, изменяющие ее состояние, и при этом поколение, в котором выполнена каждая успешная операция, не будет убывать со временем. +На каждом узле выполняются специальные микросервисы, которые называются *таблетками*. Каждая таблетка имеет определенный тип и идентификатор и является singleton'ом, что означает, что в каждый момент времени во всем кластере может работать только одна таблетка с конкретным идентификатором. Таблетка может запускаться на любом из подходящих для нее узлов. Важной характеристикой таблетки является ее поколение — *Generation* — которое увеличивается при каждом следующем запуске. Стоит отметить, что в силу распределенности системы и наличии различного рода проблем, например, сетевого партиционирования, может сложиться ситуация, когда одна и та же таблетка будет фактически выполняться на двух разных узлах одновременно. Но BlobStorage гарантирует, что только одна из них сможет успешно завершить операции, изменяющие ее состояние, и при этом поколение, в котором выполнена каждая успешная операция, не будет убывать со временем. + +Для системных таблеток кластера узел, на котором запускается таблетка, выбирается с помощью механизма Bootstrapper, реализующего [распределённый консенсус](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%81%D0%B5%D0%BD%D1%81%D1%83%D1%81_%D0%B2_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%D1%85). Пользовательскими таблетками управляет специальная таблетка Hive. Hive следит за тем, что акутальное поколение каждой таблетки запущено ровно на одном узле, распределяет таблетки между узлами и каналы таблеток между группами хранения. Узнать, на каком узле выполняется таблетка в актуальном поколении, можно через сервис *StateStorage*. Для отправки сообщений в таблетку существует специальный набор библиотек, который называется *tablet pipe*. При помощи него, зная идентификатор целевой таблетки, можно легко послать ей нужное сообщение. diff --git a/ydb/docs/ru/core/concepts/cluster/_includes/hive/autobalancing.md b/ydb/docs/ru/core/concepts/cluster/_includes/hive/autobalancing.md new file mode 100644 index 000000000000..02e2dca08b99 --- /dev/null +++ b/ydb/docs/ru/core/concepts/cluster/_includes/hive/autobalancing.md @@ -0,0 +1,19 @@ +# Автобалансировка + +В опеределённые моменты Hive может запустить процесс автобалансировки, перемещающий таблетки между узлами для улучшения распределения нагрузки. Далее перечислены ситуации, в которых это происходит. + +## Дисбаланс потребления ресурсов + +Для оценки сбалансированности потребления используется метрика *Scatter*, вычисляемая отдельно для каждого ресурса по формуле + +$$ \mathrm{Scatter} = \frac{\mathrm{MaxUsage} - \mathrm{MinUsage}}{\mathrm{MaxUsage}}, $$ + +где $\mathrm{MaxUsage}$ и $\mathrm{MinUsage}$ --- соответственно максимум и минимум по потреблению данного ресурса среди всех узлов. Для нормировки потребления на каждом узле используется число доступных ресурсов на узле, которое может различаться между узлами. При низких нагрузках эта величина может сильно колебаться. Чтобы этого избежать, при вычислении $\mathrm{Scatter}$ считается, что потребление ресурса не может быть ниже 30%. + +## Перегруженность узла + +Наличие сильно загруженного узла может негативно сказываться на работе {{ ydb-short-name }}: загруженность по CPU приводит к голоданию и увеличению задержки, а загруженность по памяти может привести к падению узла по out-of-memory. Балансировка запускается, если самый загруженный узел имеет загрузку больше 90%, а наименее загруженный -- меньше 70%. + +## Равномерное распределение конкретного объекта + +Для таблеток, которые используют ресурс Counter, также отслеживается равномерность распределения таблеток каждого объекта (каждой таблицы), с помощью метрики *ObjectImbalance*, аналогичной описанной выше Scatter. При рестартах узлов равномерность может нарушаться, и тогда запускается балансировка. diff --git a/ydb/docs/ru/core/concepts/cluster/_includes/hive/intro.md b/ydb/docs/ru/core/concepts/cluster/_includes/hive/intro.md new file mode 100644 index 000000000000..bfe18e6b3aa7 --- /dev/null +++ b/ydb/docs/ru/core/concepts/cluster/_includes/hive/intro.md @@ -0,0 +1,3 @@ +# Hive + +Hive -- таблетка, отвечающая за управление другими таблетками. В кластере {{ ydb-short-name }} есть корневой Hive, который отвечает за системные таблетки всех баз данных кластера. Hive конкретной базы данных в свою очередь отвечает за таблетки, обслуживающие пользовательскую нагрузку этой базы данных. Все узлы кластера регистрируются в корневом Hive, а в Hive конкретной базы регистрируются только вычислительные узлы этой базы. При регистрации узел сообщает в Hive, таблетки каких типов и в каких количествах могут быть на нём запущены. diff --git a/ydb/docs/ru/core/concepts/cluster/_includes/hive/metrics.md b/ydb/docs/ru/core/concepts/cluster/_includes/hive/metrics.md new file mode 100644 index 000000000000..7d65c8a8c7eb --- /dev/null +++ b/ydb/docs/ru/core/concepts/cluster/_includes/hive/metrics.md @@ -0,0 +1,10 @@ +# Метрики потребления ресурсов + +Для распределения таблеток по узлам Hive учитывает потребление ресурсов. Для каждой таблетки учитываются потребления 4 ресурсов: + +1. *CPU* -- потребление процессора, считается как число микросекунд, потраченных на работу таблетки за последнюю секунду и для визуализации переводится в проценты ядра. Поскольку таблетки однопоточные, потребление одной таблеткой не превышает 100%, в то время как сумма потребления таблеток на узле может быть и больше. +1. *Memory* -- потребление таблеткой оперативной памяти. +1. *Network* -- генерируемый таблетокй объём траффика. Подсчёт этого ресурса поддержан не во всех типах таблеток. +1. *Counter* -- фиктивный ресурс, используемый для реализации равномерного распределения в штуках. Применяется для любых таблеток, для которых нет данных по трём другим ресурсам, а также для таблеток колоночных таблиц. Если у таблетки есть этот ресурс, то его значение всегда равно 1. + +Дополнительно для определения перегруженных узлов используются метрики потребления ресурсов узла целиком: потребление оперативной памяти, и ресурсов процессора в пулах акторной системы. Эти значения переводятся в относительную величину (число от 0 до 1), и их максимум используется как значение общего потребления ресурсов узла *Node usage*. Также для всех метрик на стороне Hive используется аггрегация на окне, чтобы учитывать всплески нагрузки. diff --git a/ydb/docs/ru/core/concepts/cluster/hive.md b/ydb/docs/ru/core/concepts/cluster/hive.md new file mode 100644 index 000000000000..81a44ac2229c --- /dev/null +++ b/ydb/docs/ru/core/concepts/cluster/hive.md @@ -0,0 +1 @@ +{% include [concepts/index/intro.md](_includes/hive/intro.md) %} diff --git a/ydb/docs/ru/core/concepts/toc_i.yaml b/ydb/docs/ru/core/concepts/toc_i.yaml index 27e6734d06cb..06d487cd081f 100644 --- a/ydb/docs/ru/core/concepts/toc_i.yaml +++ b/ydb/docs/ru/core/concepts/toc_i.yaml @@ -24,3 +24,5 @@ items: href: cluster/common_scheme_ydb.md - name: Дисковая подсистема кластера href: cluster/distributed_storage.md + - name: Hive + href: cluster/hive.md diff --git a/ydb/docs/ru/core/reference/embedded-ui/hive.md b/ydb/docs/ru/core/reference/embedded-ui/hive.md index 7bc2eaf7b5ff..1059324c1ead 100644 --- a/ydb/docs/ru/core/reference/embedded-ui/hive.md +++ b/ydb/docs/ru/core/reference/embedded-ui/hive.md @@ -2,7 +2,7 @@ Web-viewer Hive предоставляет интерфейс работы с Hive. Hive бывает общим на кластер и тенантный. -Попасть на страницу Web-viewer Hive можно из {{ ydb-short-name }} Monitoring. +Попасть на страницу Web-viewer Hive можно из {{ ydb-short-name }} Monitoring с вкладки Tablets. ## Главная страница