Rekomendacje dotyczące opracowywania zadań w tle
Dotyczy tego Power Platform zalecenia dotyczącego listy kontrolnej niezawodności Well-Architected Reliability:
RE:05 | Wzmacnianie odporności obciążenia przez implementowanie obsługi błędów i błędów przejściowych. Funkcje należy tworzyć w rozwiązaniu w celu obsługi awarii składników i błędów przejściowych. |
---|
W tym przewodniku opisano rekomendacje dotyczące tworzenia zadań w tle. Zadania w tle są uruchamiane automatycznie bez konieczności kontaktów z użytkownikiem. Wiele aplikacji wymaga zadań w tle, które są uruchamiane niezależnie od interfejsu użytkownika.
Niektóre przykłady zadań w tle to zadania wsadowe, zadania wymagające wielu zadań przetwarzania oraz długie procesy, takie jak przepływy pracy. Aplikacja uruchamia zadanie i przetwarza interakcyjne żądania od użytkowników.
Na przykład aplikacja może być potrzebna do wygenerowania podsumowania i wyodrębnienia opinii oraz kluczowych punktów z dokumentów przesyłanych przez użytkowników. Zadanie w tle można wykonać w celu wykonania akcji AI i zapisania podsumowania i kluczowych punktów bazy danych. Użytkownik nie musi czekać na zakończenie procesu. Jako kolejny przykład użytkownik może przesłać żądanie wydatków, które inicjuje przepływ pracy w tle, przetwarzający wnioski o zwrot wydatków i przesyła je do zatwierdzenia. Podczas pracy w tle użytkownik może zgłosić inne żądanie wydatków lub pozostawić działające zadanie w tle. Po zakończeniu zadania w tle jest wysyłana do użytkownika wiadomość e-mail z potwierdzeniem, że żądanie wydatków zostało przesłane do zatwierdzenia.
Zadania w tle pomagają zminimalizować obciążenia interfejsu użytkownika aplikacji, co poprawi dostępność i zmniejszy czas odpowiedzi interakcyjnych.
Kluczowe strategie projektowania
Aby wybrać zadanie wyznaczane jako zadanie w tle, należy się zastanowić, czy zadanie działa bez interakcji z użytkownikiem, oraz czy interfejs użytkownika musi poczekać na zakończenie zadania. Zadania, które wymagają od użytkownika lub interfejsu użytkownika oczekiwania na ich uruchomienie, nie są zazwyczaj odpowiednimi zadaniami w tle.
Typy zadań w tle
Przykłady zadań w tle:
Zadania wymagały wielu zasobów, które trzeba wykonać długo, np. wykonać serię transakcji.
Zadania wsadowe, takie jak nocna aktualizacja danych lub zaplanowane przetwarzanie.
Długie przepływy pracy, takie jak usługi i systemy obsługi zamówień lub inicjowanie obsługi administracyjnej.
Przepływy pracy wymagające asynchronicznej współpracy, takie jak zatwierdzenia.
Przetwarzanie danych poufnych, które zabezpiecza zadanie do bardziej bezpiecznego miejsca przetwarzania. Na przykład może nie być konieczne przetwarzanie poufnych danych w aplikacji internetowej. Zamiast tego można użyć wzorca, takiego jak wzorzec Gatekeeper, w celu przeniesienia danych do odizolowanego procesu w tle, który ma dostęp do chronionej pamięci masowej.
Wyzwalacze
Zainicjuj zadania w tle przy użyciu następujących elementów:
Wyzwalacze sterowane zdarzeniami: zdarzenie, czyli akcja użytkownika w aplikacji lub zdarzenie, które występuje względem źródła danych, wyzwala zadanie.
Wyzwalacze oparte na harmonogramie: harmonogram oparty na czasomierzu wywołuje zadanie. Zadanie można zaplanować cyklicznie lub pojedynczo.
Wyzwalacze oparte na zdarzeniu
Akcja powoduje wyzwolenie oparte na zdarzeniu, które powoduje uruchomienie zadania w tle. Przykłady wyzwalaczy opartych na zdarzeniu:
Interfejs użytkownika lub inne zadanie uruchamia zadanie w tle i przekazuje dane z wykonanej akcji do zadania w tle. Na przykład użytkownik przesyła za pośrednictwem formularza wnioski o koszty, a szczegóły formularza są przekazywane do zadania w tle w celu przetwarzania.
Interfejs użytkownika lub inne zadanie zapisuje lub aktualizuje wartość w magazynie. Zadanie w tle śledzi magazyn i wykrywa zmiany, takie jak dodawane nowe wartości lub istniejące wartości, które są modyfikowane, i uruchamia zadanie w tle na podstawie tej zmiany.
Interfejs użytkownika lub inne zadanie powoduje żądanie dla punktu końcowego, na przykład do identyfikatora URI HTTPS lub interfejsu API widocznego jako usługa internetowa. W ramach żądania interfejs użytkownika lub zadanie żąda danych wymaganych przez zadanie w tle. Punkt końcowy lub usługa internetowa wywołuje zadanie w tle, które używa danych jako swoich danych wejściowych.
Inne przykłady wyzwalaczy sterowanych zdarzeniami obejmują przesłanie formularza w aplikacji, dodanie nowego wiersza do magazynu danych, frazę wyzwalającą w drugim pilocie rozpoczynającą temat, który wywołuje przepływ, zmianę wartości pola w magazynie danych, wiadomość e-mail o określonym temacie lub od określonego nadawcy, która dociera do skrzynki odbiorczej, a plik jest przekazywany do lokalizacji przechowywania plików.
Użyj warunków wyzwalacza, aby usprawnić przepływy pracy i zmniejszyć liczbę niepotrzebnych przepływów pracy. Warunki wyzwalacza konfigurują wiele warunków, które muszą zostać spełnione przed wyzwoleniem przepływu pracy.
Uwaga
Aby zapobiec nieskończonym pętlom if, należy użyć warunków wyzwalacza, jeśli w ramach przepływu pracy zmieniasz źródło danych uruchamiające przepływ pracy. Na przykład aplikacja może zmienić pola w wierszu tabeli Microsoft Dataverse, a przepływ pracy może wykonywać dodatkowe zapytania na podstawie tych zmienionych pól, jeszcze bardziej modyfikując ten sam wiersz. Użyj warunków wyzwalacza, aby uruchomić przepływ pracy tylko wtedy, gdy pola zmienione przez aplikację zostaną zaktualizowane, ale nie żadne inne pola.
Wyzwalacze oparte na harmonogramie
Czasomierz powoduje wyzwolenie oparte na harmonogramie, które powoduje uruchomienie zadania w tle. Przykłady wyzwalaczy opartych na harmonogramie:
Zadanie w tle jest uruchamiane codziennie lub tygodniowo i wykonuje zestaw akcji.
Oddzielny proces lub aplikacja uruchamia czasomierz wywołujący zadanie w tle po opóźnieniu bądź o określonej godzinie.
Inne przykłady zadań, które pasują do wywoływania opartego na harmonogramie, obejmują procedury przetwarzania wsadowego (takie jak aktualizowanie pokrewnych list produktów dla klientów na podstawie ich ostatniego zachowania), procedury przetwarzania danych (np. generowanie akumulowanych wyników), analiza danych w raportach dziennych, oczyszczanie przechowywania danych i sprawdzanie spójności danych.
Zwracanie wyników
Zadania w tle są wykonywane asynchronicznie w ramach oddzielnego procesu niż interfejs użytkownika lub proces wywołujący zadanie w tle. Najlepiej jest, aby zadania w tle są operacjami typu uruchom i zapomnij. Ich postęp w czasie wykonywania nie wpływa na interfejs użytkownika ani proces wywołujący, co oznacza, że proces wywołujący nie oczekuje na zakończenie zadań. Interfejs użytkownika i proces wywołujący nie mogą wykryć zakończenia zadania.
Jeśli zadanie w tle ma komunikować się z zadaniem wywołującym w celu wskazania postępu lub ukończenia, należy zaimplementować mechanizm, taki jak:
Zapisz wartość wskaźnika stanu w magazynie dostępnym dla interfejsu użytkownika lub zadania wywołującego, które może monitorować lub sprawdzać tę wartość. Inne dane, które zadanie w tle zwraca do wywołującego, mogą być umieszczone w tym samym magazynie.
Udostępnij interfejs API lub punkt końcowy z zadania w tle, aby uzyskać dostęp do interfejsu użytkownika lub wywołującego, aby uzyskać informacje o stanie. Odpowiedź może zawierać dane, które zadanie w tle zwraca do wywołującego.
Skonfiguruj zadanie w tle, aby zareagować na stan lub dane, które zostały z powrotem przetworzone do interfejsu użytkownika.
Koordynacja
Zadania w tle mogą być złożone i mogą wymagać wielu zadań do wykonania. W tych scenariuszach często można podzielić zadanie na mniejsze, dyskretne kroki lub zadania podrzędne, które można uruchomić wiele razy. Zadania wieloetapowe są bardziej wydajne i bardziej elastyczne, ponieważ poszczególne kroki są często ponownie używane w wielu zadaniach. Można łatwo dodać, usunąć lub zmodyfikować kolejność kroków.
Koordynowanie wielu zadań i kroków może okazać się wyzwaniem, ale istnieją trzy typowe wzorce, które wspierające Twoje rozwiązanie:
Rozkładanie zadania na wiele kroków wielokrotnego użytku. Aplikacja może być wymagana do wykonywania różnych zadań o różnym stopniu złożoności informacji, które przetwarza. Prostym, ale nieelastycznym podejściem do implementowania takiej aplikacji jest wykonanie tego przetwarzania jako modułu monolitycznego. Jednak takie podejście prawdopodobnie zmniejszy szanse refaktoryzacji kodu, jego optymalizacji lub ponownego użycia, jeśli aplikacja wymaga części tego samego przetwarzania w innych miejscach.
Zarządzanie orkiestracją kroków dla zadania. Aplikacja może wykonywać zadania składające się z wielu kroków, z których niektóre mogą wywoływać usługi zdalne lub uzyskiwać dostęp do zdalnych zasobów. Czasami poszczególne kroki są niezależnie od siebie, ale są one sformatowane przez logikę aplikacji, która implementuje zadanie.
Zarządzanie odzyskiwaniem dla kroków zadania, które zakończyły się niepowodzeniem. Jeśli co najmniej jeden z kroków nie powiedzie się, aplikacja może cofnąć pracę wykonującą serię kroków, która razem definiuje ostatecznie spójną operację.
Kwestie dotyczące odporności
Twórz odporne zadania w tle w celu zapewnienia niezawodnych usług na poziomie aplikacji. Podczas planowania i projektowania zadań w tle należy wziąć pod uwagę następujące kwestie:
Zadania w tle trzeba ponownie uruchomić skutecznie bez uszkadzania danych ani wprowadzania niespójności do aplikacji. W przypadku zadań długotrwałych i wieloetapowych warto rozważyć użycie punktów kontrolnych. Punktów kontrolnych można użyć do zapisania stanu zadań w magazynie lub jako komunikatów w kolejce oraz skonfigurowania logiki ponowionych prób w przypadku nieoczekiwanych awarii akcji.
Gdy kolejki są używane do komunikacji z zadaniami w tle, kolejki mogą pełnić rolę bufora w celu przechowywania żądań wysyłanych do zadań, gdy aplikacja ma ładunek niższy od zwykłego. Zadania mogą na bieżąco dostosowywać się do interfejsu użytkownika podczas mniej zajętych okresów, a ponowne uruchamianie nie powoduje blokowania interfejsu użytkownika.
Zagadnienia dotyczące skalowania i wydajności
Zadania w tle muszą zapewniać odpowiednią wydajność, aby nie blokować aplikacji ani opóźniać operacji, kiedy system ma niedostateczny ładunek. Zazwyczaj wydajność poprawia się podczas skalowania wystąpień obliczeniowych hostujących zadania w tle. Podczas planowania i projektowania zadań w tle należy wziąć pod uwagę następujące kwestie związane ze skalowalnością i wydajnością:
Zadania w tle mogą mieć wpływ na pracę użytkownika, jeśli wyniki zadań w tle są przedstawione użytkownikowi. Na przykład zadania w tle mogą wymagać od użytkownika oczekiwania na powiadomienie, odświeżenia strony lub ręcznego sprawdzenia stanu zadania. Takie zachowanie może zwiększyć złożoność interakcji z użytkownikiem i negatywnie wpłynąć na działanie tego użytkownika. Rozważ alternatywy dla odpowiadania z powrotem na dane interfejsu użytkownika, takie jak wysyłanie powiadomienia pocztą e-mail lub przez aplikację Microsoft Teams lub w tym możliwość sprawdzania stanu aktualizacji w interfejsie użytkownika. W przykładzie przesyłania formularzy wydatków zamiast odpowiadać na stan z powrotem do interfejsu użytkownika, można w aplikacji uruchomić stronę z listą wszystkich przesłanych formularzy wydatków ze stanem i możliwością odświeżenia w celu wyzwalania odświeżenia.
Zadania w tle mogą tworzyć wyzwania dotyczące synchronizacji danych i koordynacji procesów, zwłaszcza jeśli zadania w tle są zależne od siebie lub od innych źródeł danych. Na przykład zadania w tle mogą obsługiwać problemy związane z spójność danych, warunki wyścigu, zakleszczenia lub limity czasu.
Aby zapobiec utracie wydajności pod obciążeniem, można zaimplementować logikę, tak aby pojedynczy punkt przetwarzania nie stanowił błędu. Należy wziąć pod uwagę inne ograniczenia, takie jak maksymalna przepływność akcji przepływu pracy, magazynu i innych usług, na których polegają aplikacja i zadania w tle.
Kompromis: Zadania w tle wprowadzają do systemu więcej komponentów i zależności, co może zwiększyć złożoność i koszty konserwacji rozwiązania. Na przykład zadania w tle mogą wymagać oddzielnej usługi monitorowania i mechanizmu ponawiania prób.
Ułatwienia Power Platform
W poniższych sekcjach opisano usługi, za pomocą których można hostować, uruchamiać i konfigurować zadania w tle oraz zarządzać nimi.
Power Automate
Power Automate Przepływy w chmurze to przepływy pracy uruchamiane w chmurze. Mogą to być zautomatyzowane przepływy, które są wyzwalane przez zdarzenie, np. przypływ wiadomości e-mail od określonej osoby. Mogą to być przepływy błyskawiczne, które można rozpocząć od kliknięcia przycisku, na przykład przypomnienie dla zespołu wysyłane z urządzenia przenośnego. Można zaplanować przepływy, które są uruchamiane o określonej godzinie, na przykład codzienne przekazywanie danych do SharePoint lub do bazy danych. Możesz także zautomatyzować powtarzalne zadania z pulpitu lub urządzenia przenośnego.
Zapoznaj się z limitami przepływów zautomatyzowanych, zaplanowanych i błyskawicznych w odniesieniu do przepływności, żądań, współbieżności, pętli i dzielenia partii na elementy. Podczas projektowania przepływu pracy należy pamiętać o uwzględnieniu tych ograniczeń.
Zmniejszaj ryzyko, planując obsługę błędów.
Oto kilka przykładów, w których można używać Power Automate przepływów do uruchamiania zadań w tle:
Microsoft Dataverse
Microsoft Dataverse Kolumny obliczeniowe i zestawienia:
Kolumny z formułami to kolumny, w których jest wyświetlana obliczona wartość w tabeli Microsoft Dataverse .
Kolumny obliczeniowe automatyzują ręczne obliczenia używane w procesie biznesowym. Na przykład sprzedawca może chcieć określić przychód ważony dla szansy sprzedaży wyznaczany przez pomnożenie przychodu szacowanego przez jego prawdopodobieństwo. W innym scenariuszu sprzedawca chce automatycznie stosować rabat, jeśli zamówienie przekracza określoną kwotę. Kolumna obliczeniowa może zawierać wartości, takie jak wyniki prostych operacji matematycznych lub warunkowych, takich jak „większe niż” lub instrukcja „if-else”.
Kolumny zestawień pomagają użytkownikom uzyskać wgląd w dane poprzez monitorowanie kluczowych metryk biznesowych. Kolumna zestawienia zawiera wartość zagregowaną, która jest obliczana dla wierszy powiązanych z określonym wierszem. Obejmuje to regularne tabele oraz tabele działań, takie jak wiadomości e-mail i terminy. W bardziej złożonych scenariuszach możesz agregować dane z hierarchią wierszy. Jako administrator lub konfigurator, możesz definiować kolumny zestawienia przy użyciu narzędzi dostosowywania w Power Apps, bez potrzeby przygotowywania przez dewelopera kodu.
Operacje w tle mogą wysyłać żądania, które Dataverse są przetwarzane asynchronicznie. Operacje w tle są przydatne, gdy użytkownik nie chce zachować połączenia w czasie działania żądania.
Wtyczki to niestandardowe programy obsługi zdarzeń, które są wykonywane w odpowiedzi na określone zdarzenie wywołane Microsoft Dataverse podczas przetwarzania operacji na danych.
Microsoft Dataverse oferuje także zaawansowane rozwiązanie służące do osiągania efektywniejszej architektury danych i zmniejszania obciążenia po stronie klienta za pomocą niskokodowych dodatków plug-in. Te dodatki plug-in są przepływami pracy używanymi wielokrotnie w czasie rzeczywistym, które mogą wykonać określony zestaw poleceń w Dataverse, uruchamiając je po stronie serwera i wyzwalając przez spersonalizowane programy obsługi zdarzeń.
Lista kontrolna niezawodności
Zapoznaj się z kompletną zestawem zaleceń.