Пакетный перевод сервисов ArcGIS Server в общий пул экземпляров с помощью Python

Начиная с версии ArcGIS Server 10.7 в арсенале администратора появился дополнительный инструмент оптимизации ресурсов компьютера (ЦПУ и ОЗУ) – это общий пул экземпляров для определенного типа картографических сервисов.

Общие экземпляры рекомендуется использовать для сервисов, получающих редкие запросы, и особенно в том случае если на сервере опубликовано много такого типа сервисов. С другой стороны, выделенные экземпляры идеально подходят для сервисов, получающих постоянные или интенсивные запросы.

Экземпляры сервисов работают на базе собственных серверных процессов Esri, называемых процессами ArcSOC. Хотя ArcSOC на английском созвучно с носком, но в ArcGIS Server носков нет 🙂 Каждый процесс ArcSOC потребляет для работы некоторое количество памяти компьютера. Если на сайте ArcGIS Server имеется много сервисов, и каждый из них использует один или несколько постоянно работающих экземпляров сервисов, то в конечном итоге доступная память компьютера может закончиться.

Конечно, для каждого сервиса можно задать минимальное число экземпляров равным нулю для случая когда он не используется. Тогда мы экономим память, но в следующий раз, когда пользователь обращается к сервису, он будет ждать дольше (отложенный ответ) из-за холодного старта экземпляра ArcSOC.

Как раз в этом случае можно использовать общий пул экземпляров, который всегда работает. Практически любой картографический сервис, опубликованный из ArcGIS Pro может быть настроен для использования общего пула экземпляров. Детали настройки параметров экземпляра сервиса и существующие ограничения доступны в справке

А как же быть с уже опубликованными сервисами? Есть хорошая новость. Чтобы не тратить время на внесение изменений в свойства многочисленных сервисов в ручную через ArcGIS Server Manager  можно воспользоваться готовым скриптом на Python.

Этот скрипт делает две вещи. Во-первых, он проверяет все сервисы сайта ArcGIS Server на возможность их перевода на использование общего пула экземпляров и выводит список сервисов, сгруппированных в три категории:

  1. Сервисы, опубликованные с помощью ArcMap, которые не поддерживают использование общего пула экземпляров;
  2. Сервисы, опубликованные из ArcGIS Pro, которые могут поддерживать использование общего пула экземпляров;
  3. Сервисы, опубликованные из ArcGIS Pro, уже использующие общий пул экземпляров.

Во-вторых, вы можете дополнительно указать скрипту пакетно попробовать поменять тип пула всех сервисов второй категории с выделенных экземпляров на общий пул экземпляров.

В качестве отправной точки хорошо ознакомиться с рекомендациями Esri по размеру общего пула экземпляров.

  • Как правило, отправной точкой для сайта, где большинство или все сервисы используют общий пул экземпляров, является установка размера пула общих экземпляров в два раза больше числа ядер, имеющихся на компьютере. Это означает, что если у вас 8-ядерная машина, то Esri рекомендует установить общий пул равный 16 экземплярам на машину.
  • Если вы работаете в виртуальной или облачной среде, важно различать физические эквиваленты ядер и виртуальные ядра при выполнении этих расчетов. Например, экземпляр EC2 в Amazon Web Services может иметь 8 виртуальных ЦПУ, что эквивалентно 4 физическим ядрам. Для такой машины имеет смысл начать со значения 8 экземпляров в общем пуле экземпляров.
  • Для сайтов ArcGIS Server, где есть сервисы использующие выделенные экземпляры, так и сервисы использующие общий пул экземпляров, размер общего пула экземпляров можно установить равным числу физических ядер – в наших примерах это 8 экземпляров для машины с 8 физическими ядрами и 4 экземпляра для виртуальной машины с 8 виртуальными ядрами.

Скрипт для пакетного перевода сервисов ArcGIS Server в общий пул экземпляров, размещен на странице GitHub

Для запуска скрипта необходима среда Python 3 с установленным ArcGIS API for Python. Так случилось, что среда Python, которая поставляется с ArcGIS Pro, прекрасно подходит для этого.

Чтобы запустить скрипт, загрузите его или скопируйте в новый файл и сохраните. Затем запустите его из командной строки, используя следующую команду:

python sharedinstances.py --server [Your ArcGIS Server site URL] --user [Your administrator username] --password [Your account password] --update

Например:
c:\Progra~1\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\python.exe C:\work\\sharedinstances\sharedinstances.py --server https://enterprise.domain.com/portal --user administrator --password xxxxxxx

Если при запуске скрипта вы используете необязательный параметр —update, то скрипт попытается поменять тип экземпляра с выделенного на общий для всех сервисов, опубликованных из ArcGIS Pro, которые ещё не используют общий пула экземпляров. Без этой опции скрипт только выведет список сервисов, сгруппированный в три категории, ничего не меняя.

Детали, как запустить отдельный скрипт из командной строки подробно описаны в справке ArcGIS Pro http://bit.ly/2vfXLm2