Изменение конфигурации актор-системы
Важно
Данная статья описывает работу с кластерами YDB, использующими конфигурацию V1. Конфигурация V1 является основным способом конфигурирования кластеров под управлением YDB версии ниже v25.1. Начиная с версии v25.1, YDB поддерживает конфигурацию V2, которая является рекомендуемым способом конфигурирования для кластеров YDB версии v25.1 и выше. Для кластеров, использующих конфигурацию V2, данная инструкция не применима.
Если ваш кластер уже обновлён до версии v25.1 или выше, но ещё использует конфигурацию V1, рекомендуется запланировать миграцию на конфигурацию V2, так как поддержка конфигурации V1 будет прекращена в будущих версиях YDB.
Актор-система — основа YDB, каждый компонент системы представляется одним или несколькими акторами.
Каждый актор распределен в определенный ExecutorPool, соответствующий задаче актора.
Изменение конфигурации поможет более точно распределить количество зарезервированных ядер для каждого типа задач.
Описание конфига актор-системы
Конфиг актор-системы состоит из перечисления ExecutorPool'ов, сопоставления ExecutorPool с видами задач и конфигураций шедулера актор-системы.
На данный момент есть следующие типы задач и соответствующие им пулы:
- System - предназначен для выполнения быстрых внутренних операций YDB;
- User - включает в себя всю пользовательскую нагрузку по обработке и выполнению входящих запросов;
- Batch - задачи, которые не имеют строгого лимита на время выполнения, в основном выполнение фоновых операций;
- IO - отвечает за выполнение всех задач с блокирующими операциями (как пример запись логов в файл);
- IC - Interconnect, включает всю нагрузку связанную с коммуникацией между узлами.
Каждый пул описывается полем Executor, как в примере ниже.
Executor {
Type: BASIC
Threads: 9
SpinThreshold: 1
Name: "System"
}
Описание основных полей:
- Type - на данный момент может иметь два типа: BASIC и IO. Все пулы, кроме IO, имеют тип BASIC;
- Threads - количество потоков (количество параллельно работающих акторов) в данном пуле;
- SpinThreshold - количество тактов процессора перед уходом в сон при отсутствии задач, которое будет исполнять поток, выполняющий работу акторов (влияет на потребление cpu и latency запросов во время слабой нагрузки);
- Name - название пула, которое будет отображаться у узла в мониторинге.
Сопоставление пулов с типами задач происходит заданием порядкового номера пула в специальные поля. Пулы нумеруются с нуля, также на один пул может повесить несколько типов задач.
Список полей с их задачами:
- SysExecutor - System
- UserExecutor - User
- BatchExecutor - Batch
- IoExecutor - IO
Пример:
SysExecutor: 0
UserExecutor: 1
BatchExecutor: 2
IoExecutor: 3
IC пул задается другим способом, через ServiceExecutor, как в примере ниже.
ServiceExecutor {
ServiceName: "Interconnect"
ExecutorId: 4
}
Шедулер актор-системы отвечает за доставку отложенных сообщений между акторами и задается следующими параметрами:
- Resolution - минимальный шаг смещения времени в микросекундах;
- SpinThreshold - аналогично с параметром пула, количество тактов процессора перед уходом в сон при отсутствии сообщений;
- ProgressThreshold - максимальный шаг смещения времени в микросекундах.
В случае если по неизвестным причинам поток шедулера залип, то он будет отправлять сообщения по отстающему времени, смещая его каждый раз на ProgressThreshold.
Не рекомендуется менять конфиг шедулера. В конфигах пулов рекомендуется менять только количество потоков.
Пример конфига актор-системы по умолчанию:
Executor {
Type: BASIC
Threads: 9
SpinThreshold: 1
Name: "System"
}
Executor {
Type: BASIC
Threads: 16
SpinThreshold: 1
Name: "User"
}
Executor {
Type: BASIC
Threads: 7
SpinThreshold: 1
Name: "Batch"
}
Executor {
Type: IO
Threads: 1
Name: "IO"
}
Executor {
Type: BASIC
Threads: 3
SpinThreshold: 10
Name: "IC"
TimePerMailboxMicroSecs: 100
}
SysExecutor: 0
UserExecutor: 1
IoExecutor: 3
BatchExecutor: 2
ServiceExecutor {
ServiceName: "Interconnect"
ExecutorId: 4
}
На статических узлах
Статические узлы берут конфигурацию актор-системы из файла /opt/ydb/cfg/config.yaml
.
После замены конфигурации требуется перезапустить узел.
На динамических узлах
Динамические узлы берут конфигурацию из CMS, чтобы изменить ее, можно воспользоваться следующей командой:
ConfigureRequest {
Actions {
AddConfigItem {
ConfigItem {
// UsageScope: { ... }
Config {
ActorSystemConfig {
<конфиг актор-системы>
}
}
MergeStrategy: 3
}
}
}
}
```bash
ydbd -s <endpoint> admin console execute --domain=<domain> --retry=10 actorsystem.txt