Оптимизация нагрузки от ГИС-сервера

Постоянная задача для многих администраторов ArcGIS Server заключается в том, чтобы оптимально использовать доступные ресурсы компьютера для нормальной работы ГИС сервисов. Когда на ArcGIS Server публикуется множество сервисов, независимо от того, используются ли они или простаивают —  нагрузка на серверную машину может расти и расти.

В то же время, сервисы ArcGIS Server, вероятно не все одинаково нагружены запросами пользователей — некоторые сервисы постоянно работают, в то время как другие не используются в течение длительного времени.

В версии ArcGIS Enterprise 10.7,  в ArcGIS Server представлено новое решение проблемы нагрузки на систему — это называется  пул общих экземпляров или (shared instances). Разработчики уверены, что это важное преимущество для администраторов и пользователей ArcGIS Server, и планируют расширить область применения этой возможности в будущих новых версиях ArcGIS.

Что же такое экземпляр/инстанс (instance) или ArcSOC, который можно увидеть в диспетчере задач, на машине, где установлен ArcGIS Server?!

Звучание SOC созвучно с носком в английском языке, поэтому разработчики решили визуально изобразить ArcSOC или экземпляр как носок.

ArcGIS Server выполняет всю свою работу за счет использования активных экземпляров сервисов. Экземпляр — испольняемая на компьютере программа, который называется ArcSOC.exe. Когда клиентское приложение (веб-карта, веб-приложение, мобильное приложение и т.д.) отправляет запрос к любому сервису, работающему на ArcGIS Server, например, для отображения карты, геокодирования набора данных или запуска задания геообработки, этот запрос передается процессу ArcSOC. Процесс выполняет запрос и возвращает результат.

Запросы, показанные на рисунке как вопросительные знаки, поступают от клиентов. Когда процесс ArcSOC завершил запрос, он возвращает ответ.

ArcSOCs разработаны так, чтобы быть быстрыми, мощными и универсальными. Пользователи не должны их замечать — мы просто ждём, что при перемещении по карте или поиске адреса система незамедлительно ответит нам.

Но каждый процесс ArcSOC может обрабатывать только один запрос за раз. Это создает проблему, когда сервис получает несколько одновременных запросов: если процесс ArcSOC обрабатывает один запрос, а затем назначается другой, второй запрос должен дождаться своей очереди. Это проявляется для пользователя в ожидании своего результата — зависание задания геообработки или медленно-масштабируемая карта.

Каждый сервис имеет свой собственный пул экземпляров с определенным минимальным  и максимальным количеством экземпляров (параметр может быть настроен индивидуально для каждого сервиса в ArcGIS Server Manager). Сайт ArcGIS Server будет масштабировать количество активных процессов ArcSOC вверх или вниз в пределах заданного диапазона в зависимости от количества запросов от пользователей. Диапазон по умолчанию для картографических сервисов составляет минимум один и максимум два экземпляра. Если использовать настройку экземпляров по умолчанию, как для двух сервисов, показанных на рисунке ниже, и первый сервис получит два одновременных запроса, то для этого сервиса будет запущен второй процесс ArcSOC.

Очень важно понимать причину, по которой ArcGIS Server не предлагает бесконечное число экземпляров сервисов для обработки: каждый экземпляр «съедает» измеримую часть вычислительных ресурсов на сервере. В частности экземпляр занимает определенный объем памяти, часто порядка 100-200 МБ ОЗУ. Это может не представлять проблему, если опубликовано небольшое количество сервисов. Но когда опубликованы десятки или сотни сервисов, это начинает создавать проблему использования ресурсов сервера, особенно если многие из этих сервисов используются крайне редко, но продолжают «съедать» ресурсы машины.

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

С одной стороны, вы не хотите ограничивать количество активных экземпляров, чтобы не снижать производительность вашего ГИС-сервера. Но вы также не хотите нагружать систему из-за большого количества экземпляров, если многие из них не используются часто. Для пример у вас есть два сервиса и вы определили, чтот ArcGIS Server может задействовать только шесть процессов ArcSOC в любой момент времени, основываясь на его доступной памяти. Если первый сервис постоянно получает одновременные запросы, а второй совершенно не получает запросы, то логично вы захотите освободить память, используемую процессом ArcSOC второго сервиса, чтобы перераспределить ее на первый сервис.

До 10.7 перераспредление экземпляров решалось через установку минимального количество экземпляров  равным 0 для для второго сервиса, как показано ниже в ArcGIS Server Manager. Тем самым вы позволяете ArcGIS Server не запускать какие-либо ArcSOC для сервиса, если он не получал никаких запросов в течение некоторого времени. Время, которое должно пройти для  отключения экземпляра, не обрабатывающего какие-либо запросы , определяется свойством Idle Timeout, которое также можно указать в Manager. Это решение «Min=0» исключает использование ресурсов машины для сервисов, которые не используются.

Между тем нагруженные запросами сервисы могут продолжать работать с несколькими процессами ArcSOC. В этом вся прелесть наличия пулов экземпляров — каждый сервис может быть настроен так, чтобы предоставлять столько экземпляров, сколько необходимо для обработки своего трафика, не затрагивая пулы других сервисов.

Однако есть проблема с установкой минимального числа экземпляров = 0. ArcSOCs требуется некоторое время, чтобы «разогреться», когда они потребуются. Пользователь, который первым сделает запрос к сервису, для которого запущено ноль экземпляров, получит задержку в ответе. Это может означать, что для загрузки веб-карты потребуется не половина секунды, а 5 или 10 секунд в первый раз, что, безусловно, является неудобством, а иногда и неприемлемым препятствием. Мы называем это «проблемой холодного старта».

Также если сервис получил порцию запросов в один момент и дальше не используется, но процесс ArcSOC, который был включен для бработки, будет продолжать работать, занимая свою часть памяти машины — пока не  активируется свойство Idle Timeout. Даже если вы установите для половины своих сервисов значение «Min=0», количество простаивающих экземпляров, потребляющих память на вашем компьютере, может продолжать увеличиться, не говоря уже о проблеме «холодного запуска».

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

Новая опция для оптимизации экземпляров

В версии 10.7 ArcGIS Server теперь позволяет настроить  общий пул экземпляров, который по умолчанию содержит четыре процесса ArcSOC. После публикации картографического сервиса на вашем ArcGIS Server вы можете назначить его для использования через общий пул. У такого сервиса больше не будет собственного выделенного пула; вместо этого он будет погружаться в общий пул и использовать ArcSOC или два по мере необходимости. После завершения обработки запроса ArcSOC может свободно использоваться любым другим сервисом в общем пуле.

Эти шесть сервисов были настроены на использование общего пула экземпляров в ArcGIS Server Manager.

Эту возможность можно настроить в соответствии с вашими потребностями, используя ArcGIS Server Manager. Также можно изменить количество ArcSOC, работающих в общем пуле, в любое время. В отличие от минимального и максимального диапазона, который вы устанавливаете для выделенных пулов, общий пул запускает фиксированное количество экземпляров.

Чтобы назначить отдельный сервис для использования общего пула, откройте страницу редактирования сервиса в ArcGIS Server Manager. Перейдите на вкладку «Организация пула» и выберите «Сделайте этот сервис доступным, используя: Пул общего экземпляра». Нажмите  Сохранить и перезагрузить чтобы применить изменения.

Сервисы должны соответствовать определенным критериям для использования общего пула экземпляров или эта опция будет недоступна в ArcGIS Server Manager. В 10.7 применяются следующие критерии:

  • Только картографические сервисы, включая сервисы объектов, могут использовать общий пул.
  • Только определенные возможности картографических сервисов — WFS, WMS и KML могут быть включены.
  • Службы с пользовательскими расширениями объектов сервера (SOE) или перехватчиками объектов сервера (SOI) не могут использовать общие экземпляры.
  • Сервисы, опубликованные  через ArcMap, не могут использовать общие экземпляры. Необходима публикация из ArcGIS Pro
  • Кэшированные картографические сервисы, опубликованные через ArcGIS Pro, которые отвечают вышеуказанным требованиям, могут использовать общие экземпляры.

Совместно-используемые экземпляры предоставляют двойное решение: они решают проблему неиспользуемых сервисов, потребляющих ненужные ресурсы памяти на вашем сервисов, без предоставления «холодного запуска» пользователю, который делает первый запрос к неиспользуемому сервису; и вы сможете гарантировать высокую доступность своих сервисов, которые всегда являются наиболее нагруженными.

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

Все, что вам нужно знать об экземплярах сервисов и новом общем пуле, доступно в документации 10.7: Настройка параметров экземпляров сервисов . Там вы найдете больше рекомендаций по оптимизации экземпляров.

Мы надеемся, что этот пост помог лушче разобраться в значении ArcSOC, и позволил убедиться в одном из преимуществ обновления до версии 10.7!