Flapping in Autoscale
Tento článek popisuje flapping v automatickém škálování a jak se tomu vyhnout.
Flapping označuje podmínku smyčky, která způsobuje řadu protichůdných událostí škálování. K flappingu dojde, když událost škálování aktivuje opačnou událost škálování.
Automatické škálování vyhodnotí čekající akci horizontálního snížení kapacity a zjistí, jestli by to způsobilo flapping. V případech, kdy může dojít k flappingu, může automatické škálování přeskočit akci škálování a znovu vyhodnotit při dalším spuštění nebo automatické škálování může škálovat o méně než zadaný počet instancí prostředků. Proces vyhodnocení automatického škálování probíhá při každém spuštění modulu automatického škálování, což je v závislosti na typu prostředku každých 30 až 60 sekund.
Pokud chcete zajistit adekvátní prostředky, kontrola potenciálního prolnutí nedochází u událostí horizontálního navýšení kapacity. Automatické škálování odloží pouze událost horizontálního snížení kapacity, aby se zabránilo flappingu.
Předpokládejme například následující pravidla:
- Vertikální navýšení kapacity o 1 instanci, když průměrné využití procesoru překročí 50 %.
- Škálování snížení počtu instancí o 1 instanci, pokud je průměrné využití procesoru nižší než 30 %.
V tabulce níže v tabulce T0 se při využití na 56 % aktivuje akce horizontálního navýšení kapacity a výsledkem je 56% využití procesoru napříč 2 instancemi. To poskytuje průměr 28 % pro škálovací sadu. Vzhledem k tomu, že 28 % je menší než prahová hodnota horizontálního snížení kapacity, automatické škálování by se mělo škálovat zpět. Škálování by vrátilo škálovací sadu na 56% využití procesoru, které aktivuje akci horizontálního navýšení kapacity.
Čas | Počet instancí | CPU % | Cpu % na instanci | Událost škálování | Výsledný počet instancí |
---|---|---|---|---|---|
T0 | 0 | 56% | 56% | Horizontální navýšení kapacity | 2 |
T1 | 2 | 56% | 28 % | Škálovat na méně instancí | 0 |
T2 | 0 | 56% | 56% | Horizontální navýšení kapacity | 2 |
T3 | 2 | 56% | 28 % | Škálovat na méně instancí | 0 |
Pokud by zůstal nekontrolovatelný, bylo by stále k dispozici řada událostí škálování. V této situaci ale modul automatického škálování odloží událost škálování na T1 a během dalšího spuštění automatického škálování znovu vyhodnocuje. Škálování na více instancí proběhne pouze v poté, co průměrné využití procesoru klesne pod 30 %.
Flapping je často způsoben:
- Malé nebo žádné okraje mezi prahovými hodnotami
- Škálování podle více instancí
- Horizontální navýšení nebo snížení kapacity s využitím různých metrik
Malé nebo žádné okraje mezi prahovými hodnotami
Abyste se vyhnuli flappingu, zachovejte odpovídající okraje mezi prahovými hodnotami škálování.
Například následující pravidla, u kterých mezi prahovými hodnotami není žádný okraj, může dojít k prolnutí.
- Horizontální navýšení kapacity při počtu >vláken =600
- Škálování při počtu < vláken 600
Následující tabulka ukazuje potenciální výsledek těchto pravidel automatického škálování:
Čas | Počet instancí | Počet vláken | Počet vláken na instanci | Událost škálování | Výsledný počet instancí |
---|---|---|---|---|---|
T0 | 2 | 1250 | 625 | Horizontální navýšení kapacity | 3 |
T1 | 3 | 1250 | 417 | Škálovat na méně instancí | 2 |
- V době T0 existují dvě instance zpracovávající 1250 vláken nebo 625 treadů na instanci. Automatické škálování horizontálně navyšuje kapacitu na tři instance.
- Po horizontálním navýšení kapacity na úrovni T1 máme stejná 1250 vláken, ale se třemi instancemi, pouze 417 vláken na instanci. Aktivuje se událost horizontálního snížení kapacity.
- Před horizontálním škálováním automatické škálování vyhodnotí, co by se stalo, když dojde k události horizontálního snížení kapacity. V tomto příkladu 1250 / 2 = 625, to znamená 625 vláken na instanci. Automatické škálování by po horizontálním navýšení kapacity muselo okamžitě horizontálně snížit kapacitu. Pokud se znovu škáluje na více instancí, proces by se opakoval, což by vedlo k výklopné smyčce.
- Aby se této situaci zabránilo, automatické škálování se nes škáluje. Automatické škálování přeskočí aktuální událost škálování a v dalším cyklu provádění znovu vyhodnocuje pravidlo.
V tomto případě to vypadá, že automatické škálování nefunguje, protože neprobíhá žádná událost škálování. Na stránce nastavení automatického škálování zkontrolujte kartu Historie spuštění a zkontrolujte, jestli nedošlo k nějakému flappingu.
Nastavení přiměřeného okraje mezi prahovými hodnotami zabrání výše uvedenému scénáři. Příklad:
- Horizontální navýšení kapacity při počtu >vláken =600
- Škálování při počtu < vláken 400
Pokud je počet vláken horizontálního snížení kapacity 400, celkový počet vláken by musel před provedením události škálování snížit na nižší než 1200. Podívejte se na následující tabulku.
Čas | Počet instancí | Počet vláken | Počet vláken na instanci | Událost škálování | Výsledný počet instancí |
---|---|---|---|---|---|
T0 | 2 | 1250 | 625 | Horizontální navýšení kapacity | 3 |
T1 | 3 | 1250 | 417 | žádná událost škálování | 3 |
T2 | 3 | 1180 | 394 | horizontální snížení kapacity | 2 |
T3 | 3 | 1180 | 590 | žádná událost škálování | 2 |
Škálování podle více instancí
Pokud se chcete vyhnout flappingu při horizontálním navýšení nebo snížení kapacity o více než jednu instanci, může se automatické škálování škálovat o méně než počet instancí zadaných v pravidle.
Například následující pravidla můžou způsobit flapping:
- Horizontální navýšení kapacity o 20, když počet >požadavků =200 na instanci.
- NEBO, když procesor > 70 % na instanci.
- Pokud se <počet požadavků =50 na instanci škáluje o 10.
Následující tabulka ukazuje potenciální výsledek těchto pravidel automatického škálování:
Čas | Počet instancí | Procesor | Počet požadavků | Událost škálování | Výsledné instance | Komentáře |
---|---|---|---|---|---|---|
T0 | 30 | 65 % | 3000 nebo 100 na instanci. | Žádná událost škálování | 30 | |
T1 | 30 | 65 | 1500 | Škálování podle 3 instancí | 27 | Vertikální navýšení kapacity o 10 by způsobilo odhadovaný nárůst procesoru nad 70 %, což vede k události horizontálního navýšení kapacity. |
V době T0 běží aplikace s 30 instancemi, celkovým počtem požadavků 3000 a využitím procesoru 65 % na instanci.
Pokud počet požadavků v T1 klesne na 1500 požadavků nebo 50 požadavků na instanci, automatické škálování se pokusí škálovat o 10 instancí na 20. Automatické škálování však odhaduje, že zatížení procesoru pro 20 instancí bude vyšší než 70 %, což způsobí událost horizontálního navýšení kapacity.
Aby se zabránilo flappingu, modul automatického škálování odhadne využití procesoru pro instance vyšší než 20, dokud nenajde počet instancí, ve kterém se všechny metriky nacházejí v definovaných prahových hodnotách:
- Ponechte procesor nižší než 70 %.
- Udržujte počet požadavků na instanci vyšší než 50.
- Snižte počet instancí pod 30.
V takovém případě se automatické škálování může škálovat o 3, od 30 do 27 instancí, aby vyhovovalo pravidlům, i když pravidlo určuje snížení o 10. Do protokolu aktivit se zapíše zpráva protokolu s popisem, který zahrnuje vertikální snížení kapacity, dojde s aktualizovaným počtem instancí, aby se zabránilo flappingu.
Pokud automatické škálování nedokáže najít vhodný počet instancí, škálování v případě potřeby přeskočí a během dalšího cyklu znovu vyhodnocuje.
Poznámka:
Pokud modul automatického škálování zjistí, že k flappingu může dojít v důsledku škálování na cílový počet instancí, pokusí se také škálovat na nižší počet instancí mezi aktuálním počtem a cílovým počtem. Pokud v tomto rozsahu nedochází k flappingu, automatické škálování bude pokračovat v operaci škálování s novým cílem.
Soubory protokolu
V protokolu aktivit vyhledejte flapping pomocí následujícího dotazu:
// Activity log, CategoryValue: Autoscale
// Lists latest Autoscale operations from the activity log, with OperationNameValue =="Microsoft.Insights/AutoscaleSettings/Flapping/Action
AzureActivity
|where CategoryValue =="Autoscale" and OperationNameValue =="Microsoft.Insights/AutoscaleSettings/Flapping/Action"
|sort by TimeGenerated desc
Níže je příklad záznamu protokolu aktivit pro flapping:
{
"eventCategory": "Autoscale",
"eventName": "FlappingOccurred",
"operationId": "1111bbbb-22cc-dddd-ee33-ffffff444444",
"eventProperties":
"{"Description":"Scale down will occur with updated instance count to avoid flapping.
Resource: '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/ed-rg-001/providers/Microsoft.Web/serverFarms/ScaleableAppServicePlan'.
Current instance count: '6',
Intended new instance count: '1'.
Actual new instance count: '4'",
"ResourceName":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/rg-001/providers/Microsoft.Web/serverFarms/ScaleableAppServicePlan",
"OldInstancesCount":6,
"NewInstancesCount":4,
"ActiveAutoscaleProfile":{"Name":"Auto created scale condition",
"Capacity":{"Minimum":"1","Maximum":"30","Default":"1"},
"Rules":[{"MetricTrigger":{"Name":"Requests","Namespace":"microsoft.web/sites","Resource":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-001/providers/Microsoft.Web/sites/ScaleableWebApp1","ResourceLocation":"West Central US","TimeGrain":"PT1M","Statistic":"Average","TimeWindow":"PT1M","TimeAggregation":"Maximum","Operator":"GreaterThanOrEqual","Threshold":3.0,"Source":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ed-rg-001/providers/Microsoft.Web/sites/ScaleableWebApp1","MetricType":"MDM","Dimensions":[],"DividePerInstance":true},"ScaleAction":{"Direction":"Increase","Type":"ChangeCount","Value":"10","Cooldown":"PT1M"}},{"MetricTrigger":{"Name":"Requests","Namespace":"microsoft.web/sites","Resource":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-001/providers/Microsoft.Web/sites/ScaleableWebApp1","ResourceLocation":"West Central US","TimeGrain":"PT1M","Statistic":"Max","TimeWindow":"PT1M","TimeAggregation":"Maximum","Operator":"LessThan","Threshold":3.0,"Source":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ed-rg-001/providers/Microsoft.Web/sites/ScaleableWebApp1","MetricType":"MDM","Dimensions":[],"DividePerInstance":true},"ScaleAction":{"Direction":"Decrease","Type":"ChangeCount","Value":"5","Cooldown":"PT1M"}}]}}",
"eventDataId": "dddd3333-ee44-5555-66ff-777777aaaaaa",
"eventSubmissionTimestamp": "2022-09-13T07:20:41.1589076Z",
"resource": "scaleableappserviceplan",
"resourceGroup": "RG-001",
"resourceProviderValue": "MICROSOFT.WEB",
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"activityStatusValue": "Succeeded"
}
Další kroky
Další informace o automatickém škálování najdete v následujících zdrojích informací: