Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano przerywane działanie w automatycznym skalowaniu i jak go uniknąć.
Flapping odnosi się do warunku pętli, który powoduje serię przeciwnych zdarzeń skalowania. Flapping występuje, gdy zdarzenie zmiany skali wyzwala odwrotne zdarzenie zmiany skali.
Autoskalowanie ocenia oczekującą akcję zmniejszenia skali, aby sprawdzić, czy spowoduje to cykliczne wahania. W przypadkach, gdy może wystąpić flapping, autoskalowanie może pominąć akcję skalowania i ponownie ocenić sytuację przy następnym uruchomieniu, lub może przeskalować się o mniejszą niż określoną liczbę wystąpień zasobów. Proces oceny automatycznego skalowania ma miejsce za każdym razem, gdy silnik autoskalowania działa co 30 do 60 sekund, w zależności od typu zasobu.
Aby zapewnić odpowiednie zasoby, sprawdzanie potencjalnego flappingu nie występuje w przypadku zdarzeń skalowanych w poziomie. Autoskalowanie spowoduje tylko odroczenie zdarzenia skalowania w poziomie, aby uniknąć flappingu.
Załóżmy na przykład następujące reguły:
- Zwiększenie skali w poziomie o 1 instancję, gdy średnie użycie CPU przekracza 50%.
- Skalowanie w zmniejszaniu liczby wystąpień o 1, gdy średnie użycie CPU jest niższe niż 30%.
W poniższej tabeli, w momencie T0, gdy użycie wynosi 56%, zostaje uruchomiona akcja rozszerzająca skalę, co skutkuje użyciem procesora w 56% na dwóch instancjach. Daje to średnio 28% dla zestawu skal. Ponieważ 28% jest mniejsze niż próg skalowania w poziomie, skalowanie automatyczne powinno się skalować z powrotem do wewnątrz. Zmniejszenie zasobów powoduje osiągnięcie przez zestaw skalowania 56% użycia CPU, co wyzwala akcję skalowania poziomego.
Czas | Liczba wystąpień | Zużycie CPU (%) | Procent użycia procesora CPU na wystąpienie | Skalowanie zdarzenia | Wynikowa liczba wystąpień |
---|---|---|---|---|---|
T0 | 1 | 56% | 56% | Skalowanie w poziomie | 2 |
T1 | 2 | 56% | 28% | Skalowanie poziome | 1 |
T2 | 1 | 56% | 56% | Skalowanie w poziomie | 2 |
T3 | 2 | 56% | 28% | Skalowanie poziome | 1 |
Jeśli nie zostanie to kontrolowane, będzie ciągła seria zdarzeń na dużą skalę. Jednak w tej sytuacji mechanizm autoskalowania odroczy wydarzenie skalowania do wewnątrz w T1 i dokona ponownej oceny podczas następnego uruchomienia autoskalowania. Skalowanie w górę nastąpi tylko wtedy, gdy średnie użycie procesora będzie niższe niż 30%.
Zjawisko flappingu jest często spowodowane przez:
- Małe lub bez marginesów między progami
- Skalowanie według więcej niż jednego wystąpienia
- Skalowanie w górę i w dół przy użyciu różnych metryk
Małe lub bez marginesów między progami
Aby uniknąć flappingu, zachowaj odpowiednie marginesy między progami skalowania.
Na przykład, następujące reguły, w których brak marginesu między progami, mogą powodować niestabilność.
- Skalowanie poziome, gdy liczba wątków >=600
- Skalowanie w poziomie, gdy liczba < wątków: 600
W poniższej tabeli przedstawiono potencjalny wynik tych reguł skalowania automatycznego:
Czas | Liczba wystąpień | Liczba wątków | Liczba wątków na instancję | Skalowanie zdarzenia | Wynikowa liczba wystąpień |
---|---|---|---|---|---|
T0 | 2 | 1250 | 625 | Skalowanie w poziomie | 3 |
T1 | 3 | 1250 | 417 | Skalowanie poziome | 2 |
- W czasie T0 istnieją dwa wystąpienia obsługujące 1250 wątków, czyli 625 wątków na wystąpienie. Skalowanie automatyczne zwiększa liczbę instancji do trzech.
- Po skalowaniu w poziomie na T1 mamy te same 1250 wątków, ale z trzema instancjami, tylko 417 wątków na instancję. Zdarzenie skalowania w poziomie jest wyzwalane.
- Przed skalowaniem w dół, auto-skalowanie ocenia, jakie będą konsekwencje, gdyby wystąpiło zdarzenie skalowania w dół. W tym przykładzie 1250 / 2 = 625, czyli 625 wątków na każde wystąpienie. Autoskalowanie musiałoby natychmiast skalować poziomo ponownie po skalowaniu do wewnątrz. Jeśli proces zostanie ponownie rozbudowany, będzie się powtarzał, co prowadzi do pętli zmiany konfiguracji.
- Aby uniknąć tej sytuacji, funkcja autoskalowania nie wykonuje zmniejszania zasobów. Autoskalowanie pomija bieżące zdarzenie skalowania i ponownie zszacuje regułę w następnym cyklu wykonywania.
W takim przypadku wygląda na to, że autoskalowanie nie działa, ponieważ nie ma miejsca żadne zdarzenie skalowania. Sprawdź kartę Historia wykonywania na stronie ustawień autoskalowania, aby zobaczyć, czy występują jakieś fluktuacje.
Ustawienie odpowiedniego marginesu między progami pozwala uniknąć powyższego scenariusza. Na przykład:
- Skalowanie poziome, gdy liczba wątków >=600
- Skalowanie w poziomie, gdy liczba < wątków: 400
Jeśli liczba wątków podczas redukcji wynosi 400, łączna liczba wątków musiałaby spaść poniżej 1200, zanim nastąpiłoby skalowanie. Zapoznaj się z poniższą tabelą.
Czas | Liczba wystąpień | Liczba wątków | Liczba wątków na instancję | Skalowanie zdarzenia | Wynikowa liczba wystąpień |
---|---|---|---|---|---|
T0 | 2 | 1250 | 625 | Skalowanie w poziomie | 3 |
T1 | 3 | 1250 | 417 | brak zdarzenia skalowania | 3 |
T2 | 3 | 1180 | 394 | zmniejszanie skali | 2 |
T3 | 3 | 1180 | 590 | brak zdarzenia skalowania | 2 |
Skalowanie według więcej niż jednego wystąpienia
Aby uniknąć flappingu podczas skalowania w górę lub w dół przez więcej niż jedno wystąpienie, autoskalowanie może skalować się o mniej niż liczba wystąpień określonych w regule.
Na przykład następujące reguły mogą powodować zjawisko flapping:
- Skalowanie o 20 jednostek, gdy liczba >żądań wynosi co najmniej 200 na jedną instancję.
- LUB, gdy procesor > 70% na instancję.
- Skaluj w poziomie o 10, gdy liczba <żądań = 50 na wystąpienie.
W poniższej tabeli przedstawiono potencjalny wynik tych reguł skalowania automatycznego:
Czas | Liczba wystąpień | Procesor | Liczba żądań | Skalowanie zdarzenia | Wynikowe wystąpienia | Komentarze |
---|---|---|---|---|---|---|
T0 | 30 | 65% | 3000 albo 100 na przykład. | Brak zdarzenia skalowania | 30 | |
T1 | 30 | 65 | 1500 | Zredukuj liczbę instancji o 3 | 27 | Skalowanie do środka o 10 spowodowałoby szacowany wzrost wykorzystania CPU powyżej 70%, co prowadzi do zdarzenia skalowania na zewnątrz. |
W czasie T0 aplikacja działa z 30 wystąpieniami, łączną liczbą żądań wynoszącą 3000 i użyciem procesora CPU wynoszącym 65% na wystąpienie.
W T1, gdy liczba żądań spadnie do 1500 żądań lub 50 żądań na wystąpienie, skalowanie automatyczne spróbuje skalować w ciągu 10 wystąpień do 20. Jednak skalowanie automatyczne szacuje, że obciążenie procesora CPU dla 20 wystąpień będzie wyższe niż 70%, co powoduje zdarzenie skalowania w poziomie.
Aby uniknąć flappingu, aparat autoskalowania szacuje użycie procesora CPU dla wystąpień liczone powyżej 20 do momentu znalezienia liczby wystąpień, w której wszystkie metryki znajdują się w zdefiniowanych progach:
- Zachowaj procesor poniżej 70%.
- Zachowaj liczbę żądań na wystąpienie powyżej 50.
- Zmniejsz liczbę wystąpień poniżej 30.
W takiej sytuacji skalowanie automatyczne może zmniejszyć liczbę instancji o 3, z 30 do 27, aby spełnić reguły, mimo że reguła określa zmniejszenie o 10. Komunikat dziennika jest zapisywany w dzienniku aktywności z opisem zawierającym skalowanie w dół z zaktualizowaną liczbą wystąpień, aby uniknąć flappingu
Jeśli autoskalowanie nie może znaleźć odpowiedniej liczby wystąpień, spowoduje to pominięcie zdarzenia skalowania i przeprowadzi ponowną ocenę podczas następnego cyklu.
Uwaga
Jeśli aparat skalowania automatycznego wykryje, że flapping może wystąpić w wyniku skalowania do docelowej liczby wystąpień, spróbuje również przeprowadzić skalowanie do mniejszej liczby wystąpień między bieżącą liczbą a liczbą docelową. Jeśli flapping nie występuje w tym zakresie, autoskalowanie będzie kontynuować operację skalowania z nowym obiektem docelowym.
Plik dzienników
Znajdź flapping w dzienniku aktywności za pomocą następującego zapytania:
// 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
Poniżej znajduje się przykład rekordu dziennika aktywności na potrzeby flappingu:
{
"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"
}
Następne kroki
Aby dowiedzieć się więcej na temat autoskalowania, zobacz następujące zasoby: