Skalowanie sterowane zdarzeniami w Azure Functions
W planach Zużycie i Premium Azure Functions skaluje zasoby procesora CPU i pamięci przez dodanie kolejnych wystąpień hosta usługi Functions. Liczba wystąpień jest określana na liczbę zdarzeń, które wyzwalają funkcję.
Każde wystąpienie hosta usługi Functions w planie Zużycie jest ograniczone do 1,5 GB pamięci i jednego procesora CPU. Wystąpienie hosta to cała aplikacja funkcji, co oznacza, że wszystkie funkcje w ramach aplikacji funkcji współużytkować zasób w ramach wystąpienia i skalować w tym samym czasie. Aplikacje funkcji, które współdzielą ten sam plan zużycie, są skalowane niezależnie. W planie Premium rozmiar planu określa dostępną pamięć i procesor CPU dla wszystkich aplikacji w tym planie w tym wystąpieniu.
Pliki kodu funkcji są przechowywane w udziałach Azure Files na głównym koncie magazynu funkcji. Po usunięciu głównego konta magazynu aplikacji funkcji pliki kodu funkcji są usuwane i nie można ich odzyskać.
Skalowanie środowiska uruchomieniowego
Azure Functions używa składnika o nazwie kontroler skalowania do monitorowania szybkości zdarzeń i określenia, czy skalować w poziomie, czy skalować w poziomie. Kontroler skalowania używa heurystyki dla każdego typu wyzwalacza. Na przykład gdy używasz wyzwalacza usługi Azure Queue Storage, jest skalowana na podstawie długości kolejki i wieku najstarszego komunikatu w kolejce.
Jednostką skalowania dla Azure Functions jest aplikacja funkcji. Gdy aplikacja funkcji jest skalowana w poziomie, do uruchamiania wielu wystąpień hosta Azure Functions jest przydzielanych więcej zasobów. Z kolei w miarę zmniejszenia zapotrzebowania na zasoby obliczeniowe kontroler skalowania usuwa wystąpienia hosta funkcji. Liczba wystąpień jest ostatecznie "skalowana w poziomie" do zera, gdy żadne funkcje nie są uruchomione w aplikacji funkcji.
Zimny start
Po bezczynności aplikacji funkcji przez kilka minut platforma może skalować liczbę wystąpień, na których aplikacja działa do zera. Następne żądanie ma dodatkowe opóźnienie skalowania od zera do jednego. To opóźnienie jest określane jako zimny start. Liczba zależności wymaganych przez aplikację funkcji może mieć wpływ na zimny czas rozpoczęcia. Zimny start jest bardziej problemem dla operacji synchronicznych, takich jak wyzwalacze HTTP, które muszą zwrócić odpowiedź. Jeśli zimne starty wpływają na funkcje, rozważ uruchomienie w planie Premium lub w planie dedykowanym z włączonym ustawieniem Zawsze włączone .
Informacje o zachowaniach skalowania
Skalowanie może się różnić w zależności od kilku czynników, a aplikacje są skalowane inaczej w zależności od wybranego wyzwalacza i języka. Istnieje kilka zawiłości zachowań skalowania, o których należy pamiętać:
- Maksymalna liczba wystąpień: Pojedyncza aplikacja funkcji jest skalowana w poziomie tylko do maksymalnie 200 wystąpień. Pojedyncze wystąpienie może jednak przetwarzać więcej niż jeden komunikat lub żądanie jednocześnie, więc nie ma ustawionego limitu liczby współbieżnych wykonań. W razie potrzeby można określić niższą maksymalną skalę ograniczania przepustowości.
- Nowa szybkość wystąpień: W przypadku wyzwalaczy HTTP nowe wystąpienia są przydzielane co najwyżej raz na sekundę. W przypadku wyzwalaczy innych niż HTTP nowe wystąpienia są przydzielane co najwyżej raz na 30 sekund. Skalowanie jest szybsze w przypadku uruchamiania w planie Premium.
- Wydajność skalowania: W przypadku wyzwalaczy usługi Service Bus użyj opcji Zarządzaj prawami do zasobów, aby uzyskać najbardziej wydajne skalowanie. W przypadku praw nasłuchiwania skalowanie nie jest tak dokładne, ponieważ długość kolejki nie może służyć do informowania o decyzjach dotyczących skalowania. Aby dowiedzieć się więcej na temat ustawiania praw w zasadach dostępu usługi Service Bus, zobacz Zasady autoryzacji dostępu współdzielonego. W przypadku wyzwalaczy usługi Event Hubs zapoznaj się z tym wskazówkami dotyczącymi skalowania.
Ograniczanie skalowania w poziomie
Możesz ograniczyć maksymalną liczbę wystąpień używanych do skalowania w poziomie. Jest to najczęściej spotykane w przypadkach, w których składnik podrzędny, taki jak baza danych, ma ograniczoną przepływność. Domyślnie funkcje planu zużycie są skalowane w poziomie do 200 wystąpień, a funkcje planu Premium będą skalowane w poziomie do 100 wystąpień. Możesz określić niższą wartość maksymalną dla określonej aplikacji, modyfikując functionAppScaleLimit
wartość. Wartość parametru functionAppScaleLimit
można ustawić na 0
wartość lub null
dla wartości nieograniczonej albo prawidłową wartość między 1
i maksymalną aplikacją.
az resource update --resource-type Microsoft.Web/sites -g <RESOURCE_GROUP> -n <FUNCTION_APP-NAME>/config/web --set properties.functionAppScaleLimit=<SCALE_LIMIT>
$resource = Get-AzResource -ResourceType Microsoft.Web/sites -ResourceGroupName <RESOURCE_GROUP> -Name <FUNCTION_APP-NAME>/config/web
$resource.Properties.functionAppScaleLimit = <SCALE_LIMIT>
$resource | Set-AzResource -Force
Zachowania skalowania w poziomie
Skalowanie sterowane zdarzeniami automatycznie zmniejsza pojemność, gdy zapotrzebowanie na funkcje zostanie zmniejszone. Robi to, zamykając wystąpienia procesów roboczych aplikacji funkcji. Przed zamknięciem wystąpienia nowe zdarzenia przestają być wysyłane do wystąpienia. Ponadto funkcje, które są obecnie wykonywane, mają czas na zakończenie wykonywania. To zachowanie jest rejestrowane jako tryb opróżniania. Ten okres zamknięcia może wydłużyć do 10 minut dla aplikacji planu zużycie i do 60 minut dla aplikacji planu Premium. Skalowanie oparte na zdarzeniach i takie zachowanie nie ma zastosowania do dedykowanych aplikacji planu.
Następujące zagadnienia dotyczą zachowań skalowania w poziomie:
- W przypadku aplikacji funkcji planu zużycie działających w systemie Windows tylko aplikacje utworzone po maju 2021 r. mają domyślnie włączone zachowania trybu opróżniania.
- Aby włączyć bezpieczne zamykanie funkcji przy użyciu wyzwalacza usługi Service Bus, użyj wersji 4.2.0 lub nowszej wersji rozszerzenia usługi Service Bus.
Wyzwalacze usługi Event Hubs
W tej sekcji opisano, jak działa skalowanie, gdy funkcja używa wyzwalacza usługi Event Hubs lub wyzwalacza IoT Hub. W takich przypadkach każde wystąpienie funkcji wyzwalanej przez zdarzenie jest wspierane przez pojedyncze wystąpienie klasy EventProcessorHost . Wyzwalacz (obsługiwany przez usługę Event Hubs) zapewnia, że tylko jedno wystąpienie klasy EventProcessorHost może uzyskać dzierżawę dla danej partycji.
Rozważmy na przykład centrum zdarzeń w następujący sposób:
- 10 partycji
- 1000 zdarzeń dystrybuowanych równomiernie we wszystkich partycjach z 100 komunikatami w każdej partycji
Po pierwszym włączeniu funkcji istnieje tylko jedno wystąpienie funkcji. Wywołajmy pierwsze wystąpienie Function_0
funkcji . Funkcja Function_0
ma jedno wystąpienie klasy EventProcessorHost , które przechowuje dzierżawę na wszystkich 10 partycjach. To wystąpienie odczytuje zdarzenia z partycji 0–9. Od tego momentu następuje jedna z następujących czynności:
Nowe wystąpienia funkcji nie są potrzebne:
Function_0
jest w stanie przetworzyć wszystkie 1000 zdarzeń, zanim logika skalowania funkcji zacznie obowiązywać. W tym przypadku wszystkie 1000 komunikatów jest przetwarzanych przez programFunction_0
.Dodano dodatkowe wystąpienie funkcji: jeśli logika skalowania funkcji określi, że
Function_0
ma więcej komunikatów niż może przetworzyć, zostanie utworzone nowe wystąpienie aplikacji funkcji (Function_1
). Ta nowa funkcja ma również skojarzone wystąpienie klasy EventProcessorHost. Ponieważ bazowe centrum zdarzeń wykrywa, że nowe wystąpienie hosta próbuje odczytywać komunikaty, równoważy obciążenie partycji między wystąpieniami hosta. Na przykład partycje 0–4 mogą być przypisane doFunction_0
partycji i partycje 5–9 do .Function_1
Dodano n więcej wystąpień funkcji: jeśli logika skalowania funkcji określi, że i
Function_0
Function_1
mają więcej komunikatów niż mogą przetwarzać, tworzone są noweFunctions_N
wystąpienia aplikacji funkcji. Aplikacje są tworzone do punktu, w którymN
jest większa niż liczba partycji centrum zdarzeń. W naszym przykładzie usługa Event Hubs ponownie równoważy obciążenie partycji, w tym przypadku między wystąpieniamiFunction_0
...Functions_9
.
W miarę N
skalowania wystąpień liczba wystąpień jest większa niż liczba partycji centrum zdarzeń. Ten wzorzec służy do zapewniania dostępności wystąpień klasy EventProcessorHost w celu uzyskania blokad na partycjach w miarę ich udostępniania z innych wystąpień. Opłaty są naliczane tylko za zasoby używane podczas wykonywania wystąpienia funkcji. Innymi słowy, nie są naliczane opłaty za tę nadmierną aprowizację.
Po zakończeniu wykonywania wszystkich funkcji (z błędami lub bez błędów) punkty kontrolne są dodawane do skojarzonego konta magazynu. Po pomyślnym zakończeniu sprawdzania wszystkie 1000 komunikatów nigdy nie są pobierane ponownie.
Najlepsze rozwiązania i wzorce dla skalowalnych aplikacji
Istnieje wiele aspektów aplikacji funkcji, które mają wpływ na sposób skalowania, w tym konfigurację hosta, ślad środowiska uruchomieniowego i wydajność zasobów. Aby uzyskać więcej informacji, zobacz sekcję dotyczącą skalowalności artykułu z zagadnieniami dotyczącymi wydajności. Należy również wiedzieć, jak działają połączenia w miarę skalowania aplikacji funkcji. Aby uzyskać więcej informacji, zobacz Jak zarządzać połączeniami w Azure Functions.
Aby uzyskać więcej informacji na temat skalowania w języku Python i Node.js, zobacz przewodnik dla deweloperów Azure Functions Python — skalowanie i współbieżność orazAzure Functions Node.js przewodnik dla deweloperów — skalowanie i współbieżność.
Model rozliczania
Rozliczenia dla różnych planów zostały szczegółowo opisane na stronie Azure Functions cennika. Użycie jest agregowane na poziomie aplikacji funkcji i zlicza tylko czas wykonywania kodu funkcji. Poniżej przedstawiono jednostki rozliczeń:
- Zużycie zasobów w gigabajtach sekund (GB-s). Obliczane jako kombinacja rozmiaru pamięci i czasu wykonywania dla wszystkich funkcji w aplikacji funkcji.
- Wykonania. Liczone za każdym razem, gdy funkcja jest wykonywana w odpowiedzi na wyzwalacz zdarzenia.
Przydatne zapytania i informacje na temat sposobu zrozumienia rachunku za użycie można znaleźć w często zadawanych pytaniach dotyczących rozliczeń.