Skalowanie sterowane zdarzeniami w usłudze Azure Functions
W planach Zużycie, Flex Consumption i Premium usługa Azure Functions skaluje zasoby, dodając więcej wystąpień na podstawie liczby zdarzeń, które wyzwalają funkcję.
Sposób skalowania aplikacji funkcji zależy od planu hostingu:
Plan zużycia: każde wystąpienie hosta usługi Functions w planie Zużycie jest ograniczone, zazwyczaj do 1,5 GB pamięci i jednego procesora CPU. Wystąpienie hosta obsługuje całą aplikację funkcji. W związku z tym wszystkie funkcje w ramach zasobu aplikacji funkcji współużytkują zasób w wystąpieniu są skalowane w tym samym czasie. Gdy aplikacje funkcji współużytkują ten sam plan Zużycie, są one nadal skalowane niezależnie.
Plan Flex Consumption: Plan używa deterministycznej strategii skalowania poszczególnych funkcji, w której każda funkcja jest skalowana niezależnie, z wyjątkiem funkcji wyzwalanych przez protokół HTTP, blob i Durable Functions, które są skalowane we własnych grupach. Aby uzyskać więcej informacji, zobacz Skalowanie poszczególnych funkcji. Te wystąpienia są następnie skalowane na podstawie współbieżności żądań.
Plan Premium: określony rozmiar planu Premium określa dostępną pamięć i procesor CPU dla wszystkich aplikacji w tym planie w tym wystąpieniu. Plan skaluje swoje wystąpienia w poziomie na podstawie potrzeb skalowania aplikacji w planie, a aplikacje są skalowane w ramach planu zgodnie z potrzebami.
Pliki kodu funkcji są przechowywane w udziałach usługi 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
Usługa Azure Functions używa składnika o nazwie kontroler skalowania do monitorowania szybkości zdarzeń i określania, czy skalować w poziomie, czy skalować w poziomie. Kontroler skalowania używa heurystyki dla każdego typu wyzwalacza. Jeśli na przykład używasz wyzwalacza usługi Azure Queue Storage, używa ona skalowania na podstawie celu.
Jednostką skalowania dla usługi Azure Functions jest aplikacja funkcji. Gdy aplikacja funkcji jest skalowana w poziomie, więcej zasobów jest przydzielanych do uruchamiania wielu wystąpień hosta usługi Azure Functions. Z drugiej strony, gdy zapotrzebowanie na zasoby obliczeniowe spada, kontroler skalowania usuwa wystąpienia hosta funkcji. Liczba wystąpień jest ostatecznie "skalowana w", gdy żadne funkcje nie są uruchomione w aplikacji funkcji.
Zimny start
Jeśli aplikacja funkcji stanie się bezczynna przez kilka minut, platforma może zdecydować się na skalowanie liczby wystąpień, na których aplikacja działa do zera. Następne żądanie ma dodane opóźnienie skalowania z 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ż użycie planu innego niż zużycie. Inne plany oferują te strategie ograniczania lub eliminowania zimnych startów:
Plan Premium: obsługuje zarówno wystąpienia przedwarmowane, jak i zawsze gotowe wystąpienia z co najmniej jednym wystąpieniem.
Plan Flex Consumption: obsługuje opcjonalną liczbę zawsze gotowych wystąpień, które można zdefiniować na podstawie skalowania wystąpień.
Plan dedykowany: sam plan nie jest skalowany dynamicznie, ale możesz uruchomić aplikację w sposób ciągły 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 na podstawie wybranych wyzwalaczy i języka. Istnieje kilka zawiłości dotyczących zachowań skalowania, o których należy pamiętać:
- Maksymalna liczba wystąpień: pojedyncza aplikacja funkcji jest skalowana w poziomie do maksymalnej dozwolonej przez plan. Jednak pojedyncze wystąpienie może przetwarzać więcej niż jeden komunikat lub żądanie jednocześnie. Możesz określić niższą maksymalną skalę ograniczania zgodnie z potrzebami.
- Szybkość nowego wystąpienia: w przypadku wyzwalaczy HTTP nowe wystąpienia są przydzielane co najwyżej raz na sekundę. W przypadku innych wyzwalaczy, niż protokołu HTTP, nowe wystąpienia są przydzielane najwyżej raz na 30 sekund. Skalowanie jest szybsze, gdy jest uruchamiane w planie Premium.
- Skalowanie na podstawie celu: skalowanie oparte na obiekcie docelowym zapewnia szybki i intuicyjny model skalowania dla klientów i jest obecnie obsługiwany w przypadku kolejek i tematów usługi Service Bus, kolejek usługi Storage, centrów zdarzeń, platformy Apache Kafka i rozszerzeń usługi Azure Cosmos DB. Pamiętaj, aby zapoznać się ze skalowaniem opartym na obiekcie docelowym, aby zrozumieć ich zachowanie skalowania.
- Skalowanie poszczególnych funkcji: z pewnymi wyjątkami, które można zauważyć, funkcje działające w skali planu Flex Consumption w niezależnych wystąpieniach. Wyjątki obejmują wyzwalacze HTTP i wyzwalacze usługi Blob Storage (Event Grid). Każdy z tych typów wyzwalaczy jest skalowany razem jako grupa w tych samych wystąpieniach. Podobnie wszystkie wyzwalacze rozszerzenia Durable Functions współużytkują wystąpienia i skalują je razem. Aby uzyskać więcej informacji, zobacz skalowanie poszczególnych funkcji.
- Maksymalne monitorowane wyzwalacze: obecnie kontroler skalowania może monitorować tylko 100 wyzwalaczy w celu podejmowania decyzji dotyczących skalowania. Gdy aplikacja ma więcej niż 100 wyzwalaczy opartych na zdarzeniach, decyzje dotyczące skalowania są podejmowane na podstawie tylko pierwszych 100 wyzwalaczy, które są wykonywane. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania i wzorce dla skalowalnych aplikacji.
Ograniczanie skalowania w poziomie
Możesz zdecydować się na ograniczenie maksymalnej liczby wystąpień, których aplikacja może użyć 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ść. Aby uzyskać maksymalne limity skalowania podczas uruchamiania różnych planów hostingu, zobacz Limity skalowania.
Plan Flex Consumption
Domyślnie aplikacje uruchomione w planie Flex Consumption mają limit 100
ogólnych wystąpień. Obecnie najniższą maksymalną wartością liczby wystąpień jest 40
, a największą obsługiwaną maksymalną wartością liczby wystąpień jest 1000
. Gdy używasz az functionapp create
polecenia , aby utworzyć aplikację funkcji w planie Flex Consumption, użyj parametru --maximum-instance-count
, aby ustawić tę maksymalną liczbę wystąpień dla aplikacji.
Pamiętaj, że chociaż maksymalną liczbę wystąpień aplikacji Flex Consumption można zmienić do 1000, aplikacje osiągną limit przydziału przed osiągnięciem tej liczby. Aby uzyskać więcej szczegółów, zapoznaj się z tematem Regional subscription memory quotas (Regionalne limity przydziału pamięci subskrypcji).
W tym przykładzie zostanie utworzona aplikacja z maksymalną liczbą 200
wystąpień:
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_ACCOUNT_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --maximum-instance-count 200
W tym przykładzie użyto az functionapp scale config set
polecenia , aby zmienić maksymalną liczbę wystąpień dla istniejącej aplikacji na 150
:
az functionapp scale config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --maximum-instance-count 150
Zużycie/plany Premium
W planie Zużycie lub Elastyczna wersja Premium możesz określić niższy maksymalny limit dla aplikacji, modyfikując wartość functionAppScaleLimit
ustawienia konfiguracji lokacji. functionAppScaleLimit
Można ustawić 0
wartość na lub null
dla nieograniczonej lub 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>
Zachowania skalowania w poziomie
Skalowanie sterowane zdarzeniami automatycznie zmniejsza pojemność, gdy zapotrzebowanie na funkcje zostanie zmniejszone. Robi to przez opróżnianie wystąpień ich bieżących wykonań funkcji, a następnie usunięcie tych wystąpień. To zachowanie jest rejestrowane jako tryb opróżniania. Okres prolongaty dla funkcji, które są obecnie wykonywane, może wydłużyć się do 10 minut dla aplikacji planu zużycie i maksymalnie 60 minut dla aplikacji planu Flex Consumption i Premium. Skalowanie oparte na zdarzeniach i takie zachowanie nie ma zastosowania do aplikacji w planie dedykowanym.
Następujące zagadnienia dotyczą zachowań skalowanych w poziomie:
- W przypadku aplikacji działającej w systemie Windows w planie Zużycie domyślnie włączone są tylko aplikacje utworzone po maju 2021 r.
- 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.
Skalowanie poszczególnych funkcji
Dotyczy tylko planu Flex Consumption.
Plan Flex Consumption jest unikatowy w tym, że implementuje zachowanie skalowania poszczególnych funkcji. W przypadku skalowania poszczególnych funkcji, z wyjątkiem wyzwalaczy HTTP, wyzwalaczy obiektów blob (Event Grid) i Durable Functions, wszystkie inne typy wyzwalaczy funkcji w skali aplikacji w niezależnych wystąpieniach. Wyzwalacze HTTP w aplikacji są skalowane razem jako grupa w tych samych wystąpieniach, co wszystkie wyzwalacze usługi Blob (Event Grid) i wszystkie wyzwalacze rozszerzenia Durable Functions, które mają własne wystąpienia udostępnione.
Rozważmy aplikację funkcji hostowaną w planie Flex Consumption, który ma następujące funkcje:
function1 | function2 | function3 | function4 | function5 | function6 | function7 |
---|---|---|---|---|---|---|
Wyzwalacz HTTP | Wyzwalacz HTTP | Wyzwalacz orkiestracji (Trwały) | Wyzwalacz działania (trwały) | Wyzwalacz usługi Service Bus | Wyzwalacz usługi Service Bus | Wyzwalacz usługi Event Hubs |
W tym przykładzie:
- Dwie funkcje wyzwalane przez protokół HTTP (
function1
ifunction2
) są uruchamiane razem we własnych wystąpieniach i są skalowane razem zgodnie z ustawieniami współbieżności HTTP. - Obie funkcje Durable Functions (
function3
ifunction4
) są uruchamiane razem we własnych wystąpieniach i są skalowane razem na podstawie skonfigurowanych ograniczeń współbieżności. - Funkcja wyzwalana przez usługę
function5
Service Bus działa samodzielnie i jest skalowana niezależnie zgodnie z docelowymi regułami skalowania dla kolejek i tematów usługi Service Bus. - Funkcja wyzwalana przez usługę
function6
Service Bus działa samodzielnie i jest skalowana niezależnie zgodnie z docelowymi regułami skalowania dla kolejek i tematów usługi Service Bus. - Wyzwalacz usługi Event Hubs (
function7
) działa we własnych wystąpieniach i jest skalowany niezależnie zgodnie z docelowymi regułami skalowania dla usługi Event Hubs.
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 w artykule dotyczącym zagadnień dotyczących wydajności. Należy również pamiętać o tym, jak połączenia zachowują się w miarę skalowania aplikacji funkcji. Aby uzyskać więcej informacji, zobacz Jak zarządzać połączeniami w usłudze Azure Functions.
Jeśli aplikacja ma więcej niż 100 funkcji korzystających z wyzwalaczy opartych na zdarzeniach, rozważ podzielenie aplikacji na co najmniej jedną aplikację, gdzie każda aplikacja ma mniej niż 100 funkcji opartych na zdarzeniach.
Aby uzyskać więcej informacji na temat skalowania w języku Python i Node.js, zobacz Przewodnik dla deweloperów języka Python dotyczący skalowania i współbieżności oraz usługi Azure Functions Node.js — przewodnik dla deweloperów — skalowanie i współbieżność.
Następne kroki
Więcej informacji można znaleźć w następujących artykułach: