Flapping in Autoscale
Tento článek popisuje flapping v automatickém škálování a popisuje, jak se mu vyhnout.
Flapping označuje stav smyčky, který způsobuje řadu protichůdných událostí škálování. K flappingu dochází, když událost škálování aktivuje událost opačného měřítka.
Automatické škálování vyhodnocuje čekající akci horizontálního navýšení kapacity a zjistí, jestli by způsobila flapping. V případech, kdy by mohlo dojít k flappingu, může automatické škálování akci škálování přeskočit a znovu zhodnotit při dalším spuštění, nebo automatické škálování může být škálováno 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 každých 30 až 60 sekund v závislosti na typu prostředku.
Aby se zajistily odpovídající prostředky, kontrola potenciálního flappingu nedochází u událostí škálování na více instancí. Automatické škálování pouze odloží událost horizontálního navýšení kapacity, aby se zabránilo flappingu.
Předpokládejme například následující pravidla:
- Horizontální navýšení kapacity o 1 instanci, když průměrné využití procesoru překročí 50 %.
- Škálování na snížení počtu instancí o 1 instanci, pokud je průměrné využití procesoru nižší než 30 %.
V tabulce níže v T0 se v případě, že využití dosáhne 56 %, aktivuje se akce horizontálního navýšení kapacity, která má za následek 56% využití procesoru ve 2 instancích. To dává v průměru 28 % pro škálovací sadu. Vzhledem k tomu, že 28 % je nižší než prahová hodnota škálování, mělo by automatické škálování vertikálně snížit kapacitu zpět. Horizontální navýšení kapacity vrátí škálovací sadu na 56 % využití procesoru, což aktivuje akci horizontálního navýšení kapacity.
Čas | Počet instancí | Procento využití procesoru | Procento využití procesoru na instanci | Událost škálování | Výsledný počet instancí |
---|---|---|---|---|---|
T0 | 1 | 56% | 56% | Horizontální navýšení kapacity | 2 |
T1 | 2 | 56% | 28% | Horizontální snížení kapacity | 1 |
T2 | 1 | 56% | 56% | Horizontální navýšení kapacity | 2 |
T3 | 2 | 56% | 28% | Horizontální snížení kapacity | 1 |
Pokud by to zůstalo nekontrolovatelné, došlo by k probíhající řadě událostí škálování. V této situaci však modul automatického škálování odloží událost horizontálního navýšení kapacity na T1 a při dalším spuštění automatického škálování znovu vyhodnocí. Ke škálování dojde pouze v případě, že 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 než jedné instance
- Horizontální navýšení a snížení kapacity s využitím různých metrik
Malé nebo žádné okraje mezi prahovými hodnotami
Abyste se vyhnuli flappingu, udržujte mezi prahovými hodnotami škálování odpovídající meze.
Například následující pravidla, kde mezi prahovými hodnotami není žádná hranice, způsobují flapping.
- Horizontální navýšení kapacity při počtu >vláken =600
- Škálování na více instancí 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 | Horizontální snížení kapacity | 2 |
- V čase T0 existují dvě instance zpracovávající 1250 vláken nebo 625 běhounů na instanci. Automatické škálování horizontálně navyšuje kapacitu na tři instance.
- Po horizontálním navýšení kapacity v T1 máme stejných 1250 vláken, ale se třemi instancemi, pouze 417 vláken na instanci. Aktivuje se událost škálování na více instancí.
- Před horizontálním navýšením kapacity automatické škálování vyhodnotí, co by se stalo, kdyby došlo k události horizontálního navýšení kapacity. V tomto příkladu 1250 / 2 = 625, tj. 625 vláken na instanci. Automatické škálování by po horizontálním navýšení kapacity muselo okamžitě znovu horizontálně snížit kapacitu. Pokud by se znovu škálovalo na více instancí, proces by se opakoval, což by vedlo k flappingové smyčce.
- Aby se této situaci zabránilo, automatické škálování neškáluje. Automatické škálování přeskočí aktuální událost škálování a znovu vyhodnocuje pravidlo v dalším cyklu provádění.
V tomto případě to vypadá, že automatické škálování nefunguje, protože nedochází k žádné události škálování. Podívejte se na kartu Historie spuštění na stránce nastavení automatického škálování a zjistěte, jestli nedošlo k nějakému flappingu.
Nastavením přiměřené hranice mezi prahovými hodnotami se výše uvedený scénář vyhne. Třeba
- Horizontální navýšení kapacity při počtu >vláken =600
- Škálování na více instancí při počtu < vláken 400
Pokud je počet vláken škálování na více instancí 400, musel by celkový počet vláken před událostí škálování klesnout pod 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 než jedné instance
Aby nedocházelo k flappingu při horizontálním snížení nebo snížení kapacity o více než jednu instanci, může automatické škálování škálovat o méně instancí, než je počet instancí zadaný v pravidle.
Například následující pravidla můžou způsobit flapping:
- Horizontální navýšení kapacity o 20, pokud počet >požadavků = 200 na instanci.
- NEBO v případě 70 % využití procesoru > na instanci.
- Horizontální snížení kapacity o 10, pokud počet <požadavků na instanci = 50.
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 | 1 500 | Horizontální snížení kapacity o 3 instance | 27 | Škálování na více instancí o 10 by způsobilo odhadované zvýšení využití procesoru nad 70 %, což by vedlo k události horizontálního navýšení kapacity. |
V době T0 aplikace běží s 30 instancemi, celkovým počtem požadavků 3000 a využitím procesoru 65 % na instanci.
Když v T1 klesne počet požadavků na 1500 požadavků nebo na 50 požadavků na instanci, automatické škálování se pokusí škálovat o 10 instancí na 20. Automatické škálování ale odhaduje, že zatížení procesoru pro 20 instancí bude vyšší než 70 %, což způsobí událost škálování na více instancí.
Aby nedošlo k flappingu, modul automatického škálování odhaduje využití procesoru pro počet instancí vyšších než 20, dokud nenajde počet instancí, ve kterém jsou všechny metriky v definovaných prahových hodnotách:
- Udržujte procesor pod 70 %.
- Udržujte počet požadavků na instanci vyšší než 50.
- Snižte počet instancí pod 30.
V takové situaci se automatické škálování může škálovat o 3, z 30 na 27 instancí, aby se splnila pravidla, i když pravidlo určuje snížení o 10. Do protokolu aktivit se zapíše zpráva protokolu s popisem vertikálního snížení kapacity s aktualizovaným počtem instancí, aby se zabránilo flappingu.
Pokud automatické škálování nemůže najít vhodný počet instancí, přeskočí škálování v události a během dalšího cyklu znovu vyhodnotí.
Poznámka
Pokud modul automatického škálování zjistí, že v důsledku škálování na cílový počet instancí může dojít k flappingu, pokusí se také škálovat na nižší počet instancí mezi aktuálním a cílovým počtem. Pokud v tomto rozsahu nedojde k flappingu, bude automatické škálování 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": "ffd31c67-1438-47a5-bee4-1e3a102cf1c2",
"eventProperties":
"{"Description":"Scale down will occur with updated instance count to avoid flapping.
Resource: '/subscriptions/d1234567-9876-a1b2-a2b1-123a567b9f8767/ 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/d1234567-9876-a1b2-a2b1-123a567b9f8767/resourcegroups/ed-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/d1234567-9876-a1b2-a2b1-123a567b9f8767/resourceGroups/ed-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/d1234567-9876-a1b2-a2b1-123a567b9f8767/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/d1234567-9876-a1b2-a2b1-123a567b9f8767/resourceGroups/ed-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/d1234567-9876-a1b2-a2b1-123a567b9f8767/resourceGroups/ed-rg-001/providers/Microsoft.Web/sites/ScaleableWebApp1","MetricType":"MDM","Dimensions":[],"DividePerInstance":true},"ScaleAction":{"Direction":"Decrease","Type":"ChangeCount","Value":"5","Cooldown":"PT1M"}}]}}",
"eventDataId": "b23ae911-55d0-4881-8684-fc74227b2ddb",
"eventSubmissionTimestamp": "2022-09-13T07:20:41.1589076Z",
"resource": "scaleableappserviceplan",
"resourceGroup": "ED-RG-001",
"resourceProviderValue": "MICROSOFT.WEB",
"subscriptionId": "D1234567-9876-A1B2-A2B1-123A567B9F876",
"activityStatusValue": "Succeeded"
}
Další kroky
Další informace o automatickém škálování najdete v následujících zdrojích informací:
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro