2.5. Роли | Tdg

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

нет

Все роли являются реплицируемыми (репликасет (набор реплик) с ролью может содержать более одной реплики).

На одном экземпляре можно назначить одну или несколько ролей.

Учитывая вышесказанное, можно дать следующие рекомендации по организации кластера и назначению ролей на экземплярах кластера:

  1. Роли connector, input_processor, task_runner и output_processor задействованы в обработке объектов. Их нужно горизонтально масштабировать пропорционально входящей нагрузке и утилизации CPU на серверах.

  2. Если вы назначаете на экземпляр роль connector или input_processor, обычно рекомендуется назначить на этот же экземпляр и вторую роль из данной пары. Исключение может быть в случае, когда первоначальная обработка объекта на роли connector является трудозатратной операцией и имеет смысл масштабировать эту роль отдельно.

  3. Роль storage (хранит состояние, не singleton): создание репликасета с нодами в разных дата-центрах. Количество репликасетов (горизонтальное масштабирование) — пропорционально объему данных, хранимых в RAM.

    Важно

    Если экземпляру назначена роль storage, то после этого исключить (expel) из кластера этот экземпляр будет нельзя.

  4. Роли logger, notifier, scheduler (хранят состояние, singleton): обычно достаточно репликасета с 2 репликами, разнесенными по разным дата-центрам.

  5. Роль output_processor не хранит состояние напрямую. Функционально роль реплицирует объекты во внешние системы, но для хранения объектов, предназначенных для репликации, а также объектов, чья репликация завершилась с ошибкой, используется роль storage. Поэтому логика горизонтального масштабирования роли output_processor аналогична логике для ролей, используемых для обработки объектов (см. п.1 выше).

Found what you were looking for?
Feedback