Udostępnij przez


Korzystanie z funkcji bezserwerowych

Wskazówka

Ta zawartość jest fragmentem e-książki, Architektura Cloud Native .NET Applications for Azure, dostępnej w .NET Docs lub jako bezpłatny plik PDF do pobrania, który można czytać offline.

Natywne aplikacje .NET dla chmury Azure - okładka miniatury eBooka.

W spektrum od zarządzania maszynami fizycznymi po wykorzystanie możliwości chmury, podejście "serverless" znajduje się na skrajnym końcu. Jedyną odpowiedzialnością jest twój kod i płacisz tylko wtedy, gdy kod zostanie uruchomiony. Usługa Azure Functions umożliwia tworzenie możliwości bezserwerowych w aplikacjach natywnych dla chmury.

Co to jest bezserwerowe?

Bezserwerowy to stosunkowo nowy model usług przetwarzania w chmurze. Nie oznacza to, że serwery są opcjonalne — kod nadal działa na serwerze gdzieś. Różnica polega na tym, że zespół aplikacji nie martwi się już o zarządzanie infrastrukturą serwera. Zamiast tego dostawca usług w chmurze jest właścicielem tej odpowiedzialności. Zespół deweloperów zwiększa swoją produktywność, dostarczając rozwiązania biznesowe klientom, a nie kanalizacji.

Przetwarzanie bezserwerowe używa kontenerów bezstanowych wyzwalanych przez zdarzenia do hostowania usług. Mogą skalować zasoby w górę i w dół, aby zaspokoić zapotrzebowanie. Platformy bezserwerowe, takie jak Azure Functions, mają ścisłą integrację z innymi usługami platformy Azure, takimi jak kolejki, zdarzenia i magazyn.

Jakie wyzwania są rozwiązywane przez rozwiązania bezserwerowe?

Platformy bezserwerowe dotyczą wielu czasochłonnych i kosztownych problemów:

  • Kupowanie maszyn i licencji na oprogramowanie
  • Obudowa, zabezpieczanie, konfigurowanie i obsługa maszyn oraz ich sieci, zasilania i wymagań dotyczących A/C
  • Stosowanie poprawek i uaktualnianie systemów operacyjnych i oprogramowania
  • Konfigurowanie serwerów sieci Web lub usług maszynowych do hostowania oprogramowania aplikacji
  • Konfigurowanie oprogramowania aplikacji na jego platformie

Wiele firm przydziela duże budżety w celu obsługi problemów z infrastrukturą sprzętową. Przejście do chmury może pomóc zmniejszyć te koszty; przenoszenie aplikacji do bezserwerowych może pomóc je wyeliminować.

Jaka jest różnica między mikrousługą a funkcją bezserwerową?

Zazwyczaj mikrousługi hermetyzują możliwości biznesowe, takie jak koszyk dla witryny handlu elektronicznego online. Uwidacznia wiele operacji, które umożliwiają użytkownikowi zarządzanie swoim środowiskiem zakupów. Funkcja jest jednak małym, lekkim blokiem kodu, który wykonuje operację pojedynczego przeznaczenia w odpowiedzi na zdarzenie. Mikrousługi są zwykle tworzone w celu odpowiadania na żądania, często z interfejsu. Żądania mogą być oparte na protokole HTTP Rest lub gRPC. Usługi bezserwerowe reagują na zdarzenia. Architektura oparta na zdarzeniach jest idealna do przetwarzania krótkotrwałych zadań działających w tle.

Jakie scenariusze są odpowiednie dla bezserwerowych?

Serverless udostępnia poszczególne krótkotrwałe funkcje, które są wywoływane w odpowiedzi na działanie wyzwalacza. To sprawia, że idealnie nadają się do przetwarzania zadań w tle.

Aplikacja może wymagać wysłania wiadomości e-mail jako kroku w przepływie pracy. Zamiast wysyłać powiadomienie w ramach żądania mikrousługi, umieść szczegóły komunikatu w kolejce. Funkcja Azure może usunąć wiadomość z kolejki i asynchronicznie wysłać wiadomość e-mail. Może to poprawić wydajność i skalowalność mikrousługi. Poziomowanie obciążenia opartego na kolejce można zaimplementować, aby uniknąć wąskich gardeł związanych z wysyłaniem wiadomości e-mail. Ponadto ta autonomiczna usługa może być ponownie użyta jako narzędzie w wielu różnych aplikacjach.

Asynchroniczne komunikaty z kolejek i tematów to typowy wzorzec wyzwalania funkcji bezserwerowych. Jednak usługa Azure Functions może być wyzwalana przez inne zdarzenia, takie jak zmiany w usłudze Azure Blob Storage. Usługa, która obsługuje przekazywanie obrazów, może mieć funkcję platformy Azure odpowiedzialną za optymalizację rozmiaru obrazu. Funkcja może być wyzwalana bezpośrednio przez wstawianie do usługi Azure Blob Storage, co ogranicza złożoność operacji mikrousług.

Wiele usług ma długotrwałe procesy w ramach swoich przepływów pracy. Często te zadania są wykonywane w ramach interakcji użytkownika z aplikacją. Te zadania mogą zmusić użytkownika do oczekiwania, co negatywnie wpływa na ich doświadczenie. Przetwarzanie bezserwerowe oferuje doskonały sposób na przenoszenie wolniejszych zadań poza pętlę interakcji użytkownika. Te zadania można skalować z zapotrzebowaniem bez konieczności skalowania całej aplikacji.

Kiedy należy unikać rozwiązań bezserwerowych?

Rozwiązania bezserwerowe aprowizację i skalowanie na żądanie. Po wywołaniu nowego wystąpienia zimny start jest typowym problemem. Okres zimnego startu to czas potrzebny do udostępnienia tego wystąpienia. Zwykle to opóźnienie może trwać kilka sekund, ale może być dłuższe w zależności od różnych czynników. Po zainicjowaniu obsługi administracyjnej pojedyncze wystąpienie jest nadal aktywne, o ile odbiera okresowe żądania. Jeśli jednak usługa jest wywoływana rzadziej, platforma Azure może usunąć ją z pamięci i wymagać zimnego startu po ponownym wywołaniu. Zimne uruchomienia są również wymagane, gdy funkcja jest skalowana w poziomie do nowego wystąpienia.

Rysunek 3–9 przedstawia wzorzec zimnego startu. Zwróć uwagę na dodatkowe kroki wymagane, gdy aplikacja jest zimna.

Zimny i ciepły początek Rysunek 3-9. Zimny start a ciepły początek.

Aby całkowicie uniknąć zimnych startów, możesz przełączyć się z planu zużycia na dedykowany plan. Można również skonfigurować jedno lub więcej wstępnie rozgrzanych wystąpień przy uaktualnianiu planu Premium. W takich przypadkach, gdy trzeba dodać kolejną instancję, jest już gotowa do użycia. Te opcje mogą pomóc w ograniczeniu problemu z zimnym startem związanym z przetwarzaniem bezserwerowym.

Dostawcy usług w chmurze rozliczają się za bezserwerowe na podstawie czasu wykonywania obliczeń i zużywanej pamięci. Długotrwałe operacje lub obciążenia o dużym zużyciu pamięci nie zawsze są najlepszymi kandydatami do użycia bezserwerowego. Funkcje bezserwerowe faworyzują małe fragmenty pracy, które mogą być wykonywane szybko. Większość platform bezserwerowych wymaga wykonania poszczególnych funkcji w ciągu kilku minut. Domyślna wartość dla usługi Azure Functions to 5-minutowy czas przeznaczony na wykonanie funkcji, który można skonfigurować do 10 minut. Plan usługi Azure Functions w warstwie Premium może również wyeliminować ten problem, domyślnie ustawiając limit czasu na 30 minut, z nieograniczonym wyższym limitem, który można skonfigurować. Czas obliczeniowy nie jest czasem kalendarzowym. Bardziej zaawansowane funkcje korzystające z platformy Azure Durable Functions mogą wstrzymać wykonywanie w ciągu kilku dni. Rozliczenia są oparte na rzeczywistym czasie wykonywania — gdy funkcja zostaje uruchomiona i wznawia przetwarzanie.

Na koniec wykorzystanie usługi Azure Functions na potrzeby zadań aplikacji zwiększa złożoność. Warto najpierw zaprojektować aplikację przy użyciu modułowego, luźno powiązanego projektu. Następnie zidentyfikuj, czy istnieją korzyści bezserwerowe, które uzasadniają dodatkową złożoność.