Vytvoření vzorce pro automatické škálování výpočetních uzlů ve fondu Batch

Azure Batch může automaticky škálovat fondy na základě vámi definovaných parametrů, což vám ušetří čas a peníze. S automatickým škálováním služba Batch dynamicky přidává uzly do fondu, protože požadavky na úkoly se zvyšují a odebírají výpočetní uzly s tím, jak se požadavky na úkoly snižují.

Pokud chcete povolit automatické škálování ve fondu výpočetních uzlů, přidružíte fond ke vzorci automatického škálování, který definujete. Služba Batch používá vzorec automatického škálování k určení, kolik uzlů je potřeba ke spuštění úlohy. Těmito uzly můžou být vyhrazené uzly nebo spotové uzly Azure. Batch pravidelně kontroluje data metrik služby a používá je k úpravě počtu uzlů ve fondu na základě vzorce a v intervalu, který definujete.

Automatické škálování můžete povolit při vytváření fondu nebo ho použít u existujícího fondu. Služba Batch umožňuje vyhodnotit vzorce před jejich přiřazením do fondů a monitorovat stav spuštění automatického škálování. Jakmile nakonfigurujete fond s automatickým škálováním, můžete později provést změny vzorce.

Důležité

Při vytváření účtu Batch můžete určit režim přidělování fondů, který určuje, jestli se fondy přidělují v předplatném služby Batch (výchozí) nebo v předplatném uživatele. Pokud jste účet Batch vytvořili s výchozí konfigurací služby Batch, je váš účet omezený na maximální počet jader, která se dají použít ke zpracování. Služba Batch škáluje výpočetní uzly pouze na tento limit jádra. Z tohoto důvodu nemusí služba Batch dosáhnout cílového počtu výpočetních uzlů určených vzorcem automatického škálování. Informace o tom, jak zobrazit a zvýšit kvóty účtu, najdete v tématu Kvóty a omezení služby Azure Batch.

Pokud jste účet vytvořili v režimu předplatného uživatele, pak sdílené složky vašeho účtu v základní kvótě předplatného. Další informace najdete v tématu Omezení virtuálních počítačů v tématu Limity, kvóty a omezení předplatného a služeb Azure.

Automatické škálování vzorců

Vzorec automatického škálování je řetězcová hodnota, kterou definujete, která obsahuje jeden nebo více příkazů. Vzorec automatického škálování je přiřazený k elementu AutoScaleFormula fondu (Batch REST) nebo Vlastnosti CloudPool.AutoScaleFormula (Batch .NET). Služba Batch používá vzorec k určení cílového počtu výpočetních uzlů ve fondu pro další interval zpracování. Řetězec vzorce nesmí překročit 8 kB, může obsahovat až 100 příkazů oddělených středníky a může obsahovat konce řádků a komentáře.

Vzorce automatického škálování si můžete představit jako jazyk automatického škálování služby Batch. Příkazy vzorců jsou výrazy ve volném formátu, které můžou obsahovat obě proměnné definované službou Service, které jsou definované službou Batch, a uživatelem definované proměnné. Vzorce můžou s těmito hodnotami provádět různé operace pomocí předdefinovaných typů, operátorů a funkcí. Například příkaz může mít následující podobu:

$myNewVariable = function($ServiceDefinedVariable, $myCustomVariable);

Vzorce obvykle obsahují více příkazů, které provádějí operace s hodnotami získanými v předchozích příkazech. Napřed získáte hodnotu pro variable1a pak ji předejte funkci, která se má naplnit variable2:

$variable1 = function1($ServiceDefinedVariable);
$variable2 = function2($OtherServiceDefinedVariable, $variable1);

Do vzorce automatického škálování zahrňte tyto příkazy, které dorazí na cílový počet výpočetních uzlů. Vyhrazené uzly a spotové uzly mají vlastní nastavení cíle. Vzorec automatického škálování může obsahovat cílovou hodnotu pro vyhrazené uzly, cílovou hodnotu spotových uzlů nebo obojí.

Cílový počet uzlů může být vyšší, nižší nebo stejný jako aktuální počet uzlů daného typu ve fondu. Služba Batch vyhodnocuje vzorec automatického škálování fondu v konkrétních intervalech automatického škálování. Batch upraví cílový počet každého typu uzlu ve fondu na číslo, které vzorec automatického škálování určuje v době vyhodnocení.

Ukázkové vzorce automatického škálování

Následující příklady ukazují dva vzorce automatického škálování, které je možné upravit tak, aby fungovaly ve většině scénářů. Proměnné startingNumberOfVMs a maxNumberofVMs v ukázkových vzorcích se dají upravit podle vašich potřeb.

Čekající úkoly

Pomocí tohoto vzorce automatického škálování se fond zpočátku vytvoří s jedním virtuálním počítačem. Metrika $PendingTasks definuje počet spuštěných nebo zařazených úkolů do fronty. Vzorec najde průměrný počet čekajících úkolů za posledních 180 sekund a nastaví proměnnou $TargetDedicatedNodes odpovídajícím způsobem. Vzorec zajistí, že cílový počet vyhrazených uzlů nikdy nepřekročí 25 virtuálních počítačů. Při odeslání nových úkolů se fond automaticky rozrůstá. Po dokončení úkolů se virtuální počítače uvolní a vzorec automatického škálování fond zmenší.

Tento vzorec škáluje vyhrazené uzly, ale můžete je upravit tak, aby se použily i pro škálování spotových uzlů.

startingNumberOfVMs = 1;
maxNumberofVMs = 25;
pendingTaskSamplePercent = $PendingTasks.GetSamplePercent(180 * TimeInterval_Second);
pendingTaskSamples = pendingTaskSamplePercent < 70 ? startingNumberOfVMs : avg($PendingTasks.GetSample(180 * TimeInterval_Second));
$TargetDedicatedNodes=min(maxNumberofVMs, pendingTaskSamples);
$NodeDeallocationOption = taskcompletion;

Důležité

Služba Batch má v současné době omezení řešení čekajících úkolů. Když se úkol přidá do úlohy, přidá se také do interní fronty používané službou Batch pro plánování. Pokud je úloha odstraněna dříve, než je možné ji naplánovat, může úloha trvat v rámci fronty, což způsobí, že se stále počítá v $PendingTasks. Tato odstraněná úloha se nakonec vymaže z fronty, když služba Batch získá možnost vyžádat úkoly z fronty a naplánovat tak nečinné uzly ve fondu Batch.

Předem připravené uzly

Tento příklad vytvoří fond, který začíná 25 spotovými uzly. Pokaždé, když je spotový uzel zrušený, nahradí se vyhrazeným uzlem. Stejně jako v prvním příkladu maxNumberofVMs brání proměnná fondu překročení 25 virtuálních počítačů. Tento příklad je užitečný pro využívání spotových virtuálních počítačů a zároveň zajišťuje, že po celou dobu životnosti fondu dojde pouze k pevnému počtu preempcí.

maxNumberofVMs = 25;
$TargetDedicatedNodes = min(maxNumberofVMs, $PreemptedNodeCount.GetSample(180 * TimeInterval_Second));
$TargetLowPriorityNodes = min(maxNumberofVMs , maxNumberofVMs - $TargetDedicatedNodes);
$NodeDeallocationOption = taskcompletion;

Další informace o vytváření vzorců automatického škálování a další ukázkové vzorce automatického škálování najdete dále v tomto článku.

Proměnné

Ve vzorcích automatického škálování můžete použít proměnné definované službou i uživatelem .

Proměnné definované službou jsou integrované do služby Batch. Některé proměnné definované službou jsou pro čtení i zápis a některé jsou jen pro čtení.

Uživatelem definované proměnné jsou proměnné, které definujete. V předchozím příkladu $TargetDedicatedNodes a $PendingTasks jsou proměnné definované službou, zatímco startingNumberOfVMs a maxNumberofVMs jsou uživatelem definované proměnné.

Poznámka:

Proměnné definované službou jsou vždy před znakem dolaru ($). U uživatelem definovaných proměnných je znak dolaru volitelný.

Následující tabulky zobrazují proměnné jen pro čtení a čtení definované službou Batch.

Proměnné definované službou pro čtení i zápis

Můžete získat a nastavit hodnoty těchto proměnných definovaných službou pro správu počtu výpočetních uzlů ve fondu.

Proměnná Popis
$TargetDedicatedNodes Cílový počet vyhrazených výpočetních uzlů pro fond. Zadaný jako cíl, protože fond nemusí vždy dosáhnout požadovaného počtu uzlů. Pokud je například cílový počet vyhrazených uzlů upraven vyhodnocením automatického škálování před dosažením počátečního cíle fondu, nemusí fond dosáhnout cíle.

Fond v účtu vytvořeném v režimu služby Batch nemusí dosáhnout cíle, pokud cíl překročí uzel účtu Batch nebo kvótu jádra. Fond v účtu vytvořeném v režimu předplatného uživatele nemusí dosáhnout cíle, pokud cíl překročí kvótu sdíleného jádra předplatného.
$TargetLowPriorityNodes Cílový počet spotových výpočetních uzlů pro fond. Zadaný jako cíl, protože fond nemusí vždy dosáhnout požadovaného počtu uzlů. Pokud je například cílový počet spotových uzlů upraven vyhodnocením automatického škálování před dosažením počátečního cíle fondu, nemusí fond dosáhnout cíle. Fond také nemusí dosáhnout cíle, pokud cíl překročí kvótu uzlu účtu Batch nebo základní kvóty.

Další informace o spotových výpočetníchuzch
$NodeDeallocationOption Akce, která nastane, když se výpočetní uzly odeberou z fondu. Možné hodnoty jsou:
- requeue: Výchozí hodnota. Ukončí úkoly okamžitě a umístí je zpět do fronty úloh, aby byly znovu přeplánované. Tato akce zajistí dosažení cílového počtu uzlů co nejrychleji. Může ale být méně efektivní, protože všechny spuštěné úlohy jsou přerušeny a pak je nutné je restartovat.
- terminate: Ukončí úkoly okamžitě a odebere je z fronty úloh.
- dokončení úkolu: Čeká na dokončení aktuálně spuštěných úkolů a pak odebere uzel z fondu. Tato možnost slouží k tomu, abyste se vyhnuli přerušení a opětovnému zařazení úkolů do fronty, což znamená plýtvání prací, kterou úkol provedl.
- retaineddata: Před odebráním uzlu z fondu čeká na vyčištění všech místních dat uchovávaných úloh v uzlu.

Poznámka:

Proměnnou $TargetDedicatedNodes lze také zadat pomocí aliasu $TargetDedicated. Podobně lze proměnnou $TargetLowPriorityNodes zadat pomocí aliasu $TargetLowPriority. Pokud vzorec nastaví plně pojmenovanou proměnnou i její alias, bude mít přednost hodnota přiřazená plně pojmenované proměnné.

Proměnné definované službou jen pro čtení

Můžete získat hodnotu těchto proměnných definovaných službou a provést úpravy založené na metrikách ze služby Batch.

Důležité

Úkoly uvolnění úloh nejsou aktuálně zahrnuty do proměnných, které poskytují počty úkolů, například $ActiveTasks a $PendingTasks. V závislosti na vzorci automatického škálování to může vést k odebrání uzlů bez uzlů, které by mohly spouštět úlohy uvolnění úloh.

Tip

Tyto proměnné definované službou jen pro čtení jsou objekty , které poskytují různé metody pro přístup k datům přidruženým k jednotlivým objektům. Další informace naleznete v části Získání ukázkových dat dále v tomto článku.

Proměnná Popis
$CPUPercent Průměrné procento využití procesoru
$WallClockSeconds Počet sekund spotřebovaných. Vyřazení z provozu po roce 2024-mar-31.
$MemoryBytes Průměrný počet použitých megabajtů. Vyřazení z provozu po roce 2024-mar-31.
$DiskBytes Průměrný počet gigabajtů použitých na místních discích. Vyřazení z provozu po roce 2024-mar-31.
$DiskReadBytes Počet přečtených bajtů. Vyřazení z provozu po roce 2024-mar-31.
$DiskWriteBytes Počet zapsaných bajtů. Vyřazení z provozu po roce 2024-mar-31.
$DiskReadOps Počet provedených operací čtení na disku. Vyřazení z provozu po roce 2024-mar-31.
$DiskWriteOps Počet provedených operací zápisu na disk. Vyřazení z provozu po roce 2024-mar-31.
$NetworkInBytes Početpříchozích Vyřazení z provozu po roce 2024-mar-31.
$NetworkOutBytes Početodchozích Vyřazení z provozu po roce 2024-mar-31.
$SampleNodeCount Počet výpočetních uzlů. Vyřazení z provozu po roce 2024-mar-31.
$ActiveTasks Počet úkolů, které jsou připravené ke spuštění, ale zatím se nespouštějí. To zahrnuje všechny úkoly, které jsou v aktivním stavu a jejichž závislosti byly splněny. Všechny úkoly, které jsou v aktivním stavu, ale jejichž závislosti nebyly splněny, jsou vyloučeny z počtu $ActiveTasks . Pro úlohu $ActiveTasks s více instancemi zahrnuje počet instancí nastavených pro úlohu.
$RunningTasks Počet úkolů ve spuštěném stavu.
$PendingTasks Součet a $ActiveTasks$RunningTasks.
$SucceededTasks Počet úkolů, které byly úspěšně dokončeny.
$FailedTasks Počet úkolů, které selhaly.
$TaskSlotsPerNode Počet slotů úloh, které lze použít ke spouštění souběžných úloh na jednom výpočetním uzlu ve fondu.
$CurrentDedicatedNodes Aktuální počet vyhrazených výpočetních uzlů
$CurrentLowPriorityNodes Aktuální počet spotovýchvýpočetních
$UsableNodeCount Počet využitelných výpočetních uzlů.
$PreemptedNodeCount Početuzlůch

Upozorňující

Výběr proměnných definovaných službou bude vyřazen po 31. březnu 2024 , jak je uvedeno v tabulce výše. Po datu vyřazení už nebudou tyto proměnné definované službou naplněny ukázkovými daty. Ukončete používání těchto proměnných před tímto datem.

Poznámka:

Používá se $RunningTasks při škálování na základě počtu úloh spuštěných v určitém časovém okamžiku a $ActiveTasks při škálování na základě počtu úkolů, které jsou zařazeny do fronty ke spuštění.

Typy

Vzorce automatického škálování podporují následující typy:

  • double
  • doubleVec
  • doubleVecList
  • string
  • timestamp--a složená struktura, která obsahuje následující členy:
    • za rok
    • měsíc (1–12)
    • den (1-31)
    • pracovní den (ve formátu čísla, například 1 pro pondělí)
    • hodina (ve formátu čísla 24 hodin, například 13: 12:00)
    • minuta (00–59)
    • druhé (00–59)
  • timeinterval
    • TimeInterval_Zero
    • TimeInterval_100ns
    • TimeInterval_Microsecond
    • TimeInterval_Millisecond
    • TimeInterval_Second
    • TimeInterval_Minute
    • TimeInterval_Hour
    • TimeInterval_Day
    • TimeInterval_Week
    • TimeInterval_Year

Operace

Tyto operace jsou povolené u typů uvedených v předchozí části.

Operace Podporované operátory Typ výsledku
double – operátor double +, -, *, / double
double operator timeinterval * timeinterval
doubleVec – operátor double +, -, *, / doubleVec
doubleVec – operátor doubleVec +, -, *, / doubleVec
timeinterval – operátor double *, / timeinterval
timeinterval – operátor timeinterval +, - timeinterval
časové razítko časového intervalu operátoru timeinterval + časové razítko
timeinterval – operátor časového razítka + časové razítko
časové razítko operátoru časového razítka - timeinterval
operátor double -, ! double
timeinterval – operátor - timeinterval
double – operátor double <, <=, ==, =, >>, != double
Řetězec řetězcového operátoru <, <=, ==, =, >>, != double
časové razítko operátoru časového razítka <, <=, ==, =, >>, != double
timeinterval – operátor timeinterval <, <=, ==, =, >>, != double
double – operátor double &&, || double

Testování double pomocí ternárního operátoru (double ? statement1 : statement2), má za následek nenulovou hodnotu true a nulu jako false.

Functions

Tyto předdefinované funkce můžete použít při definování vzorce automatického škálování.

Function Návratový typ Popis
avg(doubleVecList) double Vrátí průměrnou hodnotu pro všechny hodnoty v doubleVecList.
ceil(double) double Vrátí nejmenší celočíselnou hodnotu, která není menší než hodnota double.
ceil(doubleVecList) doubleVec Vrátí komponentu ceil doubleVecList.
floor(double) double Vrátí největší celočíselnou hodnotu, která není větší než hodnota double.
floor(doubleVecList) doubleVec Vrátí komponentu floor doubleVecList.
len(doubleVecList) double Vrátí délku vektoru vytvořeného z doubleVecList.
lg(double) double Vrátí základ protokolu 2 dvojité hodnoty.
lg(doubleVecList) doubleVec Vrátí komponentu lg doubleVecList.
ln(double) double Vrátí přirozený protokol dvojité hodnoty.
ln(doubleVecList) doubleVec Vrátí komponentu ln doubleVecList.
log(double) double Vrátí základ protokolu 10 dvojité hodnoty.
log(doubleVecList) doubleVec Vrátí komponentu log doubleVecList.
max(doubleVecList) double Vrátí maximální hodnotu v doubleVecList.
min(doubleVecList) double Vrátí minimální hodnotu v doubleVecList.
norm(doubleVecList) double Vrátí dvou normu vektoru vytvořeného z doubleVecList.
percentil(doubleVec v; double p) double Vrátí percentilový prvek vektoru v.
rand() double Vrátí náhodnou hodnotu mezi 0,0 a 1,0.
range(doubleVecList) double Vrátí rozdíl mezi minimálními a maximálními hodnotami v doubleVecList.
round(double) double Vrátí nejbližší celočíselnou hodnotu k dvojité hodnotě (ve formátu s plovoucí desetinou čárkou), která zaokrouhlí polovinu případů směrem od nuly.
round(doubleVecList) doubleVec Vrátí komponentu round doubleVecList.
std(doubleVecList) double Vrátí směrodatnou odchylku hodnot v doubleVecListu.
stop() Zastaví vyhodnocení výrazu automatického škálování.
sum(doubleVecList) double Vrátí součet všech součástí doubleVecList.
time(string dateTime="") časové razítko Vrátí časové razítko aktuálního času, pokud nejsou předány žádné parametry, nebo časové razítko řetězce dateTime, pokud je předáno. Podporované formáty dateTime jsou W3C-DTF a RFC 1123.
val(doubleVec v, double i) double Vrátí hodnotu prvku, který je na místě i ve vektoru v, s počátečním indexem nuly.

Některé funkce popsané v předchozí tabulce můžou jako argument přijmout seznam. Seznam oddělený čárkami je libovolná kombinace dvojité a dvojitéhovecu. Příklad:

doubleVecList := ( (double | doubleVec)+(, (double | doubleVec) )* )?

Hodnota doubleVecList je před vyhodnocením převedena na jeden doubleVec . Pokud je v = [1,2,3]například volání avg(v) ekvivalentní volání avg(1,2,3). Volání avg(v, 7) je ekvivalentní volání avg(1,2,3,7).

Metriky

Metriky prostředků i úkolů můžete použít při definování vzorce. Cílový počet vyhrazenýchuzlůch Další informace o jednotlivých metrikách najdete v části Proměnné.

Metrický Popis
Prostředek Metriky prostředků jsou založené na procesoru, šířce pásma, využití paměti výpočetních uzlů a počtu uzlů.

Tyto proměnné definované službou jsou užitečné pro provádění úprav na základě počtu uzlů:
- $TargetDedicatedNodes
- $TargetLowPriorityNodes
- $CurrentDedicatedNodes
- $CurrentLowPriorityNodes
- $PreemptedNodeCount
- $SampleNodeCount

Tyto proměnné definované službou jsou užitečné pro provádění úprav na základě využití prostředků uzlu:
- $CPUPercent
- $WallClockSeconds
- $MemoryBytes
- $DiskBytes
- $DiskReadBytes
- $DiskWriteBytes
- $DiskReadOps
- $DiskWriteOps
- $NetworkInBytes
- $NetworkOutBytes
Úloha Metriky úkolů jsou založeny na stavu úkolů, jako jsou aktivní, čekající a dokončené. Následující proměnné definované službou jsou užitečné pro úpravy velikosti fondu na základě metrik úloh:
- $ActiveTasks
- $RunningTasks
- $PendingTasks
- $SucceededTasks
- $FailedTasks

Získání ukázkových dat

Základním provozem vzorce automatického škálování je získání dat metrik úkolů a prostředků (ukázek) a následná úprava velikosti fondu na základě těchto dat. Proto je důležité jasně pochopit, jak vzorce automatického škálování pracují s ukázkami.

Metody

Vzorce automatického škálování fungují na vzorcích dat metrik poskytovaných službou Batch. Vzorec zvětší nebo zmenší výpočetní uzly fondu na základě hodnot, které získá. Proměnné definované službou jsou objekty, které poskytují metody pro přístup k datům přidruženým k danému objektu. Například následující výraz ukazuje požadavek na získání posledních pěti minut využití procesoru:

$CPUPercent.GetSample(TimeInterval_Minute * 5)

Následující metody lze použít k získání ukázkových dat o proměnných definovaných službou.

metoda Popis
GetSample() Metoda GetSample() vrátí vektor vzorků dat.

Ukázka je 30 sekund dat metrik. Jinými slovy, vzorky se získávají každých 30 sekund. Jak je ale uvedeno níže, mezi tím, kdy se shromáždí ukázka, a kdy je pro vzorec k dispozici, je zpoždění. Proto nemusí být všechny vzorky pro dané časové období dostupné pro vyhodnocení vzorcem.

- doubleVec GetSample(double count): Určuje počet vzorků, které se mají získat z nejnovějších vzorků, které byly shromážděny. GetSample(1) vrátí poslední dostupnou ukázku. U metrik, jako je $CPUPercentale , by se nemělo používat, protože není možné zjistit, GetSample(1) kdy se ukázka shromáždila. Může to být nedávné nebo kvůli systémovým problémům může být mnohem starší. V takovýchpřípadechch

- doubleVec GetSample((timestamp or timeinterval) startTime [, double samplePercent]): Určuje časový rámec pro shromažďování ukázkových dat. Volitelně také určuje procento vzorků, které musí být k dispozici v požadovaném časovém rámci. Pokud jsou například v historii přítomny CPUPercent všechny vzorky za posledních 10 minut, $CPUPercent.GetSample(TimeInterval_Minute * 10) vrátí se 20 vzorků. Pokud poslední minuta historie nebyla k dispozici, vrátí se pouze 18 vzorků. V takovém případě $CPUPercent.GetSample(TimeInterval_Minute * 10, 95) by selžou, protože je k dispozici pouze 90 procent vzorků, ale $CPUPercent.GetSample(TimeInterval_Minute * 10, 80) bylo by úspěšné.

- doubleVec GetSample((timestamp or timeinterval) startTime, (timestamp or timeinterval) endTime [, double samplePercent]): Určuje časový rámec pro shromažďování dat s počátečním i koncovým časem. Jak už bylo zmíněno výše, mezi shromažďováním vzorku a jeho zpřístupněním pro vzorec dochází ke zpoždění. Při použití GetSample metody zvažte toto zpoždění. Viz GetSamplePercent níže.
GetSamplePeriod() Vrátí období vzorků odebraných v historické sadě ukázkových dat.
Count() Vrátí celkový počet vzorků v historii metrik.
HistoryBeginTime() Vrátí časové razítko nejstaršího dostupného vzorku dat pro metriku.
GetSamplePercent() Vrátí procento vzorků, které jsou k dispozici pro daný časový interval. Například doubleVec GetSamplePercent( (timestamp or timeinterval) startTime [, (timestamp or timeinterval) endTime] ). Vzhledem k tomu, že GetSample metoda selže, pokud je procento vrácených vzorků menší než samplePercent zadané, můžete metodu GetSamplePercent použít k první kontrole. Potom můžete provést alternativní akci, pokud nejsou k dispozici dostatečné vzorky, aniž byste zastavili automatické vyhodnocení škálování.

Ukázky

Služba Batch pravidelně odebírá ukázky metrik úkolů a prostředků a zpřístupňuje je vzorcům automatického škálování. Tyto vzorky se zaznamenávají každých 30 sekund službou Batch. Mezi zaznamenáním těchto vzorků a jejich zpřístupněním (a čtením) vzorců automatického škálování ale obvykle dochází ke zpoždění. Vzorky navíc nemusí být zaznamenány pro určitý interval kvůli faktorům, jako jsou problémy se sítí nebo jinou infrastrukturou.

Procento vzorku

Když samplePercent je metoda předána GetSample() nebo GetSamplePercent() je volána metoda, procento odkazuje na porovnání mezi celkovým možným počtem vzorků zaznamenaných službou Batch a počtem vzorků, které jsou k dispozici pro vzorec automatického škálování.

Podívejme se na příklad 10minutového časového rozsahu. Vzhledem k tomu, že vzorky se zaznamenávají každých 30 sekund během tohoto 10minutového časového rozsahu, bude maximální celkový počet vzorků zaznamenaných službou Batch 20 vzorků (2 za minutu). Vzhledem k vlastní latenci mechanismu generování sestav a dalším problémům v Rámci Azure ale může existovat jenom 15 ukázek, které jsou dostupné pro vzorec automatického škálování pro čtení. Například pro toto 10minutové období může být pro vzorec k dispozici pouze 75 procent celkového počtu zaznamenaných vzorků.

GetSample() a ukázkové oblasti

Vzorce automatického škálování se zvětší a zmenší fondy přidáním nebo odebráním uzlů. Vzhledem k tomu, že uzly stojí peníze, ujistěte se, že vzorce používají inteligentní metodu analýzy založenou na dostatečných datech. Ve vzorcích se doporučuje použít analýzu trendového typu. Tento typ roste a zmenšuje fondy na základě řady shromážděných vzorků.

Uděláte to tak, že použijete GetSample(interval look-back start, interval look-back end) k vrácení vektoru vzorků:

$runningTasksSample = $RunningTasks.GetSample(1 * TimeInterval_Minute, 6 * TimeInterval_Minute);

Když služba Batch vyhodnotí výše uvedenou čáru, vrátí jako vektor hodnot oblast vzorků. Příklad:

$runningTasksSample=[1,1,1,1,1,1,1,1,1,1];

Po shromáždění vektoru vzorků pak můžete použít funkce jako min(), max()a avg() odvodit smysluplné hodnoty z shromážděného rozsahu.

Pokud chcete postupovat opatrně, můžete vynutit, aby vyhodnocení vzorce selhalo, pokud je pro určité časové období k dispozici méně než určité procento vzorku. Když vynutíte, aby vyhodnocení vzorce selhalo, dá služba Batch pokyn, aby zastavila další vyhodnocení vzorce, pokud zadané procento vzorků není k dispozici. V takovém případě se velikost fondu nezmění. Chcete-li zadat požadované procento vzorků pro úspěšné vyhodnocení, zadejte ho jako třetí parametr pro GetSample(). Tady je zadaný požadavek na 75 procent vzorků:

$runningTasksSample = $RunningTasks.GetSample(60 * TimeInterval_Second, 120 * TimeInterval_Second, 75);

Vzhledem k tomu, že u ukázkové dostupnosti může docházet ke zpoždění, měli byste vždy zadat časový rozsah s časem zahájení zpětného vyhledávání, který je starší než jedna minuta. Rozšíření vzorků v systému trvá přibližně jednu minutu, takže vzorky v rozsahu (0 * TimeInterval_Second, 60 * TimeInterval_Second) nemusí být dostupné. Znovu můžete použít parametr procenta vynucení GetSample() konkrétního požadavku na procento vzorku.

Důležité

Důrazně doporučujeme, abyste se nemuseli spoléhat jenom na GetSample(1) vzorce automatického škálování. Je to proto, že GetSample(1) v podstatě říká službě Batch: "Dejte mi poslední ukázku, kterou jste měli, bez ohledu na to, jak dlouho jste ji načetli." Vzhledem k tomu, že se jedná pouze o jediný vzorek a může se jednat o starší ukázku, nemusí představovat větší obrázek o nedávném stavu úkolu nebo zdroje. Pokud použijete GetSample(1), ujistěte se, že je součástí většího příkazu, a ne jediný datový bod, na který vzorec spoléhá.

Zápis vzorce automatického škálování

Vzorec automatického škálování vytvoříte tak, že vytvoříte příkazy, které používají výše uvedené komponenty, a pak tyto příkazy zkombinujete do úplného vzorce. V této části vytvoříte ukázkový vzorec automatického škálování, který může provádět rozhodnutí o skutečném škálování a provádět úpravy.

Nejprve pojďme definovat požadavky na nový vzorec automatického škálování. Vzorec by měl:

  • Pokud je vysoké využití procesoru, zvyšte cílový počet vyhrazených výpočetních uzlů ve fondu.
  • Snižte cílový počet vyhrazených výpočetních uzlů ve fondu, když je nízké využití procesoru.
  • Vždy omezte maximální počet vyhrazených uzlů na 400.
  • Při snížení počtu uzlů neodebíjejte uzly, které spouští úlohy; v případě potřeby počkejte, než se úkoly dokončí, než odeberete uzly.

První příkaz ve vzorci zvyšuje počet uzlů během vysokého využití procesoru. Definujete příkaz, který naplní uživatelsky definovanou proměnnou ($totalDedicatedNodes) hodnotou, která je 110 procent aktuálního cílového počtu vyhrazených uzlů, ale pouze v případě, že minimální průměrné využití procesoru během posledních 10 minut překročilo 70 procent. V opačném případě použije hodnotu pro aktuální počet vyhrazených uzlů.

$totalDedicatedNodes =
    (min($CPUPercent.GetSample(TimeInterval_Minute * 10)) > 0.7) ?
    ($CurrentDedicatedNodes * 1.1) : $CurrentDedicatedNodes;

Pokud chcete snížit počet vyhrazených uzlů během nízkého využití procesoru, další příkaz ve vzorci nastaví stejnou proměnnou $totalDedicatedNodes na 90 procent aktuálního cílového počtu vyhrazených uzlů, pokud průměrné využití procesoru za posledních 60 minut bylo nižší než 20 procent. V opačném případě použije aktuální hodnotu vyplněnou $totalDedicatedNodes v příkazu výše.

$totalDedicatedNodes =
    (avg($CPUPercent.GetSample(TimeInterval_Minute * 60)) < 0.2) ?
    ($CurrentDedicatedNodes * 0.9) : $totalDedicatedNodes;

Teď omezte cílový počet vyhrazených výpočetních uzlů na maximálně 400.

$TargetDedicatedNodes = min(400, $totalDedicatedNodes);

Nakonec se ujistěte, že se uzly neodeberou, dokud jejich úkoly nedokončí.

$NodeDeallocationOption = taskcompletion;

Tady je úplný vzorec:

$totalDedicatedNodes =
    (min($CPUPercent.GetSample(TimeInterval_Minute * 10)) > 0.7) ?
    ($CurrentDedicatedNodes * 1.1) : $CurrentDedicatedNodes;
$totalDedicatedNodes =
    (avg($CPUPercent.GetSample(TimeInterval_Minute * 60)) < 0.2) ?
    ($CurrentDedicatedNodes * 0.9) : $totalDedicatedNodes;
$TargetDedicatedNodes = min(400, $totalDedicatedNodes);
$NodeDeallocationOption = taskcompletion;

Poznámka:

Pokud zvolíte, můžete do řetězců vzorců zahrnout komentáře i konce řádků. Mějte také na paměti, že chybějící středníky můžou vést k chybám vyhodnocení.

Interval automatického škálování

Ve výchozím nastavení služba Batch upraví velikost fondu podle vzorce automatického škálování každých 15 minut. Tento interval lze konfigurovat pomocí následujících vlastností fondu:

Minimální interval je pět minut a maximum je 168 hodin. Pokud je zadaný interval mimo tento rozsah, služba Batch vrátí chybu Chybný požadavek (400).

Poznámka:

Automatické škálování v současné době neodpovídá na změny za méně než minutu, ale je určené k postupné úpravě velikosti fondu při spuštění úlohy.

Vytvoření fondu s povoleným automatickým škálováním pomocí sad SDK služby Batch

Automatické škálování fondu je možné nakonfigurovat pomocí libovolné sady SDK služby Batch, rutin PowerShellu služby Batch REST APIa rozhraní příkazového řádku služby Batch. V této části vidíte příklady pro .NET i Python.

.NET

Pokud chcete vytvořit fond s povoleným automatickým škálováním v .NET, postupujte takto:

  1. Vytvořte fond pomocí BatchClient.PoolOperations.CreatePool.
  2. Nastavte Vlastnost CloudPool.AutoScaleEnabled na hodnotu true.
  3. Nastavte vlastnost CloudPool.AutoScaleFormula vzorcem automatického škálování.
  4. (Volitelné) Nastavte vlastnost CloudPool.AutoScaleEvaluationInterval (výchozí hodnota je 15 minut).
  5. Potvrďte fond pomocí CloudPool.Commit nebo CommitAsync.

Následující příklad vytvoří fond s povoleným automatickým škálováním v .NET. Vzorec automatického škálování fondu nastaví cílový počet vyhrazených uzlů na 5 v pondělí a na 1 každý druhý den v týdnu. Interval automatického škálování je nastavený na 30 minut. V tomto a dalších fragmentech kódu jazyka C# v tomto článku myBatchClient je správně inicializovaná instance třídy BatchClient .

CloudPool pool = myBatchClient.PoolOperations.CreatePool(
                    poolId: "mypool",
                    virtualMachineSize: "standard_d1_v2",
                    VirtualMachineConfiguration: new VirtualMachineConfiguration(
                        imageReference: new ImageReference(
                                            publisher: "MicrosoftWindowsServer",
                                            offer: "WindowsServer",
                                            sku: "2019-datacenter-core",
                                            version: "latest"),
                        nodeAgentSkuId: "batch.node.windows amd64");
pool.AutoScaleEnabled = true;
pool.AutoScaleFormula = "$TargetDedicatedNodes = (time().weekday == 1 ? 5:1);";
pool.AutoScaleEvaluationInterval = TimeSpan.FromMinutes(30);
await pool.CommitAsync();

Důležité

Při vytváření fondu s povoleným automatickým škálováním nezadávejte parametr targetDedicatedNodes ani parametr targetLowPriorityNodes při volání CreatePool. Místo toho zadejte vlastnosti AutoScaleEnabled a AutoScaleFormula vlastnosti ve fondu. Hodnoty těchto vlastností určují cílový počet jednotlivých typů uzlů.

Pokud chcete ručně změnit velikost fondu s povoleným automatickým škálováním (například pomocí BatchClient.PoolOperations.ResizePoolAsync), musíte nejprve zakázat automatické škálování ve fondu a pak změnit jeho velikost.

Tip

Další příklady použití sady .NET SDK najdete v úložišti Rychlý start služby Batch .NET na GitHubu.

Python

Vytvoření fondu s povoleným automatickým škálováním pomocí sady Python SDK:

  1. Vytvořte fond a zadejte jeho konfiguraci.
  2. Přidejte fond do klienta služby.
  3. Povolte automatické škálování ve fondu pomocí vzorce, který napíšete.

Následující příklad ukazuje tyto kroky.

# Create a pool; specify configuration
new_pool = batch.models.PoolAddParameter(
    id="autoscale-enabled-pool",
    virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
        image_reference=batchmodels.ImageReference(
          publisher="Canonical",
          offer="UbuntuServer",
          sku="20.04-LTS",
          version="latest"
            ),
        node_agent_sku_id="batch.node.ubuntu 20.04"),
    vm_size="STANDARD_D1_v2",
    target_dedicated_nodes=0,
    target_low_priority_nodes=0
)
batch_service_client.pool.add(new_pool) # Add the pool to the service client

formula = """$curTime = time();
             $workHours = $curTime.hour >= 8 && $curTime.hour < 18;
             $isWeekday = $curTime.weekday >= 1 && $curTime.weekday <= 5;
             $isWorkingWeekdayHour = $workHours && $isWeekday;
             $TargetDedicated = $isWorkingWeekdayHour ? 20:10;""";

# Enable autoscale; specify the formula
response = batch_service_client.pool.enable_auto_scale(pool_id, auto_scale_formula=formula,
                                            auto_scale_evaluation_interval=datetime.timedelta(minutes=10),
                                            pool_enable_auto_scale_options=None,
                                            custom_headers=None, raw=False)

Tip

Další příklady použití sady Python SDK najdete v úložišti Rychlý start pro Batch Python na GitHubu.

Povolení automatického škálování ve stávajícím fondu

Každá sada Batch SDK poskytuje způsob, jak povolit automatické škálování. Příklad:

Pokud povolíte automatické škálování ve stávajícím fondu, mějte na paměti:

  • Pokud je ve fondu aktuálně zakázané automatické škálování, musíte při vydání požadavku zadat platný vzorec automatického škálování. Volitelně můžete zadat interval automatického škálování. Pokud nezadáte interval, použije se výchozí hodnota 15 minut.
  • Pokud je ve fondu aktuálně povolené automatické škálování, můžete zadat nový vzorec, nový interval nebo obojí. Musíte zadat alespoň jednu z těchto vlastností.
    • Pokud zadáte nový interval automatického škálování, stávající plán se zastaví a spustí se nový plán. Počáteční čas nového plánu je čas, kdy byla vydána žádost o povolení automatického škálování.
    • Pokud vynecháte vzorec automatického škálování nebo interval, služba Batch bude dál používat aktuální hodnotu tohoto nastavení.

Poznámka:

Pokud jste zadali hodnoty pro targetDedicatedNodes nebo targetLowPriorityNodes parametr CreatePool metody při vytváření fondu v .NET nebo pro srovnatelné parametry v jiném jazyce, budou tyto hodnoty ignorovány při vyhodnocení vzorce automatického škálování.

Tento příklad jazyka C# používá knihovnu Batch .NET k povolení automatického škálování ve stávajícím fondu.

// Define the autoscaling formula. This formula sets the target number of nodes
// to 5 on Mondays, and 1 on every other day of the week
string myAutoScaleFormula = "$TargetDedicatedNodes = (time().weekday == 1 ? 5:1);";

// Set the autoscale formula on the existing pool
await myBatchClient.PoolOperations.EnableAutoScaleAsync(
    "myexistingpool",
    autoscaleFormula: myAutoScaleFormula);

Aktualizace vzorce automatického škálování

Pokud chcete aktualizovat vzorec ve stávajícím fondu s povoleným automatickým škálováním, zavolejte operaci, aby se automatické škálování znovu povolilo pomocí nového vzorce. Pokud je například při spuštění následujícího kódu .NET povolené myexistingpool automatické škálování, nahradí se jeho vzorec automatického myNewFormulaškálování obsahem .

await myBatchClient.PoolOperations.EnableAutoScaleAsync(
    "myexistingpool",
    autoscaleFormula: myNewFormula);

Aktualizace intervalu automatického škálování

Pokud chcete aktualizovat interval vyhodnocení automatického škálování existujícího fondu s povoleným automatickým škálováním, zavolejte operaci, aby se automatické škálování znovu povolilo s novým intervalem. Pokud například chcete nastavit interval vyhodnocení automatického škálování na 60 minut pro fond, který už je povolený automatické škálování v .NET:

await myBatchClient.PoolOperations.EnableAutoScaleAsync(
    "myexistingpool",
    autoscaleEvaluationInterval: TimeSpan.FromMinutes(60));

Vyhodnocení vzorce automatického škálování

Vzorec můžete vyhodnotit před použitím ve fondu. To vám umožní otestovat výsledky vzorce předtím, než ho vložíte do produkčního prostředí.

Než budete moct vyhodnotit vzorec automatického škálování, musíte nejprve povolit automatické škálování ve fondu pomocí platného vzorce, například jednořádkového vzorce $TargetDedicatedNodes = 0. Pak pomocí jedné z následujících možností vyhodnoťte vzorec, který chcete testovat:

Následující příklad batch .NET vyhodnotí vzorec automatického škálování. Pokud fond ještě nepoužívá automatické škálování, povolte ho nejprve.

// First obtain a reference to an existing pool
CloudPool pool = await batchClient.PoolOperations.GetPoolAsync("myExistingPool");

// If autoscaling isn't already enabled on the pool, enable it.
// You can't evaluate an autoscale formula on a non-autoscale-enabled pool.
if (pool.AutoScaleEnabled == false)
{
    // You need a valid autoscale formula to enable autoscaling on the
    // pool. This formula is valid, but won't resize the pool:
    await pool.EnableAutoScaleAsync(
        autoscaleFormula: "$TargetDedicatedNodes = $CurrentDedicatedNodes;",
        autoscaleEvaluationInterval: TimeSpan.FromMinutes(5));

    // Batch limits EnableAutoScaleAsync calls to once every 30 seconds.
    // Because you want to apply our new autoscale formula below if it
    // evaluates successfully, and you *just* enabled autoscaling on
    // this pool, pause here to ensure you pass that threshold.
    Thread.Sleep(TimeSpan.FromSeconds(31));

    // Refresh the properties of the pool so that we've got the
    // latest value for AutoScaleEnabled
    await pool.RefreshAsync();
}

// You must ensure that autoscaling is enabled on the pool prior to
// evaluating a formula
if (pool.AutoScaleEnabled == true)
{
    // The formula to evaluate - adjusts target number of nodes based on
    // day of week and time of day
    string myFormula = @"
        $curTime = time();
        $workHours = $curTime.hour >= 8 && $curTime.hour < 18;
        $isWeekday = $curTime.weekday >= 1 && $curTime.weekday <= 5;
        $isWorkingWeekdayHour = $workHours && $isWeekday;
        $TargetDedicatedNodes = $isWorkingWeekdayHour ? 20:10;
    ";

    // Perform the autoscale formula evaluation. Note that this code does not
    // actually apply the formula to the pool.
    AutoScaleRun eval =
        await batchClient.PoolOperations.EvaluateAutoScaleAsync(pool.Id, myFormula);

    if (eval.Error == null)
    {
        // Evaluation success - print the results of the AutoScaleRun.
        // This will display the values of each variable as evaluated by the
        // autoscale formula.
        Console.WriteLine("AutoScaleRun.Results: " +
            eval.Results.Replace("$", "\n    $"));

        // Apply the formula to the pool since it evaluated successfully
        await batchClient.PoolOperations.EnableAutoScaleAsync(pool.Id, myFormula);
    }
    else
    {
        // Evaluation failed, output the message associated with the error
        Console.WriteLine("AutoScaleRun.Error.Message: " +
            eval.Error.Message);
    }
}

Úspěšné vyhodnocení vzorce zobrazeného v tomto fragmentu kódu vytvoří podobné výsledky jako:

AutoScaleRun.Results:
    $TargetDedicatedNodes=10;
    $NodeDeallocationOption=requeue;
    $curTime=2016-10-13T19:18:47.805Z;
    $isWeekday=1;
    $isWorkingWeekdayHour=0;
    $workHours=0

Získání informací o spuštěních automatického škálování

Doporučujeme pravidelně kontrolovat vyhodnocení vzorce automatického škálování ve službě Batch. Uděláte to tak, že získáte (nebo aktualizujete) odkaz na fond a zkontrolujte vlastnosti posledního spuštění automatického škálování.

Ve službě Batch .NET má vlastnost CloudPool.AutoScaleRun několik vlastností, které poskytují informace o nejnovějším spuštění automatického škálování prováděném ve fondu:

V rozhraní REST API vrátí informace o požadavku fondu informace o fondu, které zahrnují nejnovější informace o spuštění automatického škálování ve vlastnosti autoScaleRun .

Následující příklad jazyka C# používá knihovnu Batch .NET k tisku informací o posledním spuštění automatického škálování ve fondu myPool.

await Cloud pool = myBatchClient.PoolOperations.GetPoolAsync("myPool");
Console.WriteLine("Last execution: " + pool.AutoScaleRun.Timestamp);
Console.WriteLine("Result:" + pool.AutoScaleRun.Results.Replace("$", "\n  $"));
Console.WriteLine("Error: " + pool.AutoScaleRun.Error);

Ukázkový výstup z předchozího příkladu:

Last execution: 10/14/2016 18:36:43
Result:
  $TargetDedicatedNodes=10;
  $NodeDeallocationOption=requeue;
  $curTime=2016-10-14T18:36:43.282Z;
  $isWeekday=1;
  $isWorkingWeekdayHour=0;
  $workHours=0
Error:

Získání historie spuštění automatického škálování pomocí událostí automatického škálování fondu

Historii automatického škálování můžete také zkontrolovat dotazem PoolAutoScaleEvent. Batch tuto událost vygeneruje, aby zaznamenala každý výskyt vyhodnocení a spuštění vzorce automatického škálování, což může být užitečné při řešení potenciálních problémů.

Ukázková událost pro PoolAutoScaleEvent:

{
    "id": "poolId",
    "timestamp": "2020-09-21T23:41:36.750Z",
    "formula": "...",
    "results": "$TargetDedicatedNodes=10;$NodeDeallocationOption=requeue;$curTime=2016-10-14T18:36:43.282Z;$isWeekday=1;$isWorkingWeekdayHour=0;$workHours=0",
    "error": {
        "code": "",
        "message": "",
        "values": []
    }
}

Příklady vzorců automatického škálování

Podívejme se na několik vzorců, které ukazují různé způsoby, jak upravit množství výpočetních prostředků ve fondu.

Příklad 1: Úprava založená na čase

Předpokládejme, že chcete upravit velikost fondu na základě dne v týdnu a denního času. Tento příklad ukazuje, jak odpovídajícím způsobem zvýšit nebo snížit počet uzlů ve fondu.

Vzorec nejprve získá aktuální čas. Pokud se jedná o pracovní den (1–5) a během pracovní doby (8 do 18:00 do 6:00), je velikost cílového fondu nastavená na 20 uzlů. V opačném případě je nastavená na 10 uzlů.

$curTime = time();
$workHours = $curTime.hour >= 8 && $curTime.hour < 18;
$isWeekday = $curTime.weekday >= 1 && $curTime.weekday <= 5;
$isWorkingWeekdayHour = $workHours && $isWeekday;
$TargetDedicatedNodes = $isWorkingWeekdayHour ? 20:10;
$NodeDeallocationOption = taskcompletion;

$curTime můžete upravit tak, aby odráželo vaše místní časové pásmo přidáním time() k produktu TimeZoneInterval_Hour a posunu UTC. Například použijte $curTime = time() + (-6 * TimeInterval_Hour); pro horskou letní dobu (MDT). Nezapomeňte, že posun je potřeba upravit na začátku a na konci letního času, pokud je to možné.

Příklad 2: Úprava založená na úkolech

V tomto příkladu jazyka C# se velikost fondu upraví na základě počtu úkolů ve frontě. Komentáře i konce řádků jsou součástí řetězců vzorců.

// Get pending tasks for the past 15 minutes.
$samples = $PendingTasks.GetSamplePercent(TimeInterval_Minute * 15);
// If you have fewer than 70 percent data points, use the last sample point,
// otherwise use the maximum of last sample point and the history average.
$tasks = $samples < 70 ? max(0,$PendingTasks.GetSample(1)) : max( $PendingTasks.GetSample(1), avg($PendingTasks.GetSample(TimeInterval_Minute * 15)));
// If number of pending tasks is not 0, set targetVM to pending tasks, otherwise
// half of current dedicated.
$targetVMs = $tasks > 0? $tasks:max(0, $TargetDedicatedNodes/2);
// The pool size is capped at 20, if target VM value is more than that, set it
// to 20. This value should be adjusted according to your use case.
$TargetDedicatedNodes = max(0, min($targetVMs, 20));
// Set node deallocation mode - let running tasks finish before removing a node
$NodeDeallocationOption = taskcompletion;

Příklad 3: Účtování paralelních úloh

Tento příklad jazyka C# upraví velikost fondu na základě počtu úkolů. Tento vzorec také bere v úvahu hodnotu TaskSlotsPerNode nastavenou pro fond. Tento přístup je užitečný v situacích, kdy bylo ve fondu povolené paralelní provádění úkolů.

// Determine whether 70 percent of the samples have been recorded in the past
// 15 minutes; if not, use last sample
$samples = $ActiveTasks.GetSamplePercent(TimeInterval_Minute * 15);
$tasks = $samples < 70 ? max(0,$ActiveTasks.GetSample(1)) : max( $ActiveTasks.GetSample(1),avg($ActiveTasks.GetSample(TimeInterval_Minute * 15)));
// Set the number of nodes to add to one-fourth the number of active tasks
// (the TaskSlotsPerNode property on this pool is set to 4, adjust
// this number for your use case)
$cores = $TargetDedicatedNodes * 4;
$extraVMs = (($tasks - $cores) + 3) / 4;
$targetVMs = ($TargetDedicatedNodes + $extraVMs);
// Attempt to grow the number of compute nodes to match the number of active
// tasks, with a maximum of 3
$TargetDedicatedNodes = max(0,min($targetVMs,3));
// Keep the nodes active until the tasks finish
$NodeDeallocationOption = taskcompletion;

Příklad 4: Nastavení počáteční velikosti fondu

Tento příklad ukazuje příklad jazyka C# se vzorcem automatického škálování, který nastaví velikost fondu na zadaný počet uzlů pro počáteční časové období. Potom upraví velikost fondu na základě počtu spuštěných a aktivních úloh.

Konkrétně tento vzorec dělá toto:

  • Nastaví počáteční velikost fondu na čtyři uzly.
  • Neupravuje velikost fondu během prvních 10 minut životního cyklu fondu.
  • Po 10 minutách získá maximální hodnotu počtu spuštěných a aktivních úkolů během posledních 60 minut.
    • Pokud jsou obě hodnoty 0, což znamená, že za posledních 60 minut nebyly spuštěny nebo aktivní žádné úkoly, je velikost fondu nastavená na 0.
    • Pokud je hodnota větší než nula, neprovedou se žádné změny.
string now = DateTime.UtcNow.ToString("r");
string formula = string.Format(@"
    $TargetDedicatedNodes = {1};
    lifespan         = time() - time(""{0}"");
    span             = TimeInterval_Minute * 60;
    startup          = TimeInterval_Minute * 10;
    ratio            = 50;

    $TargetDedicatedNodes = (lifespan > startup ? (max($RunningTasks.GetSample(span, ratio), $ActiveTasks.GetSample(span, ratio)) == 0 ? 0 : $TargetDedicatedNodes) : {1});
    ", now, 4);

Další kroky

  • Zjistěte, jak na výpočetních uzlech ve vašem fondu provádět více úloh současně. Spolu s automatickým škálováním to může pomoct snížit dobu trvání úlohy u některých úloh, což vám ušetří peníze.
  • Zjistěte, jak efektivně dotazovat službu Azure Batch.