2.5. Роли | Tdg
Tarantool
Check out the new release policy

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