Korzystanie z funkcji bezserwerowych
Napiwek
Ta zawartość jest fragmentem książki eBook, Architekting Cloud Native .NET Applications for Azure, dostępnej na platformie .NET Docs lub jako bezpłatny plik PDF do pobrania, który można odczytać w trybie offline.
W spektrum od zarządzania maszynami fizycznymi po wykorzystanie możliwości chmury życie bezserwerowe 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ć w poziomie i w poziomie, aby zaspokoić zapotrzebowanie zgodnie z potrzebami. 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 swojej 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 zadań krótko działających w tle.
Jakie scenariusze są odpowiednie dla bezserwerowych?
Bezserwerowe uwidacznia poszczególne funkcje krótkie, które są wywoływane w odpowiedzi na wyzwalacz. 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 platformy Azure może dequeue wiadomości i asynchronicznie wysył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 zapewnia 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 środowisko. Przetwarzanie bezserwerowe zapewnia doskonały sposób przechodzenia 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ć bezserwerowych?
Rozwiązania bezserwerowe aprowizację i skalowanie na żądanie. Po wywołaniu nowego wystąpienia zimny start jest typowym problemem. Zimny start to okres potrzebny do aprowizowania 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.
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ń z uaktualnieniem planu Premium. W takich przypadkach, gdy trzeba dodać kolejne wystąpienie, jest już gotowe 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. Wartość domyślna usługi Azure Functions to 5-minutowy czas trwania, 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 limity czasu do 30 minut z niezwiązanym 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 wznawia 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ść.