Co jsou a jak fungují sdílené instance v rámci ArcGIS Enterprise?

Dne
21
.
9
.
2020

Častou výzvou pro administrátory ArcGIS Serveru je určení optimálního poměru mezi počtem služeb, které lze provozovat v rámci ArcGIS Server site, a dostupnými hardwarovými zdroji jednotlivých serverů.

Petr ČejkaPetr Čejka

V případě, kdy se nepodaří tento poměr optimálně nastavit, může docházet při zátěži ArcGIS Serveru k vyčerpání veškerých zdrojů serveru, které vede k pomalé odezvě služeb a v některých případech i k nedoručení odpovědi serveru ke klientovi (např. překročením tzv. wait time out, časového limitu služby).

V dnešním článku se zaměříme na otázku, jak optimálně řešit využívání operační paměti RAM serveru, a to za pomoci konceptu sdílených instancí, které jsou novinkou od verze ArcGIS Serveru 10.7. Tento koncept využívá předpokladu, že všechny služby v rámci ArcGIS Server site nejsou vytěžovány rovnoměrně, a tudíž u služeb, které jsou málo využívané, můžeme pomocí této funkcionality šetřit RAM.  

Jak fungují instance služby?

ArcGIS Server vykonává veškeré požadavky jdoucí na jednotlivé služby pomocí aktivních instancí služby. Instance služby je reprezentována na úrovni operačního systému pomocí procesu ArcSOC. Pokud si tedy představíme situaci, kdy klientská aplikace provádí dotaz na nějakou službu v rámci ArcGIS Server site (např. vykreslení mapy), je tento dotaz předán konkrétnímu ArcGIS Serveru v rámci ArcGIS Server site, který jej zpracuje v rámci procesu ArcSOC a následně klientovi odešle odpověď.

Žádosti (zobrazené jako otazníky) přicházejí od klientů. Jakmile proces ArcSOC (ponožka) dokončí požadavek, vrátí odpověď (zaškrtnutí).

Instance služeb reprezentované procesy ArcSOC jsou navrženy tak, aby byly rychlé a co možná nejvíce výkonné. Nicméně každý proces dokáže v daný časový okamžik obsloužit právě jeden požadavek. To může představovat problém ve chvíli, kdy na službu bude zasláno více souběžných požadavků – proces zpracovává jeden požadavek a další požadavek je zařazen do fronty a čeká na vyřízení. Tento jev se u uživatele služby projeví jako degradace výkonu služby např. tím, že se mapa v aplikaci přibližuje pomalu.

Z tohoto důvodu počet instancí služeb (procesy ArcSOC) nekoresponduje s celkovým počtem služeb publikovaných v rámci ArcGIS Server site. Každá služba totiž umožňuje v rámci svého nastavení (service pooling) specifikovat minimální a maximální počet instancí služby. ArcGIS Server následně může v závislosti na aktuálním provozu zvýšit nebo snížit počet aktivních procesů ArcSOC, který byl v rámci poolingu služby nastaven. Výchozí nastavení poolingu pro mapové služby je minimálně jedna a maximálně dvě instance služby. Pokud ponecháme toto nastavení pro naše dvě ukázkové služby, v okamžiku, kdy první služba přijme dva souběžné požadavky, bude vytvořen druhý proces ArcSOC.

Hledání rovnováhy

Jak jsme si už vysvětlili výše, víme, že každá služba je na úrovni operačního systému reprezentována určitým počtem procesů ArcSOC, které se mohou v závislosti na zatížení ArcGIS Serveru měnit. Je vcelku zřejmé, že každý proces zabere část hardwarových zdrojů daného serveru. V případě paměti RAM můžeme odhadovat, že jeden ArcSOC proces zabere v průměru mezi 100–200 MB operační paměti. To nemusí působit problémy v rámci ArcGIS Sever site, která obsahuje jen malý počet služeb, nicméně pokud se budeme bavit o nasazení, které zahrnuje desítky nebo stovky služeb, musíme již počítat s tím, že dostupná velikost RAM nám nemusí při zatížení ArcGIS Serveru stačit.

Nyní přichází na řadu otázka, jak nastavit pooling jednotlivých služeb. Požadujeme, aby nedošlo k vyčerpání veškeré RAM serveru, ale zároveň nechceme omezovat počet aktivních instancí služby, abychom neomezili výkon ArcGIS Serveru. Nicméně víme, že v rámci naší site existují i služby, které nejsou často využívány, a tak nadměrné množství instancí těchto služeb zbytečně zabírá potřebnou RAM.

Pojďme si situaci zjednodušit a představme si model, kdy máme v ArcGIS Server site dvě mapové služby. Na základě dostupné RAM serveru jsme určili, že v rámci naší site nám může souběžně běžet maximálně šest procesů ArcSOC. Jak je vidět z obrázku níže, první mapová služba je pod velkou zátěží, kdy vyřizuje několik souběžně příchozích dotazů, zatímco druhá mapová služba nevyřizuje žádné požadavky. Ideálně by se nám tedy hodilo, aby RAM, která je využívána procesem ArcSOC druhé mapové služby, byla relokována první mapové službě, a my jsme tak mohli zvýšit výkon první služby přidáním další instance.

Řešení pro ArcGIS Enterprise do verze 10.7

Před verzí ArcGIS Serveru 10.7 existovalo pouze jedno řešení výše uvedené situace, a to nastavením minimálního počtu instancí druhé mapové služby na hodnotu 0. Toto nastavení způsobí, že druhá mapová služba nevytvoří žádný proces ArcSOC do doby, než je na ní zaslán první dotaz. V případě, že je na službu zaslán dotaz, se nastartuje proces, který tento požadavek obslouží. Nevýhodou tohoto přístupu je ovšem zpoždění pro prvního uživatele, který na tuto službu zašle první požadavek. Instance služby se před obsloužením požadavku potřebuje nejprve inicializovat, a to zabere nějaký čas –  tzv. „cold start problem“.

Cold start.

Následující dotazy po inicializaci instance služby jsou již vyřízeny ve standardním čase. Pokud se instance služby nepoužívá po dobu delší, než je nastavení IDLE time out časového limitu služby (výchozí hodnota pro mapovou službu je 30 minut), je tato instance ukončena. I zde můžeme vidět, že pokud by byl teoreticky jen jeden dotaz na službu, bude nám právě vytvořená instance zbytečně zabírat RAM paměť po dobu 30 minut. V případě většího počtu takto nastavených služeb by opět mohl v některých případech nastat problém s nedostatkem RAM.

Řešení pro ArcGIS Enterprise od verze 10.7

Od verze ArcGIS Serveru 10.7 a výše přibyla nová možnost pro nastavení poolingu služby. Doposud jsme se bavili o dedikovaném fondu instancí (dedicated instance pool). Nově můžeme u mapových služeb, které publikujeme z aplikace ArcGIS Pro nastavit sdílený fond instancí (shared instance pool). Ve výchozím nastavení obsahuje tento sdílený fond čtyři procesy ArcSOC. Mapová služba následně může využívat jeden nebo více procesů z tohoto sdíleného fondu instancí. Jakmile je požadavek na mapovou službu vyřízen, je příslušný proces uvolněn a je možné jej používat jinou mapovou službou, která má rovněž nastavený sdílený fond instancí.

Nastavení typu instance můžeme nadefinovat v aplikaci ArcGIS Pro před publikací mapové služby, anebo následně po publikaci služby z aplikace ArcGIS Server Manager.

Samozřejmě je možné v případě potřeby navýšit počet procesů ArcSOC v rámci sdíleného fondu instancí z výchozí hodnoty 4 na námi preferovaný počet. Toto nastavení můžeme provést z aplikace ArcGIS Server manager. Na rozdíl od dedikovaných instancí nemůžeme u fondu sdílených instancí nastavovat minimální a maximální počet instancí, ale tento počet je fixní.

Pro využívání sdílených instancí musí služby splňovat několik podmínek. Pokud tyto podmínky nebudou splněny, nelze u této služby tento typ instancí používat:

  • Nastavení sdílených instancí je možné použít pouze u mapových služeb publikovaných z aplikace ArcGIS Pro.
  • Lze povolit pouze určité funkce mapové služby (map service capabilities) – feature access (feature service), WFS, WMS a KML. Na kartě Capabilities v ArcGIS Server Manager můžete vypnout všechny nekompatibilní funkce.
  • Služby publikované z aplikace ArcMap nemohou využívat fond sdílených instancí.
  • Cache mapové služby publikované z aplikace ArcGIS Pro a splňující výše uvedené podmínky mohou využívat fond sdílených instancí.

Jak sdílené instance pomohou pro efektivní správu RAM paměti serveru?

Sdílené instance obecně řeší problém málo používaných služeb, které zbytečně spotřebovávají prostředky operační paměti RAM na serveru, aniž by první uživatel dotazující se na tuto službu zaznamenal počáteční zpomalení způsobené „studeným startem“. Pomocí sdílených instancí optimalizujeme využívání RAM a umožňujeme tak uvolnit prostředky operační paměti pro služby, které jsou pod stálou zátěží. Obecně můžeme říci, že se tento koncept hodí pro následující typ služeb:

  • Služby, u kterých je nastaven dedikovaný pooling na minimální počet instancí 0.
  • Služby, které jsou nepravidelně používány. Tento faktor se liší v rámci každého nasazení, ale obecně se dá říci, že nepravidelně dotazovaná služba obdrží v průměru méně než 1 dotaz za minutu.
  • Na většinu cache mapových služeb.

Naopak dedikované instance jsou vhodné ponechat u služeb, které jsou pod stálou zátěží a je potřeba dosáhnout požadovaného výkonu. Níže můžeme porovnat nastavení dedikovaného a sdíleného poolingu v rámci stejných ArcGIS Server site.

Dedicated instance pool

Shared instance pool

Mohlo by vás zajímat

Tipy pro práci

Správa kreditů na ArcGIS Online

Kredity na ArcGIS Online umožňují používat některé z náročnějších funkcí, jako je prostorová analýza, geokóding nebo obohacení dat. Správce organizace může uživatelům nastavit limity pro jejich využívání.
Tipy pro práci

Tvorba vlastního adaptéru pro vstup do ArcGIS GeoEvent Serveru

ArcGIS GeoEvent Server umožňuje zpracovávat datové proudy v reálném čase a zpřístupňovat je pro ostatní součásti systému ArcGIS. Tento technicky podrobný článek se zabývá tvorbou vlastního modulu pro příjem datového proudu.
Tipy pro práci

Webhooky aneb automatizace s aplikacemi do terénu

Webhooky jsou široce rozšířená technologie komunikace mezi jinak nezávislými aplikacemi. Esri proto začlenila webhooky i do svých aplikací Survey123 a QuickCapture, které díky tomu získaly schopnost komunikace například s Office 365.

ARCDATA PRAHA

Víte, že většina dat má nějaký prostorový kontext?
Zboží i zákazníci se někde nacházejí a někam putují; všechny události se někde odehrávají.
V této složce dat je ukryt obrovský potenciál.
Pojďte ho objevit s námi a nechte se inspirovat, jak může GIS pomoci i vám.

Esri logo