Artykuły | 3 listopad, 2021

Azure Serverless workflow orchestration

Automatyzacja procesów biznesowych jest naturalną transformacją, z którą musi się zmierzyć większość przedsiębiorstw. Nie jest to łatwa droga, bo wymaga ogromnej wiedzy i doświadczenia, jednakże nie jesteśmy w tym starciu na straconej pozycji! W niniejszym artykule chciałbym przedstawić rozwiązanie oparte na Azure Durable Function, które pozwoli ci przejść gładko przez ten proces.

Azure Serverless workflow orchestration

Czym jest Azure Durable Function?

Prawie zawsze nasz system nie jest po prostu zestawem funkcjonalności (FaaS – Function as a Service) czy modułów, ale zestawem funkcjonalności wzajemnie na siebie wpływających, zależnych od siebie, wchodzących ze sobą w interakcje. Właśnie dzięki Azure Durable Functions jesteśmy w stanie opanować ten proces. Azure Durable Function to orkiestrator sterujący całym procesem biznesowym, czyli naszym workflow. To rozszerzenie Azure Functions, które pozwala na optymalizację procesów w bezserwerowym środowisku.

Azure Durable Function składa się z 3 podstawowych typów bloków:

Orchestrator Azure

Client Function

Jest swego rodzaju „starterem”, który uruchamia pewien proces. Najczęściej jest wyzwalany przez http request, dodanie rekordu do bazy danych, upload pliku itd.

Orchestrator Function

Jest to proces sterujący naszym workflow. To tu decydujemy o kolejności kroków naszego procesu.

Activity Function

To konkretna funkcjonalność, np. pobranie rekordu z bazy danych, wysłanie maila, wystawienie faktury itd.

Azure Durable Function – jak to działa w praktyce?

Przyjmijmy na potrzeby przykładu, że prowadzimy sklep z odzieżą, w którym po zaksięgowaniu płatności chcemy przedstawić klientowi możliwe wersje kolorystyczne i po dokonaniu wyboru zamknąć zamówienie. Stan wyjściowy przedstawiałby się następująco:

Azure workflow - proces zakupowy

Spróbujmy odpowiedzieć na następujące pytania:

  • Na jakim etapie procesu akurat znajduje się klient?
  • Jak możemy wychwycić ewentualne błędy?
  • Czy w przypadku wystąpienia błędu możemy ponowić krok lub proces?
  • Czy możemy zrównoleglić poszczególne kroki?
  • W jaki sposób możemy otrzymać potwierdzenie wyboru przez klienta?

Jak widać, problemów jest wiele. Proces nie jest doskonały i nie da się go kontrolować w łatwy sposób. Zróbmy to, jak trzeba!

Zaczynamy od „startera”:

Azure Functions

Stworzyliśmy funkcję, która jest wyzwalana przez http request i otrzymuje informacje o zamówieniu. Jej kluczowym elementem jest obiekt typu IDurableOrchestrationClient, który uruchamia wybrany proces.

Pora na użycie orkiestratora. W swojej początkowej, uproszczonej postaci może po prostu wyglądać tak:

Azure functions starter

Jak widać, jest to miejsce, z poziomu którego możemy kontrolować cały proces zamówienia.

Poszczególne kroki procesu, czyli tzw. Activity Function, w dużym uproszczeniu, nie zagłębiając się w szczegóły, mogą po prostu wyglądać tak:

Azure functions proces

Wprowadźmy modyfikacje, tak aby jasne stały się odpowiedzi na wcześniej zadane pytania:

Azure order orchestrator
 class=

Prześledźmy ważne zmiany:

  • Dzięki zastosowaniu metody CallActivityWithRetryAsync jesteśmy w stanie powtórzyć krok w przypadku błędu.
  • Dzięki użyciu wzorca Fan-out Fan-in umożliwiliśmy znacznie szybsze wygenerowanie wersji kolorystycznych poprzez zrównoleglenie przetwarzania.
Fan-out / Fan-in
  • Jak widać, dzięki temu, że mamy orkiestrator, w łatwy sposób możemy użyć konstrukcji WhenAll dla osiągnięcia powyższego celu.

Dzięki użyciu wzorca Human Interaction udało nam się zasymulować oczekiwanie systemu na potwierdzenie przez użytkownika w zadanym czasie 24 godzin.

monitorowanie operacji workflow

Pozostaje kwestia monitorowania stanu procesu. Domyślnie po uruchomieniu orkiestratora otrzymujemy zestaw odnośników do listy operacji na workflow:

workflow orchestration Azure

Żeby sprawdzić bieżący status procesu, wystarczy wywołać statusQueryGetUri, w wyniku czego otrzymamy na przykład:

Azure workflow orchestrator

Widzimy zatem, że proces się zakończył i jest w stanie completed.

Azure Durable Function – zalety rozwiązania

  • Jest oparte na Microsoft Azure – platformie, z której na co dzień korzysta setki tysięcy ludzi.
  • Może pracować w trybie serverless, popularnie nazywanym pay-as-you-go – płacimy tylko za faktyczny czas korzystania z usługi.
  • Może być dowolnie skalowane w zależności od obciążenia – nie musimy niczego implementować ani ustawiać. Funkcja wyskaluje się do tego stopnia, żeby maksymalnie przyśpieszyć wykonanie zadania.
  • Każda funkcjonalność może być podzielona na osobne, niezależnie rozwijane moduły.
  • Każda funkcjonalność (funkcja) może być napisana w innym języku, np. C#, Java, JavaScript, Python itd.

Azure Durable Function – podsumowanie

Podsumowując, dzięki użyciu Azure Durable Function jesteśmy w stanie dowolnie zaprojektować skomplikowany workflow, w pełni go kontrolując. Funkcje natywne mogą współpracować z całym ekosystemem chmurowym, więc możliwości rozbudowy procesu są w zasadzie nieskończone. Dodatkowo mamy możliwość konteneryzacji funkcji w środowisku on-premise – ale to już temat na osobny artykuł.

Przeczytaj także: Kim jest DevOps i jak wspiera projekty?

Na co dzień biorący czynnie udział w realizacji projektów .NET dla klientów. Pracuje w zawodzie ponad 10 lat. Specjalizuje się w rozwiązaniach dotyczących aplikacji webowych. Po godzinach karateka, pływak, tata.

Zapisz się do newslettera, ekskluzywna zawartość czeka

Bądź na bieżąco z najnowszymi artykułami i wydarzeniami IT

Informacje dotyczące przetwarzania danych osobowych

Zapisz się do newslettera, ekskluzywna zawartość czeka

Bądź na bieżąco z najnowszymi artykułami i wydarzeniami IT

Informacje dotyczące przetwarzania danych osobowych

Zapisz się do newslettera, aby pobrać plik

Bądź na bieżąco z najnowszymi artykułami i wydarzeniami IT

Informacje dotyczące przetwarzania danych osobowych

Dziękujemy za zapis na newsletter — został ostatni krok do aktywacji

Potwierdź poprawność adresu e-mail klikając link wiadomości, która została do Ciebie wysłana w tej chwili.

 

Jeśli w czasie do 5 minut w Twojej skrzynce odbiorczej nie będzie wiadomości to sprawdź również folder *spam*.

Twój adres e-mail znajduje się już na liście odbiorców newslettera

Wystąpił nieoczekiwany błąd

Spróbuj ponownie za chwilę.

    Get notified about new articles

    Be a part of something more than just newsletter

    I hereby agree that Inetum Polska Sp. z o.o. shall process my personal data (hereinafter ‘personal data’), such as: my full name, e-mail address, telephone number and Skype ID/name for commercial purposes.

    I hereby agree that Inetum Polska Sp. z o.o. shall process my personal data (hereinafter ‘personal data’), such as: my full name, e-mail address and telephone number for marketing purposes.

    Read more

    Just one click away!

    We've sent you an email containing a confirmation link. Please open your inbox and finalize your subscription there to receive your e-book copy.

    Note: If you don't see that email in your inbox shortly, check your spam folder.