Flaxning i autoskalning
I den här artikeln beskrivs flaxning i autoskalning och hur du undviker det.
Flapping refererar till ett loopvillkor som orsakar en serie motsatta skalningshändelser. Flaxning sker när en skalningshändelse utlöser den motsatta skalningshändelsen.
Autoskalning utvärderar en väntande inskalningsåtgärd för att se om det skulle orsaka flaxning. Om det kan uppstå flaxning kan autoskalning hoppa över skalningsåtgärden och omvärdera vid nästa körning, eller så kan autoskalning skalas med mindre än det angivna antalet resursinstanser. Utvärderingsprocessen för autoskalning sker varje gång autoskalningsmotorn körs, vilket är var 30:e till 60:e sekund, beroende på resurstyp.
För att säkerställa tillräckliga resurser sker ingen kontroll av eventuell utskalning för utskalningshändelser. Autoskalning skjuter bara upp en inskalningshändelse för att undvika flaxning.
Anta till exempel följande regler:
- Skala ut och öka med 1 instans när den genomsnittliga CPU-användningen är över 50 %.
- Skala för att minska antalet instanser med 1 instans när den genomsnittliga CPU-användningen är lägre än 30 %.
I tabellen nedan på T0, när användningen är på 56 %, utlöses en utskalningsåtgärd och resulterar i 56 % CPU-användning i två instanser. Det ger ett genomsnitt på 28 % för skalningsuppsättningen. Eftersom 28 % är mindre än inskalningströskeln bör autoskalning skalas in igen. Om du skalar in returneras skalningsuppsättningen till 56 % CPU-användning, vilket utlöser en utskalningsåtgärd.
Tid | Antal instanser | CPU% | CPU% per instans | Skalningshändelse | Resulterande instansantal |
---|---|---|---|---|---|
T0 | 1 | 56% | 56% | Skala ut | 2 |
T1 | 2 | 56% | 28% | Skala in | 1 |
T2 | 1 | 56% | 56% | Skala ut | 2 |
T3 | 2 | 56% | 28% | Skala in | 1 |
Om det lämnas okontrollerat skulle det finnas en pågående serie skalningshändelser. I det här fallet skjuter dock autoskalningsmotorn upp inskalningshändelsen vid T1 och omvärderar under nästa autoskalningskörning. Inskalningen sker bara när den genomsnittliga CPU-användningen är under 30 %.
Flaxning orsakas ofta av:
- Små eller inga marginaler mellan tröskelvärden
- Skalning med mer än en instans
- Skala in och ut med olika mått
Små eller inga marginaler mellan tröskelvärden
För att undvika flaxning bör du ha tillräckliga marginaler mellan skalningströsklarna.
Följande regler där det inte finns någon marginal mellan tröskelvärden kan till exempel orsaka flaxning.
- Skala ut när trådantal >=600
- Skala in när trådantal < 600
Tabellen nedan visar ett potentiellt resultat av dessa autoskalningsregler:
Tid | Antal instanser | Antal trådar | Antal trådar per instans | Skalningshändelse | Resulterande instansantal |
---|---|---|---|---|---|
T0 | 2 | 1250 | 625 | Skala ut | 3 |
T1 | 3 | 1250 | 417 | Skala in | 2 |
- Vid tidpunkten för T0 finns det två instanser som hanterar 1250 trådar eller 625 steg per instans. Autoskalning skalas ut till tre instanser.
- Efter utskalningen, vid T1, har vi samma 1250 trådar, men med tre instanser är det bara 417 trådar per instans. En inskalningshändelse utlöses.
- Innan du skalar in utvärderar autoskalning vad som skulle hända om inskalningshändelsen inträffar. I det här exemplet 1250 /2 = 625, det vill säga 625 trådar per instans. Autoskalning måste skalas ut omedelbart igen när den har skalats in. Om den skalades ut igen skulle processen upprepas, vilket leder till flaxande loop.
- För att undvika den här situationen skalas inte autoskalning in. Autoskalning hoppar över den aktuella skalningshändelsen och omvärderar regeln i nästa körningscykel.
I det här fallet ser det ut som att autoskalning inte fungerar eftersom ingen skalningshändelse äger rum. Kontrollera fliken Körningshistorik på inställningssidan för autoskalning för att se om det finns någon flaxning.
Om du anger en tillräcklig marginal mellan tröskelvärden undviker du ovanstående scenario. Ett exempel:
- Skala ut när trådantal >=600
- Skala in när trådantal < 400
Om antalet inskalningstrådar är 400 måste det totala antalet trådar sjunka till under 1 200 innan en skalningshändelse äger rum. Se tabellen nedan.
Tid | Antal instanser | Antal trådar | Antal trådar per instans | Skalningshändelse | Resulterande instansantal |
---|---|---|---|---|---|
T0 | 2 | 1250 | 625 | Skala ut | 3 |
T1 | 3 | 1250 | 417 | ingen skalningshändelse | 3 |
T2 | 3 | 1180 | 394 | skala in | 2 |
T3 | 3 | 1180 | 590 | ingen skalningshändelse | 2 |
Skalning med mer än en instans
För att undvika flaxning när du skalar in eller ut med mer än en instans kan autoskalning skalas med mindre än det antal instanser som anges i regeln.
Följande regler kan till exempel orsaka flaxning:
- Skala ut med 20 när antalet >förfrågningar =200 per instans.
- ELLER när CPU > 70 % per instans.
- Skala in med 10 när antalet <förfrågningar =50 per instans.
Tabellen nedan visar ett potentiellt resultat av dessa autoskalningsregler:
Tid | Antal instanser | Processor | Antal förfrågningar | Skalningshändelse | Resulterande instanser | Kommentarer |
---|---|---|---|---|---|---|
T0 | 30 | 65 % | 3 000 eller 100 per instans. | Ingen skalningshändelse | 30 | |
T1 | 30 | 65 | 1500 | Skala in efter 3 instanser | 27 | Inskalning med 10 skulle orsaka en uppskattad CPU-ökning över 70 %, vilket leder till en utskalningshändelse. |
Vid tidpunkten för T0 körs appen med 30 instanser, ett totalt antal begäranden på 3 000 och en CPU-användning på 65 % per instans.
Vid T1, när antalet begäranden sjunker till 1 500 begäranden eller 50 begäranden per instans, försöker autoskalningen skalas in med 10 instanser till 20. Autoskalning uppskattar dock att CPU-belastningen för 20 instanser kommer att vara över 70 %, vilket orsakar en utskalningshändelse.
För att undvika flaxning beräknar autoskalningsmotorn cpu-användningen för instansantal över 20 tills den hittar ett instansantal där alla mått finns i de definierade tröskelvärdena:
- Behåll processorn under 70 %.
- Behåll att antalet begäranden per instans är över 50.
- Minska antalet instanser under 30.
I den här situationen kan autoskalning skalas in med 3, från 30 till 27 instanser för att uppfylla reglerna, även om regeln anger en minskning med 10. Ett loggmeddelande skrivs till aktivitetsloggen med en beskrivning som innehåller nedskalning sker med uppdaterat antal instanser för att undvika flaxning
Om autoskalning inte kan hitta ett lämpligt antal instanser hoppar den över skalan i händelse och omvärderar under nästa cykel.
Kommentar
Om autoskalningsmotorn upptäcker att flaxning kan inträffa till följd av skalning till målantalet instanser, kommer den också att försöka skala till ett lägre antal instanser mellan det aktuella antalet och målantalet. Om flaxning inte sker inom det här intervallet fortsätter autoskalningsåtgärden med det nya målet.
Loggfiler
Hitta flapping i aktivitetsloggen med följande fråga:
// 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
Nedan visas ett exempel på en aktivitetsloggpost för flaxning:
{
"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"
}
Nästa steg
Mer information om autoskalning finns i följande resurser: