Udostępnij przez


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 aplikacji funkcji, które współużytkują zasoby 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 elastycznego zużycia: Plan używa deterministycznej strategii skalowania pojedynczej funkcji. 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.

Diagram przedstawiający kontroler skalowania, który monitoruje zdarzenia i tworzy wystąpienia.

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 uruchamiać aplikację w sposób ciągły, gdy ustawienie Zawsze włączone jest 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 na podstawie celu zapewnia szybki i intuicyjny model skalowania dla klientów. Obecnie ta metoda skalowania jest obsługiwana w przypadku kolejek i topików Service Bus, kolejek Storage, Event Hubs, Apache Kafka i rozszerzeń 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 wyzwalacze wszystkich funkcji Durable Functions współdzielą wystąpienia i skalują 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. To ograniczenie jest najczęściej stosowane 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.

Chociaż można zmienić maksymalną liczbę wystąpień aplikacji Flex Consumption do 1000, osiągnięto limit przydziału dla aplikacji 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ą 200wystą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. Zmniejsza to poprzez opróżnienie aktualnie wykonywanych instancji funkcji, a następnie usunięcie tych instancji. 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ących w systemie Windows w planie Zużycia domyślnie włączone są funkcje trybu osuszania tylko dla aplikacji utworzonych 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ż aplikację funkcji hostowaną przez plan Flex Consumption, która 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:

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 sekcję Scaling and performance (Skalowanie i wydajność ) w przewodniku dla deweloperów usługi Azure Functions w języku Python oraz w sekcji Scaling and concurrency (Skalowanie i współbieżność ) przewodnika dla deweloperów usługi Azure Functions Node.js.

Następne kroki

Więcej informacji można znaleźć w następujących artykułach: