Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 Batch dynamicky přidává uzly do fondu, když se zvyšují požadavky na úkoly a odebírá výpočetní uzly, když 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ředplatitelského uživatele, pak se váš účet podílí na hlavní 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á váš vzorec k určení počtu cílových 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 variable1, a pak ji předejte funkci pro naplnění variable2.
$variable1 = function1($ServiceDefinedVariable);
$variable2 = function2($OtherServiceDefinedVariable, $variable1);
Tyto příkazy zahrňte do vzorce automatického škálování, abyste dosáhli cílového počtu 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 jednou VM. Metrika $PendingTasks definuje počet spuštěných nebo ve frontě úkolů. Vzorec najde průměrný počet čekajících úkolů za posledních 15 minut 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 stanou volnými a automatická škálovací formule zmenší velikost fondu.
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(TimeInterval_Minute * 15);
pendingTaskSamples = pendingTaskSamplePercent < 70 ? startingNumberOfVMs : avg($PendingTasks.GetSample(TimeInterval_Minute * 15));
$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, zároveň se umístí do interní fronty, kterou služba Batch používá 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čne s 25 spotovými uzly. Pokaždé, když je spotový uzel zrušený, nahradí se vyhrazeným uzlem. Stejně jako v prvním příkladu, proměnná maxNumberofVMs brání fondu překročit 25 virtuálních počítačů. Tento příklad je užitečný pro využívání Spot virtuálních počítačů a zároveň zajišťuje, že během celé životnosti fondu dojde pouze k omezené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 označeny znakem dolaru ($). U uživatelem definovaných proměnných je znak dolaru volitelný.
Následující tabulky zobrazují proměnné pro čtení a zápis a pouze pro č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. Je stanoven jako cíl, protože fond nemusí vždycky 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. Je stanoven jako cíl, protože fond nemusí vždycky 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. Pool také nemusí dosáhnout cíle, pokud cíl překročí kvótu uzlu účtu Batch nebo kvótu jader. Další informace o spotových výpočetních uzlech najdete v tématu Použití Spot VM s Batch. |
| $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í úloh: Čeká, až se aktuálně spuštěné úlohy dokončí, a pak odebere uzel z fondu. Tato možnost vám umožní vyhnout se přerušení a opětovnému zařazení úkolů do fronty, čímž by se ztrácela veškerá práce, kterou úkol již vykonal. - retaineddata: Před odebráním uzlu z fondu čeká na vyčištění všech místních dat uchovaný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 spojené s uvolněním pracovních ú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ů, aniž by byly k dispozici uzly pro spuštění úloh pro uvolnění.
Návod
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 (využití CPU v procentech) | Průměrné procento využití procesoru |
| $AktivníÚkoly | Počet úkolů, které jsou připravené ke spuštění, ale zatím se nespouštějí. Zahrnuje to 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. |
| $ČekajícíÚkoly | Součet $ActiveTasks a $RunningTasks. |
| $ÚspěšnéÚkoly | Počet úkolů, které byly úspěšně dokončeny. |
| $NeúspěšnéÚkoly | Počet úkolů, které selhaly. |
| $PočetÚkolůNaUzlu | 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. |
| $AktuálníVyhrazenéUzel | Aktuální počet vyhrazených výpočetních uzlů |
| $AktuálníNízkoprioritníUzly | Aktuální počet spotových výpočetních uzlů, včetně všech uzlů, které byly odsunuty. |
| $UsableNodeCount | Počet využitelných výpočetních uzlů. |
| $PočetPředemZrušenýchUzlů | Počet uzlů v bazénu, které jsou ve stavu přerušení. |
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:
- dvojitý
- doubleVec
- doubleVecList
- řetězec
- Časové razítko, složená struktura, která obsahuje následující členy:
- rok
- měsíc (1–12)
- den (1-31)
- pracovní den (ve formátu čísla, například 1 pro pondělí)
- hodina (ve 24hodinovém formátu, například 13 znamená 13:00)
- minuta (00–59)
- vteřina (00–59)
- časový interval
- ČasovýInterval_Nula
- TimeInterval_100ns (časový interval 100 ns)
- ČasovýInterval_Mikrosekunda
- Časový_interval_milisekunda
- Časový_Interval_Sekunda
- ČasovýInterval_Minuta
- Časový_Interval_Hodina
- ČasovýInterval_Den
- ČasovýInterval_Týden
- Časový interval - rok
Operace
Tyto operace jsou povolené u typů uvedených v předchozí části.
| Operace | Podporované operátory | Typ výsledku |
|---|---|---|
| double – operátor double | +, -, *, / | dvojitý |
| double operator časový interval | * | časový interval |
| doubleVec – operátor double | +, -, *, / | doubleVec |
| doubleVec operátor: doubleVec | +, -, *, / | doubleVec |
| timeinterval – operátor double | *, / | časový interval |
| timeinterval operátor timeinterval | +, - | časový interval |
| časový interval operátor časové razítko | + | časové razítko |
| časové razítko operátor časový interval | + | časové razítko |
| časové razítko operátor časové razítko | - | časový interval |
| operátor double | -, ! | dvojitý |
| operátor timeinterval | - | časový interval |
| double – operátor double | <, <=, ==, =, >>, != | dvojitý |
| řetězec operátor řetězec | <, <=, ==, =, >>, != | dvojitý |
| časové razítko operátor časové razítko | <, <=, ==, =, >>, != | dvojitý |
| timeinterval operátor timeinterval | <, <=, ==, =, >>, != | dvojitý |
| double – operátor double | &&, || | dvojitý |
Testování double pomocí ternárního operátoru (double ? statement1 : statement2), má za následek nenulovou hodnotu true a nulu jako false.
Funkce
Tyto předdefinované funkce můžete použít při definování vzorce automatického škálování.
| Funkce | Návratový typ | Popis |
|---|---|---|
| avg(doubleVecList) | dvojitý | Vrátí průměrnou hodnotu pro všechny hodnoty v doubleVecList. |
| ceil(double) | dvojitý | Vrátí nejmenší celočíselnou hodnotu, která není menší než hodnota double. |
| ceil(doubleVecList) | doubleVec | Vrátí komponentově ceil ze seznamu doubleVecList. |
| zaokrouhlit dolů(dvojitý) | dvojitý | Vrátí největší celočíselnou hodnotu, která není větší než hodnota double. |
| floor(doubleVecList) | doubleVec | Vrátí komponentově floor ze seznamu doubleVecList. |
| len(doubleVecList) | dvojitý | Vrátí délku vektoru vytvořeného z doubleVecList. |
| lg(double) | dvojitý | Vrátí základ protokolu 2 dvojité hodnoty. |
| lg(doubleVecList) | doubleVec | Vrátí komponentově lg ze seznamu doubleVecList. |
| ln(double) | dvojitý | Vrátí přirozený logaritmus dvojité hodnoty. |
| ln(doubleVecList) | doubleVec | Vrátí komponentově ln ze seznamu doubleVecList. |
| log(double) | dvojitý | Vrátí logaritmus základu 10 čísla typu double. |
| log(doubleVecList) | doubleVec | Vrátí komponentově log ze seznamu doubleVecList. |
| max(doubleVecList) | dvojitý | Vrátí maximální hodnotu v doubleVecList. |
| min(doubleVecList) | dvojitý | Vrátí minimální hodnotu v doubleVecList. |
| norm(doubleVecList) | dvojitý | Vrátí dvounormu vektoru vytvořeného z doubleVecList. |
| percentil(doubleVec v; double p) | dvojitý | Vrátí percentilový prvek vektoru v. |
| rand() | dvojitý | Vrátí náhodnou hodnotu mezi 0,0 a 1,0. |
| range(doubleVecList) | dvojitý | Vrátí rozdíl mezi minimálními a maximálními hodnotami v doubleVecList. |
| zaokrouhlit(double) | dvojitý | Vrátí nejbližší celočíselnou hodnotu k hodnotě typu double (ve formátu s plovoucí desetinnou čárkou), přičemž případy blízké polovině zaokrouhlí směrem od nuly. |
| round(doubleVecList) | doubleVec | Vrátí komponentově round ze seznamu doubleVecList. |
| std(doubleVecList) | dvojitý | Vrátí výběrovou směrodatnou odchylku hodnot v doubleVecList. |
| zastavit() | Zastaví vyhodnocení výrazu automatického škálování. | |
| sum(doubleVecList) | dvojitý | Vrátí součet všech součástí doubleVecList. |
| čas(řetězec datumČas="") | č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) | dvojitý | 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 double a doubleVec. 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], pak je volání avg(v) ekvivalentní s voláním 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. Upravením cílového počtu vyhrazených uzlů v poolu na základě získaných a vyhodnocených metrik. 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 - Počet předběžně přidělených uzlů - Počet použitelných uzlů $UsableNodeCount Tyto proměnné definované službou jsou užitečné pro provádění úprav na základě využití prostředků uzlu: - $CPUPercent |
| Ú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 - $NedokončenéÚkoly - $ÚspěšnéÚkoly - $FailedTasks |
Získání ukázkových dat
Základní operací vzorce automatického škálování je získat data metrik úkolů a prostředků (vzorky) a na jejich základě upravit velikost fondu. 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í působí na vzorky metrických dat poskytovaných službou Batch. Vzorec zvětší nebo zmenší fond výpočetních uzlů 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.Vzorek představuje 30 sekund metrikových dat. Jinými slovy, vzorky se získávají každých 30 sekund. Jak je ale uvedeno níže, mezi tím, kdy je vzorek odebrán, a kdy je dostupný pro vzorec, 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 $CPUPercent, by se GetSample(1) nemělo používat, protože není možné zjistit, kdy byl vzorek shromážděn. Může to být nedávné nebo kvůli systémovým problémům může být mnohem starší. V takových případech je lepší použít časový interval, jak je uvedeno níže.- 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. Například $CPUPercent.GetSample(TimeInterval_Minute * 10) by vrátil 20 vzorků, pokud jsou v historii CPUPercent přítomny všechny vzorky za posledních 10 minut. 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. |
| Počet() | 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ž je samplePercent předána metodě GetSample() nebo je metoda GetSamplePercent() volána, 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 vaši autoskalovací formuli.
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 vzorků, které může formule automatického škálování použít 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 pro automatické škálování zvětšují a zmenšují fondy tím, že přidávají nebo odebírají uzly. 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 dynamicky upravuje velikost poolů na základě rozsahu 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 selhání vyhodnocení vzorce, služba Batch nařídí zastavení dalšího vyhodnocování vzorce, pokud není k dispozici stanovené procento vzorků. 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 dostupnosti vzorku může docházet ke zpoždění, měli byste vždy zadat časový rozsah se začátkem zpětného časového období, 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 GetSample() k nastavení 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ě službu Batch požádá: "Poskytněte mi poslední vzorek, který jste měli, ať už jste jej načetli před jakkoliv dlouhou dobou." Vzhledem k tomu, že jde pouze o jediný vzorek a může být staršího data, nemusí reprezentovat širší pohled na nedávný stav ú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á.
Napsat vzorec pro automatické š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 $totalDedicatedNodes, naplněnou 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 nejsou jejich úkoly dokončeny.
$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:
- CloudPool.AutoScaleEvaluationInterval ( Batch .NET)
- autoScaleEvaluationInterval (REST API)
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í momentálně není navrženo, aby reagovalo na změny za méně než minutu, ale má za úkol postupně upravit velikost vašeho fondu během provozu úlohy.
Vytvořte fond s automatickým škálováním pomocí Batch SDKs
Automatické škálování fondu lze nakonfigurovat pomocí libovolné z Batch SDK, Batch REST API, rutin Batch PowerShellu a Batch CLI. V této části vidíte příklady pro .NET i Python.
.SÍŤ
Pokud chcete vytvořit fond s povoleným automatickým škálováním v .NET, postupujte takto:
- Vytvořte fond pomocí BatchClient.PoolOperations.CreatePool.
- Nastavte Vlastnost CloudPool.AutoScaleEnabled na hodnotu true.
- Nastavte vlastnost CloudPool.AutoScaleFormula vzorcem automatického škálování.
- (Volitelné) Nastavte vlastnost CloudPool.AutoScaleEvaluationInterval (výchozí hodnota je 15 minut).
- 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 v ostatní dny 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 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.
Návod
Další příklady použití sady .NET SDK najdete v úložišti Rychlý start služby Batch .NET na GitHubu.
Krajta
Vytvoření fondu s povoleným automatickým škálováním pomocí sady Python SDK:
- Vytvořte fond a zadejte jeho konfiguraci.
- Přidejte pool do klienta služby.
- 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)
Návod
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:
- BatchClient.PoolOperations.EnableAutoScaleAsync (Batch .NET)
- Povolení automatického škálování ve fondu (REST API)
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é automatické škálování na myexistingpool, jeho vzorec automatického škálování bude nahrazen obsahem myNewFormula.
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ž má aktivované automatické škálování v prostředí .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 na pool. 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:
BatchClient.PoolOperations.EvaluateAutoScale nebo EvaluateAutoScaleAsync
Tyto metody Batch .NET vyžadují ID existujícího fondu a řetězec obsahující vzorec automatického škálování k vyhodnocení.
Vyhodnocení vzorce automatického škálování
V tomto požadavku REST API zadejte ID fondu v identifikátoru URI a vzorec automatického škálování v elementu autoScaleFormula textu požadavku. Odpověď operace obsahuje všechny informace o chybách, které můžou souviset se vzorcem.
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, jak služba Batch vyhodnocuje váš vzorec automatického škálování. Uděláte to tak, že si získáte (nebo aktualizujete) odkaz na fond a zkontrolujete vlastnosti posledního spuštění automatického škálování.
V Batch .NET má vlastnost CloudPool.AutoScaleRun několik atributů, které poskytují informace o nejnovějším automatickém škálování, které bylo provedeno ve fondu:
V rozhraní REST API informace o fondu 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 generuje tuto událost, aby zaznamenala každý případ vyhodnocení a provedení vzorce pro automatické š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 bazénu na základě dne v týdnu a denní doby. 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:00 do 18:00), je velikost cílového poolu 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 vašem fondu povoleno 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 přizpůsobí 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 clusteru 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.