Масштабирование задач#

В кластерном режиме работы IDMX для обработки задач и запросов используется несколько контейнеров (pod) idmx-engine. При этом, распределение нагрузки между контейнерами для большинства операций производится IDMX автоматически.

Однако для того, чтобы внутри кластера также распределялись обрабатываемые задачи (tasks), необходима дополнительная настройка IDMX и самих задач.

Настройка задач для автоматического масштабирования#

Чтобы механизм автоматического масштабирования брал в работу задачи, необходимо дополнить конфигурации этих задач. Для этого:

  1. Откройте xml-файл конфигурации задачи на редактирование.

  2. В код задачи перед началом блока <activity> вставьте следующий блок:

    <autoScaling>
         <mode>default</mode> //Блок задает режим работы механизма автоматического масштабирования
    </autoScaling>
    
  3. В код задачи в блок <distribution> вставьте следующий блок:

    <autoScaling>
         <enabled>true</enabled> //Блок выставляет флаг, что данную задачу следует масштабировать при работе механизма автоматического масштабирования
    </autoScaling>
    
  4. Сохраните изменения.

  5. Импортируйте задачу в IDMX. Инструкции по ручному импорту расположены в разделе Импорт конфигурационных файлов.

Выполните данные действия для всех задач, которые необходимо масштабировать в кластерном режиме работы.

Пример конфигурационного файла задачи для импорта данных из ресурса с включенным масштабированием:

<?xml version="1.0" encoding="UTF-8"?>
<task xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
oid="10000000-0000-0000-0000-010000000025">
<name>Import Parallel 10 buckets</name>
<description>
Unloading users from resource in 10 threads.
</description>

    <assignment>
        <!-- Import task archetype -->
        <targetRef oid="00000000-0000-0000-0000-000000000503" type="ArchetypeType"/>
    </assignment>
    <ownerRef oid="00000000-0000-0000-0000-000000000002"/>
    <executionState>waiting</executionState>

    <schedule>
        <recurrence>single</recurrence>
    </schedule>
    <autoScaling>
        <mode>default</mode>
    </autoScaling>
    <activity>
        <work>
            <import>
                <resourceObjects>
                    <resourceRef oid="10000000-0000-0000-0000-100000000200"/>
                    <kind>account</kind>
                </resourceObjects>
            </import>
        </work>
        <distribution>
            <buckets>
                <stringSegmentation>
                    <discriminator>attributes/employee_number</discriminator>
                    <boundary>
                        <position>1</position>
                        <characters>1-9</characters>
                    </boundary>
                </stringSegmentation>
            </buckets>
            <workers>
                <workersPerNode>
                    <count>2</count>
                </workersPerNode>
            </workers>
            <workerThreads>2</workerThreads>
            <autoScaling>
                <enabled>true</enabled>
            </autoScaling>
        </distribution>
    </activity>
</task>

Настройка IDMX для работы механизма автоматического масштабирования#

Как и в случае с другими действиями по автоматизации обработки операций, для того, чтобы механизм автоматического масштабирования распределял запросы и задачи из очереди на контейнеры IDMX, необходимо создать и импортировать задачу, которая будет регулярно инициировать запуск механизма автоматического масштабирования. Для этого:

  1. В любом подходящем редакторе или IDE создайте xml-файл с названием, например, task-autoscaling.xml.

  2. Заполните файл следующим кодом:

    <task xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3">
     <name>Auto-scaling</name> //Имя задачи в интерфейсе IDMX
     <ownerRef oid="00000000-0000-0000-0000-000000000002" type="UserType"/> //Владелец задачи, по умолчанию — суперадминистратор, если изменяете — замените на oid польхователя с ролью Администратор-эксперт
     <executionState>runnable</executionState> //Параметр, указывающий, что задачу можно запускать
     <schedule> //Блок расписания, определяющий регулярность автоматического запуска задачи
         <interval>60</interval> //Время в секундах, по истечении которого задача будет запускаться снова
     </schedule>
     <autoScaling> //Блок автомасштабирования
         <mode>disabled</mode> //Отключаем автомасштабирование для данной задачи, так как дополнительные экземляры задачи будут лишь потреблять лишние ресурсы
     </autoScaling>
     <activity> //Блок действий, выполняемых задачей
         <work>
             <activityAutoScaling/> //Запускаем механизм автомасштабирования
         </work>
     </activity>
    </task>
    
  3. Сохраните изменения.

  4. Импортируйте задачу в IDMX и запустите ее.