Top.Mail.Ru
Tdg » 1.6 » 2. Руководство по эксплуатации » 2.5. Роли
 

2.5. Роли

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 нет

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

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

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

  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 выше).