Analýza škálovatelnosti podsítě
Co je Analýza škálovatelnosti podsítě?
Předtím, než budeme mluvit o analýze škálovatelnosti podsítě Utility Network, pojďme si zopakovat definice, co je podsíť a co je analýza škálovatelnosti:
Podsíť:
V utility network je podsíť rozdělení nebo topologická podmnožina dat v tieru, kde všechny zúčastněné prvky mají konektivitu ke stejným kontrolerům. Podsíť se často používá pro trasování k určení, zda je konektivita dostupná.
Analýza škálovatelnosti:
Analýza škálovatelnosti slouží k určení schopnosti nasazení Utility Network provádět více požadavků současně (např. updateSubnetwork a exportSubnetwork). Toto se obvykle dělá za účelem pochopení, zda lze splnit časově dominantní obchodní cíle. Například, může konkrétní nasazení exportovat 5 000 podsítí během 4 hodinového okna?
Odpověď na tuto otázku není známa, dokud není testována a ověřena.
Škálovatelnost nasazení je spojena s tím, kolik souběžnosti může probíhat najednou při zachování optimálního výkonu operací zájmu. Tento článek diskutuje, jak aplikovat souběžnost prostřednictvím testu (včetně v článku).
Poznámka: Pro více informací o podsíti viz: Životní cyklus podsítě v Utility Network
Náš cíl a úkol Utility Network
- Automatizovat úkoly aktualizace nebo exportu seznamu podsítí
- Zachytit čas výkonu
- Celkovo úkol
- Jednotlivé operace (např. čas na aktualizaci konkrétní podsítě)
- Řešení konfigurovatelné tak, aby splňovalo požadavky
- Časově citlivé
- Zdroje citlivé
Proč provádět analýzu update/export Subnetwork?
- Typický účel a časová omezení jsou obchodním požadavkem
- Cvičit dvě funkce na každou podsíť
- Aktualizace (updateSubnetwork)
- Běžně prováděno po volání jak editace, tak validace topologie sítě nebo po povolení topologie sítě
- Export (exportSubnetwork)
- Používá se k extrakci informací o podsíti do souboru, který pak může být použit externím systémem jako outage management
- Před exportem podsítě ze systému musí být aktuální (aktualizovaná)
Obě jsou důležité funkce utility network. Jako správce GIS nebo vývojář je důležité pochopit, jak tyto operace škálují. Primární analýzou je pochopení času zpracování seznamu podsítí.
Toto lze dále rozvinout zkoumáním řešení optimalizujících úkol pro čas nebo systémové zdroje. Tyto výzvy mají podobné přístupy k tomu, jak dosáhnout úkol aktualizace nebo exportu mnoha podsítí.
- Získat přehled o obchodních cílech
- Export podsítí může trvat více výpočetního času v závislosti na využitých možnostech
- Takové možnosti mohou být obchodním požadavkem
- Výkon a škálovatelnost mohou ovlivnit architekturu
- Z výsledků testů a zjištění
- Nastavení nasazení může být potřeba změnit, aby vyhovovalo obchodním potřebám
Jak provést analýzu škálovatelnosti podsítě?
Seznam podsítí
Prvním krokem je extrahovat seznam podsítí z datasetu Utility Network.
Toto lze provést různými způsoby:
- ArcGIS Pro
- ArcPy skript
- SQL select příkazy
Příklad SQL:
- Připojit se k geodatabázi Utility Network
- Najít ObjectId pro tabulku Subnetwork:
- Tento ObjectId je dynamický a může se lišit
- Typ GUID je konstantní
-- Najít ObjectId Utility Network pro tabulku Subnetwork
SELECT OBJECTID FROM sde.GDB_ITEMS WHERE type='{37672BD2-B9F3-48C1-89B5-8C43BBBB6D57}'- Pro naši příkladovou databázi to vrátilo 446
- Tato hodnota ObjectId bude použita v dalším dotazu
Exportovat seznam podsítí
-- Export seznamu Podsítí
SELECT
T1.SUBNETWORKCONTROLLERNAME, T1.SUBNETWORKNAME, T1.ISDIRTY,
T1.ISDELETED, T1.TIERNAME, T1.DOMAINNETWORKNAME, T1.GDB_FROM_DATE
FROM
elec.UN_446_SUBNETWORKS T1
INNER JOIN (SELECT SUBNETWORKNAME, MAX(GDB_FROM_DATE) AS MaxDate
FROM
elec.UN_446_SUBNETWORKS
GROUP BY SUBNETWORKNAME) T2
ON T1.SUBNETWORKNAME = T2.SUBNETWORKNAME
AND T1.GDB_FROM_DATE = T2.MaxDate- Uložit výstup do souboru (csv nebo tsv)
- Některé SUBNETWORKCONTROLLERNAME mohou obsahovat čárky (např. ",") a soubor s hodnotami oddělenými tabulátory by byl vhodnější než soubor s hodnotami oddělenými čárkami
Pro dataset Utility Network použitý v tomto článku vypadá výsledný seznam podsítí následovně, když jsou datové řádky odděleny tabulátory.

Poznámka: Předpokládá se, že aktuální stav sítě obsahuje čisté i špinavé podsítě. Jak se podsítě stávají špinavými je mimo rozsah tohoto článku.
Poznámka: Existuje několik obchodních faktorů, které mohou ovlivnit výběr pro získání podsítí. Tento dotaz vám pomůže začít.
Apache JMeter
Jak bylo zmíněno v jiných komunitních článcích, Apache JMeter je bezplatný nástroj pro testování. Je skvělý pro cvičení REST endpoint ArcGIS Enterprise k testování mnoha funkcí:
I když existuje mnoho nástrojů pro testování, JMeter bude použit k volání služby Utility Network v ArcGIS Enterprise pro provedení požadavků updateSubnetwork a exportSubnetwork.
Sada dat Utility Network -- Naperville Electric
Data Naperville Electric, jak jsou vidět z ArcGIS Pro:

Aktualizace Podsítě
Apache JMeter Pohled na souborový systém složky Test Plan
<\/span><\/P>Mimo JMeter je Test Plan jen soubor jmx, sám o sobě. Jak bylo zmíněno v jiných článcích Komunity, doporučuje se vytvořit nějakou složkovou strukturu projektu, na kterém pracujete. To může pomoci s řízením, zejména pokud máte mnoho různých testů dělajících různé věci. Ve složkách zobrazených výše může být seznam podsítí a výsledky testů uchovávány uvnitř adresáře UpdateSubnetwork, kde je méně pravděpodobné, že budou zaměněny s jinými daty z testovacích běhů.<\/P>Testovací plán Update Subnetwork<\/H2>Pro stažení Apache JMeter Test Plan použitého v tomto článku viz: UpdateSubnetwork1.zip<\/A><\/STRONG> <\/LI>Otevření Test Plan v Apache JMeter by mělo vypadat podobně jako následující:<\/SPAN>Upravte User Defined Variables tak, aby odpovídaly vašemu prostředí<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>
Klíčové komponenty Test Plan<\/H2>S rozbaleným UpdateSubnetwork Test Plan lze vidět následující prvky:<\/P>User Defined VariablesSeznam výše, používaný pro snadné přizpůsobení testu prostředí<\/LI><\/UL><\/LI>Aggregate ReportPoužívá se pro ladění testu a analýzu po testu<\/LI><\/UL><\/LI>Thread GroupDefinuje souběžnost vláken nebo škálovatelnost<\/STRONG><\/U> testu<\/LI>Doporučuje se používat výchozí hodnoty (např. 1 testovací vlákno) při vytváření testu<\/LI><\/UL><\/LI>GenerateTokenZískává token z ArcGIS EnterprisePoužívá dříve definované přihlašovací údaje<\/LI><\/UL>Drží ho během testu<\/LI><\/UL><\/LI>While Controller SyncPoužívá se, když obchodní logika vyžaduje, aby volání byla synchronní<\/STRONG><\/LI>Prochází seznam podsítí<\/LI><\/UL><\/LI>CSV Data Set ConfigPropojuje seznam podsítí s testemCSV nebo TSV textový datový soubor<\/LI><\/UL><\/LI><\/UL><\/LI>If ControllerLogická větev testu používající Groovy<\/LI>Následuje větev, pokud je podsíť špinavá (IsDirty=True nebo IsDirty=1)<\/LI><\/UL><\/LI>USN Request (${SUBNETWORKNAME})Testovací prvek, který vydává požadavek k provedení většiny práce<\/LI>Z datového zdroje je ${SUBNETWORKNAME} naplněn názvem podsítě<\/LI><\/UL><\/LI>While Controller AsyncPoužívá se, když obchodní logika vyžaduje, aby volání byla asynchronní<\/STRONG>Ideální pro velmi dlouho běžící updateSubnetwork požadavky<\/LI><\/UL><\/LI>Prochází seznam podsítí<\/LI>K využití:Klikněte pravým tlačítkem na While Controller Async a vyberte Povolit<\/STRONG>Klikněte pravým tlačítkem na While Controller Sync a vyberte Zakázat<\/STRONG>
<\/span>Poznámka: Nastavte hodnoty Thread Group pro určení škálovacího profilu testu Update Subnetwork. Vyšší hodnota "Users" znamená vyšší maximální souběžnost, které test dosáhne. Zvyšte "Rampup", aby se postupně zvýšil počet souběžných vláken během této doby (v sekundách).<\/STRONG>Podrobnější pohled na GenerateToken<\/H2>Požadavek GenerateToken je důležitou součástí testu. Probíhá brzy v testu a služba Utility Network pravděpodobně bude vyžadovat autentizaci.<\/P>Požadavek Generate Token<\/H3>
<\/span>Zachycení tokenu<\/H3>Požádání o token je polovina práce. Druhá část je jeho zachycení a uložení jako proměnné, aby k ní JMeter mohl přistupovat během běhu testu. To se provádí pomocí prvku Regular Expression Extractor z JMeter.<\/SPAN>
<\/span>Poznámka: Jak regulární výrazy fungují je mimo rozsah tohoto článku, ale v podstatě hledají konkrétní řetězcový podpis v odpovědi a pokud je nalezen, uloží ho do proměnné JMeter nazvané agstoken.<\/SPAN>Data soubor Test Plan Update Subnetwork -- Seznam podsítí<\/H2>Prvek CSV Data Set Config hraje velkou roli, protožepropojuje náš seznam dat podsítí s testem.<\/SPAN>
<\/span>Poznámka: Některé Utility Network dataset mohou obsahovat znak , (např. ",") v SubnetworkControllerName. Kde k tomu dochází, je výhodné uložit seznam podsítí jako tabulátorem oddělené hodnoty místo čárkou oddělených hodnot.< /STRONG >< / P >< P >< FONT color="#FF0000">< STRONG >Poznámka: V případech, kdy je použit soubor s tabulátorem oddělenými hodnotami, JMeter stále očekává hlavičkový řádek v seznamu podsítí jako čárkou oddělený.< / STRONG ></ FONT >< / P >< H2 id = "toc-hId-1553375444">If Controller Logika < / H2 >< P >< SPAN >Pro pohodlí byla do testovací logiky přidána podmínka aktualizovat podsítě ze seznamu pouze pokud pole IsDirty má hodnotu 1.
Groovy se používá k dosažení tohoto úkolu v testu.< / SPAN >< / P >< P >< SPAN class = " " >< SPAN class = " " >Apache Groovy je skriptovací jazyk založený na Java, který poskytuje silné funkce a programovou podporu pro věci, které by mohly být obtížné pro standardní prvky JMeter testu.< / SPAN >< / SPAN >< / P >< P >< span class = " lia-inline-image-display-wrapper lia-image-align-inline " image-alt = " AaronLopez_1-1770178547281.jpg " style = " width: 999px; " >< img src = " https://us.v-cdn.net/6038851/uploads/images/147849i44EC9E869E2E7897/AaronLopez_1-1770178547281.jpg " role = " button " title = " AaronLopez_1-1770178547281.jpg " alt = " AaronLopez_1-1770178547281.jpg " />< / span >< / P >< H2 id = " toc-hId--254079019 ">HTTP požadavek Update Subnetwork < / H2 >< P >< SPAN >Tento prvek testu v Test Plan je zodpovědný za < / SPAN >< SPAN >updateSubnetwork < / SPAN >< SPAN >webové volání v testu.< / SPAN >< SPAN > < / SPAN >< / P >< P >< SPAN >Tato komponenta vydává požadavek a JMeter vyhodnocuje odpověď vrácenou z ArcGIS Enterprise přes REST endpoint.< / SPAN >< / P >< P >< span class = " lia-inline-image-display-wrapper lia-image-align-inline " image-alt = " AaronLopez_2-1770178719521.jpg " style = " width: 999px; " >< img src = " https://us.v-cdn.net/6038851/uploads/images/147850i41B28F4A0B535191/AaronLopez_2-1770178719521.jpg " role = " button " title = " AaronLopez_2-1770178719521.jpg " alt = " AaronLopez_2-1770178719521.jpg " />< / span >< / P >< H2 id = " toc-hId--2061533482 ">Spuštění testu < / H2 >< P >< SPAN >Spouštění přes grafické uživatelské rozhraní (GUI) < / SPAN >< / P >< UL >< LI >< SPAN >Ideální pro tvorbu a ladění testů < / SPAN >< / LI >< LI >< SPAN >Tlačítka Play a Stop < / SPAN >< / LI >< / UL >< P >< span class = " lia-inline-image-display-wrapper lia-image-align-inline " image-alt = " AaronLopez_3-1770179441502.jpg " style = " width: 999px; " >< img src = " https://us.v-cdn.net/6038851/uploads/images/147851iA9A542480E2BB44F/AaronLopez_3-1770179441502.jpg " role = " button " title = " AaronLopez_3-1770179441502.jpg " alt = " AaronLopez_3-1770179441502.jpg " />< / span > < / P >< P >< span class = " lia-inline-image-display-wrapper lia-image-align-inline " image-alt = " AaronLopez_4-1770179447661.jpg " style = " width: 999px; " >< img src = " https://us.v-cdn.net/6038851/uploads/images/147852iE4C96CDF29C92622/AaronLopez_4-1770179447661.jpg " role = " button " title = " AaronLopez_4-1770179447661.jpg " alt = " AaronLopez_4-1770179447661.jpg " />< / span >< / P >< P >< SPAN >Spouštění z příkazové řádky < / SPAN >< / P >< UL >< LI >< SPAN >Skvělé pro oficiální běhy testů < / SPAN >< UL >< LI >< SPAN >Efektivnější využití paměti < / SPAN >< UL >< LI >< SPAN >Zvláště pokud jsou posluchači jako Aggregate Report během běhu zakázáni < / SPAN >< / LI ></ UL ></ LI ></ UL ></ LI ></ UL ></ LI ></ UL ></ LI ></ UL ></ LI ></ UL ></ LI ></ UL ></ LI ></ UL ></ LI ></ UL ></ LI ></ UL ></ LI ></ UL ></ LI ></ UL ></ LI ></ UL ></ LI ></ UL ></ LI ></ UL ></ LI ></ UL > cenné informace o výkonu operací z testu
Poznámka: Vždy je doporučeno koordinovat čas zahájení a délku trvání load testu s příslušným personálem vaší organizace. To zajišťuje minimální dopad na uživatele a další kolegy, kteří mohou také potřebovat používat vaše on-premise ArcGIS Enterprise Site. Navíc to pomáhá zabránit system noise z jiné aktivity a použití, které by mohly "znečistit" výsledky testu.Poznámka: Z několika důvodů je důrazně doporučeno nikdy neprovádět load test služeb poskytovaných ArcGIS Online.Analýza -- Reportování a Hodnocení
Prvek agregované zprávy (ladění testu)
Z této analýzy můžeme snadno vidět transakci UpdateSubnetwork_Sync a některé klíčové statistiky, které nám říkají důležité informace o výkonu celé operace.

Pro hrubý odhad celkového času, při použití 1 testovacího vlákna souběžnosti, stačí vynásobit počet vzorků průměrem. Například: "# Samples * Average" = Celkový čas běhu testu (ms)
Pro "oficiální" běhy testů se doporučuje zakázat posluchač Aggregate Report v Tree (jednoduchým kliknutím pravým tlačítkem a výběrem Disable) a používat jej pouze pro tvorbu testů, ladění a post-testové zpracování.
Poznámka: Pro post-testové zpracování lze Aggregate Report stále použít k procházení, výběru a načtení souboru s výsledky testu i když je v GUI zakázán.
Soubor výsledků
Při spuštění ze skriptu příkazového řádku JMeter vytvoří soubor výsledků jako součást svého výstupu. Soubor výsledků (*.jtl), obsahuje surové informace o požadavcích v textové podobě.
Obsah tohoto souboru obsahuje seznam všech subnetworks a jejich jednotlivých dob odezvy. I když je snadné jej otevřít a zobrazit v jakémkoli běžném editoru, analýza v této formě se nedoporučuje.

Prvek agregované zprávy (post-testová analýza)
Pojďme se vrátit k prvku Aggregate Report pro nějakou post-testovou analýzu. V GUI JMeter klikněte na tlačítko Browse pro nalezení jtl souboru s výsledky a poté vyberte Open pro jeho načtení.
Po načtení je jtl soubor zpracován JMeterem a v sekci Aggregate Report je generována statistická zpráva.
Prvek Aggregate Report je interaktivní, takže můžete kliknout na záhlaví Maximum pro snadné přeuspořádání seznamu a najít subnetworks, které zabraly nejvíce času. Transakce UpdateSubnetwork_Sync je stále uvedena, což je klíčové pro pochopení, zda celková čísla splňují určité požadavky na výkon podle smlouvy o úrovni služeb (SLA).

Poznámka: Počet subnetworks v tomto datasetu je malý. Výsledky testů z produkčních datasetů by měly více vzorků.
Dále rozšiřujeme analýzu
Jelikož je soubor výsledků CSV (hodnoty oddělené čárkou), lze jej snadno otevřít v tabulkovém procesoru.

Zobrazení dat výsledků s minimálním formátováním.
Toto je dobré, ale může to být lepší?

Zobrazení výkonu transakce pomocí grafů nabízí lepší přehlednost.
Poznámka: Pokud chcete jen celková čísla, odfiltrujte jednotlivé požadavky subnetwork (např. pole kde responseMessage = OK).
Export Subnetwork
Apache JMeter – Pohled na složku Test Plan ve file systému

Testovací plán Export Subnetwork
- Ke stažení Apache JMeter Test Plánu použitého v tomto článku viz: ExportSubnetwork1.zip
- Otevření Test Plánu v Apache JMeter by mělo vypadat podobně jako následující:< /SPAN >Nastavte User Defined Variables tak, aby odpovídaly vašemu prostředí
< P >< span class = "lia-inline-image-display-wrapper lia-image-align-inline " image-alt = "AaronLopez_0-1770428655788.png " style = "width: 999px; " >< img src = "
https://us.v-cdn.net/6038851/uploads/images/148094i77FABF38455C200C/AaronLopez_0-1770428655788.png " role = "button " title = "AaronLopez_0-1770428655788.png " alt = "AaronLopez_0-1770428655788.png " / ></ P >< P >< FONT color = "#FF0000 " >< STRONG > Poznámka: Nastavte hodnoty Thread Group pro určení škálovatelnosti testu Export Subnetwork. Vyšší hodnota „Users“ znamená vyšší maximální souběžnost, které test dosáhne. Zvýšte „Rampup“ pro postupné zvýšení množství souběžnosti během této doby (v sekundách), dokud nebude dosaženo maxima.< / STRONG >< / FONT >< H2 id = "toc-hId-1356861939 ">HTTP požadavek Export Subnetwork< / H2 >< P >< SPAN >Tento prvek testu v Test Plánu je zodpovědný za webové volání exportSubnetwork v testu.< / SPAN >< / P >< P >< SPAN >Tato komponenta odesílá požadavek a JMeter vyhodnocuje odpověď přicházející z ArcGIS Enterprise přes REST endpoint. < / SPAN >< / P >< P >< span class = "lia-inline-image-display-wrapper lia-image-align-inline " image-alt = "AaronLopez_0-1770329539347.png " style = "width: 999px; " >< img src = "
https://us.v-cdn.net/6038851/uploads/images/148009i505FC16A862282D5/AaronLopez_0-1770329539347.png " role = "button " title = "AaronLopez_0-1770329539347.png " alt = "AaronLopez_0-1770329539347.png " / >< / P >< P >< FONT color = "#FF0000 ">< STRONG > Poznámka: Tento Test Plan Export Subnetwork je navržen tak, aby exportoval každou subnetwork v datovém souboru.< / STRONG >< / FONT >< H2 id = "toc-hId--450592524 ">Pokročilý JMeter< / H2 >< H3 id = "toc-hId--2128964268 ">Zjištění velikosti výstupu Export Subnetwork< / H3 >< P >Požadavek exportSubnetwork vytváří soubor na ArcGIS Serveru. Tento výstupní soubor (obvykle formátovaný jako json nebo pbf) může být následně importován do jiných systémů. Velikost na disku tohoto prvku může kolísat, ale je to užitečná metadata testu k zachycení.< / P >< P >I když by bylo jednoduché nechat Request prvek přímo číst výstup pro získání velikosti, bylo by to velmi neefektivní. Nicméně tento úkol představuje příležitost využít dříve zmíněný jazyk Groovy a rychle provést náročnější výpočty na file systému.< / P >< P >Po požadavku exportSubnetwork následují další požadavky ve formě dvou JSR223 Samplerů:< / P >< UL >< LI >CalculateStatistics SN:${SUBNETWORKNAME}< / LI >< LI >SN:${SUBNETWORKNAME} Size:${outputFileSizeKB}KB< / LI >< / UL >< P >První Sample obsahuje Groovy logiku pro čtení výstupního souboru z exportu a jeho uložení do proměnné JMeter.< / P >< P >< span class = "lia-inline-image-display-wrapper lia-image-align-inline " image-alt = "AaronLopez_1-1770329982691.png " style = "width: 999px; " >< img src = "
https://us.v-cdn.net/6038851/uploads/images/148012i5D09BC0A9F25CF88/AaronLopez_1-1770329982691.png " role="button" title="AaronLopez_1-1770329982691.png" alt="AaronLopez_1-1770329982691.png" "/><\/span><\/P>
Podrobnější pohled na Groovy logiku:<\/P>
\/\/ Získání proměnných a některých dynamických artefaktů pro sestavení cesty v souborovém systému k výstupu exportSubnetwork