Udostępnij za pośrednictwem


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.

Skalowanie zdarzeń monitorowania kontrolera i tworzenie wystąpień

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ą 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. 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:

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: