Skip to content

Commit ce22a3e

Browse files
committed
article on group assignment
1 parent b49d0b5 commit ce22a3e

File tree

4 files changed

+39
-1
lines changed

4 files changed

+39
-1
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Управление группами хранения в Hive
2+
3+
В данной статье описывается процесс того, как [Hive](../concepts/glossary.md#hive) управляет выдачей [таблеткам](../concepts/glossary.md#tablet) [групп хранения](../concepts/glossary.md#storage-group). При создании таблетки Hive назначает ей группы, и в дальнейшем может их изменить:
4+
5+
* В случае если в группе заканчивается место, таблетки получают об этом сигнал от [прокси](../concpets/glossary.md#ds-proxy) и передают в Hive запрос выдать им другую группу.
6+
* Перераспределение групп может быть запущено вручную с помощью [Hive web-viewer](../reference/embedded-ui/hive.md#reassign-groups).
7+
* Автоматический запуск перебалансировки отключён по умолчанию, но может быть настроен при помощи [конфигурации Hive](../reference/configuration/hive.md#storage).
8+
9+
## Выбор группы {#pick-group}
10+
11+
Для каждого из [каналов](../concepts/glossary.md#tablet-channel) таблетки группа выбирается независимо, вполне возможно, что разные каналы одной и той же таблетки пишут в одну и ту же группу. За каждым каналом закреплён [пул хранения](../concepts/glossary.md#storage-pool) и для этого канала могут быть выбраны только группы из этого пула. Пулы хранения не пересекаются между разными базами данных на одном кластере, при этом у одной базы может быть больше одного пула.
12+
13+
Выбор группы внутри пула делается на основе метрик потребления, принцип работы которых описан в следующем разделе. С их помощью для каждой группы-кандидата $i$ определяется значение потребления $0 < \mathrm{usage}_i < 1$. Затем группа выбирается при помощи взвешенной случайности с весами $w_i = \max_j (\mathrm{usage}_j) - \mathrm{usage}_i$.
14+
15+
В случае кончающегося места важно избежать ситуации, при которой таблетки будут постоянно перемещаться между разными группами, в которых не хватает свободного места. Для того, чтобы избежать этого, в этой версии веса дополнительно модифицируются, чтобы пессимизировать группы, где тоже кончается место. А именно если таблетка перевозится с группы $j$, в которой кончается место, то для группы $i$ модифицированный вес вычисляется по формуле:
16+
17+
$$
18+
\hat{w_i} =
19+
\begin{cases}
20+
0, & \mathrm{free}_i < \mathrm{free}_j \\
21+
\alpha \cdot w_i, & \mathrm{free}_j \le \mathrm{free_i} < \beta \cdot \mathrm{free}_j \\
22+
w_i, & \mathrm{free}_i \ge \beta \cdot \mathrm{free}_j
23+
\end{cases}
24+
$$
25+
26+
где $free_g$ — реальное свободное место в группе $g$, $\alpha, \beta$ — константы. По умолчанию $\alpha = 0.2, \beta = 1.1$, эти значения можно настроить как `space_usage_penalty` и `space_usage_penalty_threshold` в [конфигурации Hive](../reference/configuration/hive.md#storage).
27+
28+
## Allocation Units {#allocation-units}
29+
30+
Как и для выбора узла для запуска таблеток, для выбора групп в Hive предусмотрен учёт потребления таблетками ресурсов. Однако поскольку смена группы происходит не бесследно и делается гораздо реже, чем смена вычислительного узла, использовать мгновенные значения потребления было бы нерационально. Вместо этого используется механизм allocation units: при создании таблетки [SchemeShard](../concepts/glossary.md#scheme-shard) выставляет для каждого из каналов ожидаемое потребление ресурсов этим каналом, и Hive в дальнейшем использует эти значения. Allocation unit'ами для различных таблеток можно управлять при помощи секции `channel_profile_config` в конфигурации кластера. Используются три метрики: IOPS, потребление пропускной способности, и потребление дискового пространства. В конфигурации Hive можно настроить учёт какой-либо одной из них или сразу всех.
31+
32+
33+
## Процесс переназначения групп {#reassign}
34+
35+
Для безопасной смены группы Hive сначала осуществляет блокировку записи в текущем поколении в системном канале таблетки, и только после этого запускает новое поколение таблетки с новой записью в [истории](general-schema.md#history).

ydb/docs/ru/core/contributor/hive.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,4 @@ $\mathrm{MaxUsage}$ и $\mathrm{MinUsage}$ — максимум и миниму
5656
- [Настройка Hive](../reference/configuration/hive.md)
5757
- [Hive web-viewer](../reference/embedded-ui/hive.md)
5858
- [Запуск таблеток](hive-booting.md)
59+
- [Управление группами хранения](hive-storage.md)

ydb/docs/ru/core/contributor/toc_i.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ items:
2525
items:
2626
- name: Запуск таблеток
2727
href: hive-booting.md
28+
- name: Управление группами хранения
29+
href: hive-storage.md
2830
- name: DataShard
2931
items:
3032
- name: Локи и видимость изменений в транзакциях

ydb/docs/ru/core/reference/configuration/hive.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ Hive собирает с каждого узла [метрики потребл
160160

161161
## Опции распределения каналов между группами хранения {#storage}
162162

163-
Здесь перечислены опции, связанные с распределением [каналов](../../concepts/glossary.md#channel) таблеток по [группам хранения](../../concepts/glossary.md#storage-group): с учётом различных метрик, с выбором групп, с процессом автобалансировки каналов по группам.
163+
Здесь перечислены опции, связанные с [распределением](../../contributor/hive-storage.md) [каналов](../../concepts/glossary.md#channel) таблеток по [группам хранения](../../concepts/glossary.md#storage-group): с учётом различных метрик, с выбором групп, с процессом автобалансировки каналов по группам.
164164

165165

166166
{% note info %}

0 commit comments

Comments
 (0)