2.5. Роли¶
Функции инстансов (экземпляров TDG) в кластере распределяются на основе ролей. Кластерные роли – это 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
;frontend
– для загрузки статического расширения пользовательского интерфейса;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 |
frontend | vshard-router |
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 | да |
frontend | stateless | нет |
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 выше).