2.5. Роли¶
Функции экземпляров TDG (инстансов, instances) в кластере распределяются на основе ролей. Кластерные роли — это Lua-модули, которые реализуют специфическую для экземпляра логику.
Существуют 2 вида ролей: встроенные и настраиваемые.
Встроенные роли vshard-router
и vshard-storage
, а также логика
их работы уже
определены в Tarantool Cartridge,
на базе которого построен TDG, и не требуют дополнительной
конфигурации.
Встроенная роль failover-coordinator
и логика её работы также
определены в Tarantool Cartridge.
Следующие встроенные роли выполняют сугубо технические задачи и потому не отображаются в интерфейсе пользователя:
tracing
— скрытая роль, нужна для мониторинга производительности модулей системы;account_provider
— скрытая роль для кэширования обращений кaccount_manager
. Включена на всех экземплярах;maintenance
— скрытая роль, необходимая для выполнения технических работ для поддержания работы кластера. Включена на всех экземплярах;watchdog
— скрытая роль для предотвращения зависания экземпляра. Включена на всех экземплярах.
По усмотрению администратора экземплярам назначаются настраиваемые роли, которые можно дополнительно сконфигурировать.
В TDG реализованы следующие настраиваемые роли:
connector
— для приема запросов на обработку по сети;input_processor
— для обработки запросов;storage
— для хранения данных (обработанных объектов);account_manager
— для обеспечения работы ролевой модели доступа;logger
— для сбора логов (со всех экземпляров кластера);notifier
— для отправки уведомлений о событиях в ремонтной очереди (вкладкаRepair
);output_processor
— для преобразования объектов в формат сторонней системы и отправки в эту систему;task-runner
— для выполнения задач;scheduler
— для старта задач (по расписанию или вручную) на экземпляре с рольюtask-runner
;sequence_generator
— для выдачи диапазонов уникальных номеров для последовательностей, используемых экземплярами.
Некоторые из настраиваемых ролей требуют включения встроенных ролей. Встроенные роли не нужно включать на экземплярах специально, они назначаются автоматически при включении соответствующих настраиваемых ролей.
Настраиваемая роль |
Автоматически назначаемые роли |
---|---|
connector |
vshard-router, tracing |
input_processor |
vshard-router, tracing |
storage |
vshard-router, vshard-storage, tracing |
logger |
vshard-router |
notifier |
vshard-router, tracing |
output_processor |
vshard-router, tracing |
scheduler |
vshard-router, tracing |
task_runner |
vshard-router, tracing |
2.5.1. Рекомендации по назначению ролей на экземплярах¶
Хотя в TDG нет понятия «обязательная роль», имеет смысл говорить о
минимально необходимом наборе ролей — connector
, input_processor
и storage
.
Этот минимальный набор обеспечивает основные функции системы — получение объекта,
его обработку и хранение в TDG. Остальные роли назначаются по
необходимости, в зависимости от решаемых бизнес-задач.
Роли имеют ряд характеристик, в зависимости от которых их можно делить на различные группы:
по концепции хранения состояния: не хранят состояние (stateless) / хранят состояние (stateful);
по количеству экземпляров в кластере: одиночные (singleton) / произвольное количество экземпляров.
Роль |
Stateless / Stateful |
Singleton |
---|---|---|
connector |
stateless |
нет |
input_processor |
stateless |
нет |
storage |
stateful |
нет |
logger |
stateful |
да |
notifier |
stateful |
да |
output_processor |
stateless |
нет |
scheduler |
stateful |
да |
task_runner |
stateless |
нет |
account_manager |
stateful |
да |
sequence_generator |
stateful |
да |
failover-coordinator |
stateless |
нет |
Все роли являются реплицируемыми (репликасет (набор реплик) с ролью может содержать более одной реплики).
На одном экземпляре можно назначить одну или несколько ролей.
Учитывая вышесказанное, можно дать следующие рекомендации по организации кластера и назначению ролей на экземплярах кластера:
Роли
connector
,input_processor
,task_runner
иoutput_processor
задействованы в обработке объектов. Их нужно горизонтально масштабировать пропорционально входящей нагрузке и утилизации CPU на серверах.Если вы назначаете на экземпляр роль
connector
илиinput_processor
, обычно рекомендуется назначить на этот же экземпляр и вторую роль из данной пары. Исключение может быть в случае, когда первоначальная обработка объекта на ролиconnector
является трудозатратной операцией и имеет смысл масштабировать эту роль отдельно.Роль
storage
(хранит состояние, не singleton): создание репликасета с нодами в разных дата-центрах. Количество репликасетов (горизонтальное масштабирование) — пропорционально объему данных, хранимых в RAM.Важно
Если экземпляру назначена роль
storage
, то после этого исключить (expel) из кластера этот экземпляр будет нельзя.Роли
logger
,notifier
,scheduler
(хранят состояние, singleton): обычно достаточно репликасета с 2 репликами, разнесенными по разным дата-центрам.Роль
output_processor
не хранит состояние напрямую. Функционально роль реплицирует объекты во внешние системы, но для хранения объектов, предназначенных для репликации, а также объектов, чья репликация завершилась с ошибкой, используется рольstorage
. Поэтому логика горизонтального масштабирования ролиoutput_processor
аналогична логике для ролей, используемых для обработки объектов (см. п.1 выше).