Najlepsze rozwiązania dotyczące niezawodnego Azure Functions

Azure Functions to oparte na zdarzeniach środowisko obliczeniowe na żądanie, które rozszerza istniejącą platformę aplikacji Azure App Service z możliwościami implementowania kodu wyzwalanego przez zdarzenia występujące na platformie Azure, w usługach innych firm i w systemach lokalnych. Funkcje umożliwiają tworzenie rozwiązań przez łączenie się ze źródłami danych lub rozwiązaniami do obsługi komunikatów, co ułatwia przetwarzanie i reagowanie na zdarzenia. Funkcje działają w centrach danych platformy Azure, które są złożone z wielu zintegrowanych składników. W środowisku hostowanym w chmurze oczekuje się, że maszyny wirtualne mogą od czasu do czasu ponownie uruchamiać lub przenosić, a uaktualnienia systemów zostaną wykonane. Aplikacje funkcji prawdopodobnie zależą również od zewnętrznych interfejsów API, usług platformy Azure i innych baz danych, które są również podatne na okresowe nieodpowiedzialności.

W tym artykule opisano najlepsze rozwiązania dotyczące projektowania i wdrażania wydajnych aplikacji funkcji, które pozostają w dobrej kondycji i działają dobrze w środowisku chmurowym.

Wybieranie poprawnego planu hostingu

Podczas tworzenia aplikacji funkcji na platformie Azure musisz wybrać plan hostingu aplikacji. Wybrany plan ma wpływ na wydajność, niezawodność i koszt. Istnieją trzy podstawowe plany hostingu dostępne dla funkcji:

Wszystkie plany hostingu są ogólnie dostępne (GA) podczas uruchamiania systemu Linux lub Windows.

W kontekście platformy App Service plan Premium używany do dynamicznego hostowania funkcji to plan Elastic Premium (EP). Istnieją inne plany dedykowane (App Service) o nazwie Premium. Aby dowiedzieć się więcej, zobacz artykuł Plan Premium .

Wybrany plan hostingu określa następujące zachowania:

  • Sposób skalowania aplikacji funkcji na podstawie zapotrzebowania i sposobu zarządzania alokacją wystąpień.
  • Zasoby dostępne dla każdego wystąpienia aplikacji funkcji.
  • Obsługa zaawansowanych funkcji, takich jak łączność z usługą Azure Virtual Network.

Aby dowiedzieć się więcej na temat wybierania poprawnego planu hostingu i szczegółowego porównania między planami, zobacz Azure Functions opcje hostingu.

Ważne jest, aby podczas tworzenia aplikacji funkcji wybrać prawidłowy plan. Funkcje zapewniają ograniczoną możliwość przełączania planu hostingu przede wszystkim między planami Zużycie i Elastyczna wersja Premium. Aby dowiedzieć się więcej, zobacz Planowanie migracji.

Poprawnie skonfiguruj magazyn

Funkcje wymagają skojarzenia konta magazynu z aplikacją funkcji. Połączenie konta magazynu jest używane przez hosta usługi Functions na potrzeby operacji, takich jak zarządzanie wyzwalaczami i wykonywanie funkcji rejestrowania. Jest również używany podczas dynamicznego skalowania aplikacji funkcji. Aby dowiedzieć się więcej, zobacz Zagadnienia dotyczące magazynu dla Azure Functions.

Błędnie skonfigurowany system plików lub konto magazynu w aplikacji funkcji może mieć wpływ na wydajność i dostępność funkcji. Aby uzyskać pomoc dotyczącą rozwiązywania problemów z niepoprawnie skonfigurowanym kontem magazynu, zobacz artykuł dotyczący rozwiązywania problemów z magazynem .

Ustawienia połączenia magazynu

Aplikacje funkcji skalowane dynamicznie mogą być uruchamiane z punktu końcowego Azure Files na koncie magazynu lub z serwerów plików skojarzonych z wystąpieniami skalowanymi w poziomie. To zachowanie jest kontrolowane przez następujące ustawienia aplikacji:

Te ustawienia są obsługiwane tylko w przypadku uruchamiania w planie Premium lub w planie Zużycie w systemie Windows.

Podczas tworzenia aplikacji funkcji w Azure Portal lub przy użyciu interfejsu wiersza polecenia platformy Azure lub Azure PowerShell te ustawienia są tworzone dla aplikacji funkcji w razie potrzeby. Podczas tworzenia zasobów na podstawie szablonu usługi Azure Resource Manager (szablon usługi ARM) należy również uwzględnić WEBSITE_CONTENTAZUREFILECONNECTIONSTRING go w szablonie.

W pierwszym wdrożeniu przy użyciu szablonu usługi ARM nie należy uwzględniać WEBSITE_CONTENTSHAREelementu , który jest generowany dla Ciebie.

Aby prawidłowo skonfigurować te ustawienia, możesz użyć następujących przykładów szablonów usługi ARM:

Konfiguracja konta magazynu

Podczas tworzenia aplikacji funkcji musisz utworzyć konto usługi Azure Storage ogólnego przeznaczenia, które obsługuje magazyn obiektów blob, kolejek i tabel, albo połączyć takie konto. Usługa Functions korzysta z usługi Azure Storage na potrzeby operacji, takich jak zarządzanie wyzwalaczami i wykonywaniem funkcji rejestrowania. Parametry połączenia konta magazynu dla aplikacji funkcji znajdują się w AzureWebJobsStorage ustawieniach aplikacji i WEBSITE_CONTENTAZUREFILECONNECTIONSTRING .

Podczas tworzenia tego konta magazynu należy pamiętać o następujących kwestiach:

  • Aby zmniejszyć opóźnienie, utwórz konto magazynu w tym samym regionie co aplikacja funkcji.

  • Aby zwiększyć wydajność w środowisku produkcyjnym, należy użyć oddzielnego konta magazynu dla każdej aplikacji funkcji. Jest to szczególnie istotne w przypadku funkcji wyzwalanych przez usługę Durable Functions i centrum zdarzeń.

  • W przypadku funkcji wyzwalanych przez centrum zdarzeń nie używaj konta z włączonym Data Lake Storage.

Obsługa dużych zestawów danych

W przypadku uruchamiania w systemie Linux możesz dodać dodatkowy magazyn, instalowania udziału plików. Instalowanie udziału to wygodny sposób przetwarzania dużego istniejącego zestawu danych przez funkcję. Aby dowiedzieć się więcej, zobacz Instalowanie udziałów plików.

Organizowanie funkcji

W ramach rozwiązania prawdopodobnie opracowujesz i publikujesz wiele funkcji. Te funkcje są często łączone w jedną aplikację funkcji, ale mogą również działać w oddzielnych aplikacjach funkcji. W planach hostingu premium i dedykowanych (App Service) wiele aplikacji funkcji może również współdzielić te same zasoby, uruchamiając je w tym samym planie. Sposób grupowania funkcji i aplikacji funkcji może mieć wpływ na wydajność, skalowanie, konfigurację, wdrażanie i zabezpieczenia ogólnego rozwiązania.

W przypadku planu Zużycie i Premium wszystkie funkcje w aplikacji funkcji są dynamicznie skalowane razem.

Aby uzyskać więcej informacji na temat organizowania funkcji, zobacz Najlepsze rozwiązania dotyczące organizacji funkcji.

Optymalizowanie wdrożeń

Podczas wdrażania aplikacji funkcji należy pamiętać, że jednostka wdrażania funkcji na platformie Azure to aplikacja funkcji. Wszystkie funkcje w aplikacji funkcji są wdrażane w tym samym czasie, zwykle z tego samego pakietu wdrożeniowego.

Rozważ następujące opcje pomyślnego wdrożenia:

  • Funkcje są uruchamiane z pakietu wdrożeniowego. Ten przebieg z podejścia do pakietu zapewnia następujące korzyści:

    • Zmniejsza ryzyko problemów z blokowaniem kopiowania plików.
    • Można wdrożyć bezpośrednio w aplikacji produkcyjnej, co powoduje ponowne uruchomienie.
    • Pamiętaj, że wszystkie pliki w pakiecie są dostępne dla aplikacji.
    • Poprawia wydajność wdrożeń szablonów usługi ARM.
    • Może zmniejszyć czasy zimnego uruchamiania, szczególnie w przypadku funkcji JavaScript z dużymi drzewami pakietów npm.
  • Rozważ użycie ciągłego wdrażania w celu połączenia wdrożeń z rozwiązaniem kontroli źródła. Ciągłe wdrożenia umożliwiają również uruchamianie z pakietu wdrożeniowego.

  • W przypadku hostingu planu Premium rozważ dodanie wyzwalacza rozgrzewki, aby zmniejszyć opóźnienie podczas dodawania nowych wystąpień. Aby dowiedzieć się więcej, zobacz Azure Functions wyzwalacz rozgrzewki.

  • Aby zminimalizować przestoje wdrożenia i umożliwić wycofywanie wdrożeń, rozważ użycie miejsc wdrożenia. Aby dowiedzieć się więcej, zobacz Azure Functions miejsca wdrożenia.

Pisanie niezawodnych funkcji

Istnieje kilka zasad projektowania, które można wykonać podczas pisania kodu funkcji, które ułatwiają ogólną wydajność i dostępność funkcji. Te zasady obejmują:

Ponieważ błędy przejściowe są powszechne w przetwarzaniu w chmurze, należy użyć wzorca ponawiania podczas uzyskiwania dostępu do zasobów opartych na chmurze. Wiele wyzwalaczy i powiązań już implementuje ponawianie próby.

Projektowanie pod kątem zabezpieczeń

Zabezpieczenia są najlepiej brane pod uwagę podczas fazy planowania, a nie po zakończeniu działania funkcji. Aby dowiedzieć się, jak bezpiecznie opracowywać i wdrażać funkcje, zobacz Zabezpieczanie Azure Functions.

Rozważ współbieżność

Gdy zapotrzebowanie opiera się na aplikacji funkcji w wyniku przychodzących zdarzeń, aplikacje funkcji działające w planach Zużycie i Premium są skalowane w poziomie. Ważne jest, aby zrozumieć, jak aplikacja funkcji reaguje na obciążenie i jak można skonfigurować wyzwalacze do obsługi zdarzeń przychodzących. Aby zapoznać się z ogólnym omówieniem, zobacz Skalowanie sterowane zdarzeniami w Azure Functions.

Plany dedykowane (App Service) wymagają zapewnienia skalowania w poziomie aplikacji funkcji.

Liczba procesów roboczych

W niektórych przypadkach bardziej wydajne jest obsłużenie obciążenia przez utworzenie wielu procesów nazywanych procesami roboczymi języka w wystąpieniu przed skalowaniem w poziomie. Maksymalna dozwolona liczba procesów roboczych języka jest kontrolowana przez ustawienie FUNCTIONS_WORKER_PROCESS_COUNT . Wartość domyślna tego ustawienia to 1, co oznacza, że wiele procesów nie jest używanych. Po osiągnięciu maksymalnej liczby procesów aplikacja funkcji jest skalowana w poziomie do większej liczby wystąpień w celu obsługi obciążenia. To ustawienie nie dotyczy funkcji biblioteki klas języka C#, które są uruchamiane w procesie hosta.

W przypadku korzystania z FUNCTIONS_WORKER_PROCESS_COUNT planu Premium lub planu dedykowanego (App Service) należy pamiętać o liczbie rdzeni dostarczonych przez plan. Na przykład plan EP2 Premium zapewnia dwa rdzenie, więc należy zacząć od wartości 2 i zwiększyć ją o dwa w razie potrzeby, maksymalnie.

Konfiguracji wyzwalacza

Podczas planowania przepływności i skalowania ważne jest, aby zrozumieć, jak różne typy wyzwalaczy przetwarzają zdarzenia. Niektóre wyzwalacze umożliwiają kontrolowanie zachowań przetwarzania wsadowego i zarządzanie współbieżnością. Często dostosowywanie wartości w tych opcjach może pomóc każdemu wystąpieniu odpowiednio skalować pod kątem wymagań wywoływanych funkcji. Te opcje konfiguracji są stosowane do wszystkich wyzwalaczy w aplikacji funkcji i są przechowywane w pliku host.json dla aplikacji. Aby uzyskać szczegółowe informacje o ustawieniach, zobacz sekcję Konfiguracja określonego wyzwalacza.

Aby dowiedzieć się więcej o tym, jak usługa Functions przetwarza strumienie komunikatów, zobacz Azure Functions niezawodne przetwarzanie zdarzeń.

Planowanie połączeń

Aplikacje funkcji uruchomione w planie Zużycie podlegają limitom połączeń. Te limity są wymuszane dla poszczególnych wystąpień. Ze względu na te limity i jako ogólne najlepsze rozwiązanie należy zoptymalizować połączenia wychodzące z kodu funkcji. Aby dowiedzieć się więcej, zobacz Zarządzanie połączeniami w Azure Functions.

Zagadnienia specyficzne dla języka

W wybranym języku należy pamiętać o następujących kwestiach:

Maksymalizowanie dostępności

Zimny start to kluczowy element dla architektur bezserwerowych. Aby dowiedzieć się więcej, zobacz Zimny start. Jeśli zimny start jest problemem dla danego scenariusza, możesz znaleźć bardziej szczegółowe informacje w artykule Omówienie bezserwerowego zimnego startu .

Plan Premium jest zalecanym planem zmniejszenia liczby zimnych startów przy zachowaniu dynamicznej skali. Skorzystaj z poniższych wskazówek, aby zmniejszyć liczbę zimnych startów i zwiększyć dostępność we wszystkich trzech planach hostingu.

Planowanie Wskazówki
Plan Premium Implementowanie wyzwalacza Rozgrzewka w aplikacji funkcji
Ustawianie wartości dla wystąpień Always-Ready i maksymalnego limitu serii
Używanie obsługi wyzwalacza sieci wirtualnej w przypadku korzystania z wyzwalaczy innych niż HTTP w sieci wirtualnej
Plany dedykowane Uruchom co najmniej dwa wystąpienia z włączoną kontrolą kondycji Azure App Service
Implementowanie skalowania automatycznego
Plan zużycia • Przejrzyj użycie wzorców pojedynczych i ustawień współbieżności dla powiązań i wyzwalaczy, aby uniknąć sztucznego wprowadzania limitów dotyczących skalowania aplikacji funkcji.
Przejrzyj functionAppScaleLimit ustawienie, które może ograniczyć skalowanie w poziomie
• Sprawdź dzienny limit przydziału użycia (GB-s) ustawiony podczas programowania i testowania. Rozważ usunięcie tego limitu w środowiskach produkcyjnych.

Skuteczne monitorowanie

Azure Functions oferuje wbudowaną integrację z usługą aplikacja systemu Azure Insights w celu monitorowania wykonywania funkcji i śladów napisanych na podstawie kodu. Aby dowiedzieć się więcej, zobacz Monitorowanie Azure Functions. Usługa Azure Monitor udostępnia również funkcje monitorowania kondycji samej aplikacji funkcji. Aby dowiedzieć się więcej, zobacz Monitorowanie za pomocą usługi Azure Monitor.

Podczas korzystania z integracji usługi Application Insights w celu monitorowania funkcji należy pamiętać o następujących kwestiach:

  • Upewnij się, że ustawienie aplikacji AzureWebJobsDashboard zostało usunięte. To ustawienie było obsługiwane w starszej wersji usługi Functions. Jeśli istnieje, usunięcie AzureWebJobsDashboard poprawia wydajność funkcji.

  • Przejrzyj dzienniki usługi Application Insights. Jeśli brakuje danych, których spodziewasz się znaleźć, rozważ dostosowanie ustawień próbkowania w celu lepszego przechwycenia scenariusza monitorowania. Możesz użyć excludedTypes tego ustawienia, aby wykluczyć niektóre typy z próbkowania, na przykład Request lub Exception. Aby dowiedzieć się więcej, zobacz Konfigurowanie próbkowania.

Azure Functions umożliwia również wysyłanie dzienników generowanych przez system i generowanych przez użytkownika do dzienników usługi Azure Monitor. Integracja z dziennikami usługi Azure Monitor jest obecnie dostępna w wersji zapoznawczej.

Tworzenie nadmiarowości

Twoje potrzeby biznesowe mogą wymagać, aby funkcje zawsze mogły być dostępne, nawet podczas awarii centrum danych. Aby dowiedzieć się, jak używać podejścia obejmującego wiele regionów w celu zapewnienia ciągłego działania krytycznych funkcji, zobacz Azure Functions odzyskiwania po awarii geograficznej i wysokiej dostępności.

Następne kroki

Zarządzanie aplikacją funkcji