Udostępnij przez


Najlepsze rozwiązania dotyczące trwałości

W tym dokumencie opisano najlepsze rozwiązania dotyczące projektowania i konfigurowania przepływu pracy związane z trwałością przepływu pracy.

Projektowanie i implementacja trwałych przepływów pracy

Ogólnie rzecz biorąc, przepływy pracy wykonują pracę w krótkich okresach, które są przeplatane czasami, w których przepływ pracy jest bezczynny, ponieważ czeka na zdarzenie. To zdarzenie może być takie, jak komunikat lub wygasający czasomierz. Aby można było zwolnić wystąpienie przepływu pracy, gdy stanie się bezczynne, host usługi musi utrwalić wystąpienie przepływu pracy. Jest to możliwe tylko wtedy, gdy wystąpienie przepływu pracy nie znajduje się w strefie bez trwałości, na przykład podczas oczekiwania na zakończenie transakcji lub na asynchroniczne wywołanie zwrotne. Aby umożliwić zwolnienie wystąpienia nieaktywnego przepływu pracy, autor przepływu pracy powinien używać zakresów transakcji i działań asynchronicznych wyłącznie do krótkotrwałych działań. W szczególności autor powinien minimalizować czas trwania opóźnień działań w tych strefach nietrwałych, jak tylko możliwe.

Przepływ pracy można utrwalać tylko wtedy, gdy wszystkie typy danych używane przez przepływ pracy są serializowalne. Ponadto typy niestandardowe używane w utrwalonych przepływach pracy muszą być serializowalne z NetDataContractSerializer w celu ich utrwalania przez SqlWorkflowInstanceStore program.

Nie można odzyskać wystąpienia przepływu pracy w przypadku awarii hosta lub komputera, jeśli nie zostało utrwalone. Ogólnie rzecz biorąc, zalecamy utrwalanie wystąpienia przepływu pracy na wczesnym etapie cyklu życia przepływu pracy.

Jeśli przepływ pracy jest zajęty przez długi czas, zalecamy regularne zapisywanie wystąpienia przepływu pracy w okresie, gdy jest zajęty. Można to zrobić, dodając Persist działania w całej sekwencji działań, które utrzymują zajętość wystąpienia przepływu pracy. W ten sposób recykling domeny aplikacji, błędy hosta lub awarie komputera nie powodują wycofania systemu na początku okresu intensywnego użytkowania. Należy pamiętać, że dodawanie Persist działań do przepływu pracy może prowadzić do obniżenia wydajności.

Usługa Windows Server App Fabric znacznie upraszcza konfigurację i wykorzystanie trwałości. Aby uzyskać więcej informacji, zobacz Trwałość sieci szkieletowej systemu Windows Server

Konfiguracja parametrów skalowalności

Wymagania dotyczące skalowalności i wydajności określają ustawienia następujących parametrów:

Te parametry powinny być ustawione w następujący sposób, zgodnie z bieżącym scenariuszem.

Scenariusz: niewielka liczba wystąpień przepływu pracy, które wymagają optymalnego czasu odpowiedzi

W tym scenariuszu wszystkie wystąpienia przepływu pracy powinny pozostać załadowane, gdy znajdą się w stanie bezczynności. Ustaw TimeToUnload na dużą wartość. Użycie tego ustawienia uniemożliwia przenoszenie wystąpienia przepływu pracy między komputerami. Użyj tego ustawienia tylko wtedy, gdy co najmniej jedna z następujących wartości ma wartość true:

  • Wystąpienie przepływu pracy odbiera jeden komunikat przez cały okres jego istnienia.

  • Wszystkie wystąpienia przepływu pracy są uruchamiane na jednym komputerze

  • Wszystkie komunikaty odbierane przez wystąpienie przepływu pracy są odbierane przez ten sam komputer.

Użyj Persist aktywności lub ustaw TimeToPersist na 0, aby włączyć odzyskiwanie instancji przepływu pracy po awarii hosta usługi lub komputera.

Scenariusz: Wystąpienia przepływu pracy są bezczynne przez długi czas

W tym scenariuszu ustaw TimeToUnload na 0, aby zwolnić zasoby tak szybko, jak to możliwe.

Scenariusz: Wystąpienia przepływu pracy odbierają wiele komunikatów w krótkim czasie

W tym scenariuszu ustaw wartość TimeToUnload na 60 sekund, jeśli te same wiadomości są odbierane przez ten sam komputer. Zapobiega to szybkiemu sekwencyjnemu zwalnianiu i ładowaniu instancji przepływu pracy. Nie powoduje to również zbyt długiego przechowywania wystąpienia w pamięci.

Ustaw TimeToUnload na 0 i ustaw InstanceLockedExceptionAction na BasicRetry lub AggressiveRetry, jeśli te komunikaty mogą być odbierane przez różne komputery. Dzięki temu wystąpienie przepływu pracy może zostać załadowane przez inny komputer.

Scenariusz: przepływ pracy używa czynności opóźniających z krótkim czasem trwania

W tym scenariuszu SqlWorkflowInstanceStore regularnie przeszukuje bazę danych trwałości w poszukiwaniu wystąpień, które powinny zostać załadowane z powodu wygasłej aktywności Delay. SqlWorkflowInstanceStore Jeśli znajdzie czasomierz, który wygaśnie w następnym interwale sondowania, magazyn wystąpień przepływu pracy SQL skróci interwał sondowania. Następna ankieta zostanie wykonana bezpośrednio po wygaśnięciu czasomierza. W ten sposób magazyn wystąpień przepływu pracy SQL osiąga wysoką dokładność czasomierzy, które działają dłużej niż interwał sondowania, który jest ustawiany przez RunnableInstancesDetectionPeriod. Aby umożliwić terminowe przetwarzanie krótszych opóźnień, wystąpienie przepływu pracy musi pozostać w pamięci przez co najmniej jeden okres sondowania.

Ustaw TimeToPersist na 0, aby zapisać czas wygaśnięcia w bazie danych trwałości.

Ustaw TimeToUnload na wartość dłuższą lub równą RunnableInstancesDetectionPeriod, aby utrzymać wystąpienie w pamięci przez co najmniej jeden okres sondowania.

Nie zalecamy redukcji RunnableInstancesDetectionPeriod, ponieważ prowadzi to do zwiększonego obciążenia bazy danych. Każdy host usługi używający SqlWorkflowInstanceStore sprawdza bazę danych jednorazowo w trakcie okresu wykrywania. Ustawienie RunnableInstancesDetectionPeriod zbyt małego przedziału czasu może spowodować zmniejszenie wydajności systemu, jeśli liczba hostów usług jest duża.

Konfigurowanie magazynu wystąpień przepływu pracy SQL

Magazyn wystąpień przepływu pracy SQL ma następujące parametry konfiguracji:

InstanceEncodingOption
Ten parametr instruuje SqlWorkflowInstanceStore do skompresowania stanu wystąpienia przepływu pracy. Kompresja zmniejsza ilość danych przechowywanych w bazie danych trwałych i zmniejsza ruch sieciowy w przypadku, gdy baza danych trwałych znajduje się na dedykowanym serwerze bazy danych. Jeśli jest używana kompresja, wymaga zasobów obliczeniowych do skompresowania i wyodrębnienia stanu wystąpienia. W większości przypadków kompresja daje zwiększoną wydajność.

InstanceCompletionAction
Ten parametr instruuje SqlWorkflowInstanceStore , czy zachować lub usunąć ukończone wystąpienia. Utrzymywanie ukończonych wystąpień zwiększa wymagania magazynowe bazy danych trwałych i prowadzi do większych tabel, co zwiększa czas przeszukiwania tabel. Jeśli nie są wymagane ukończone wystąpienia do debugowania lub inspekcji, zaleca się poinstruować SqlWorkflowInstanceStore aby usunąć ukończone wystąpienia. Usunięte wystąpienia powinny być przechowywane tylko wtedy, gdy użytkownik ustanawia proces ich ostatecznego usunięcia. Należy pamiętać, że klucze korelacji nie mogą być ponownie używane, o ile ukończone wystąpienie przepływu pracy znajduje się w magazynie wystąpień.

RunnableInstancesDetectionPeriod
Ten parametr definiuje maksymalny interwał, z jakim SqlWorkflowInstanceStore sprawdza bazę danych trwałości, aby załadować wystąpienia, które powinny zostać załadowane, kiedy Delay działania wygasa. SqlWorkflowInstanceStore Jeśli znajdzie czasomierz, który wygaśnie w następnym interwale sondowania, skraca interwał sondowania, tak aby następny sondaż miał miejsce bezpośrednio po wygaśnięciu czasomierza. Dzięki temu repozytorium instancji przepływu pracy SQL osiąga wysoką dokładność czasomierzy, które działają dłużej niż RunnableInstancesDetectionPeriod.

Nie zalecamy zmniejszania RunnableInstancesDetectionPeriod, ponieważ prowadzi to do zwiększonego obciążenia bazę danych trwałych. Każdy host usługi używający SqlWorkflowInstanceStore sprawdza bazę danych jednorazowo w trakcie okresu wykrywania. Ustawienie RunnableInstancesDetectionPeriod zbyt małej liczby interwałów może spowodować zmniejszenie wydajności systemu, jeśli liczba hostów usług jest duża.

HostLockRenewalPeriod
Ten parametr definiuje okres, w którym host odnawia blokadę w bazie danych trwałych. Skrócenie tego interwału umożliwi szybsze odzyskiwanie wystąpień przepływu pracy w przypadku awarii hosta lub komputera. Z drugiej strony krótki okres odnawiania blokady zwiększa obciążenie bazy danych o trwałości. Każdy host usługi, który używa obiektu SqlWorkflowInstanceStore , zaktualizuje blokady w bazie danych jednorazowo na okres odnawiania. Jeśli na komputerze jest uruchomionych wiele hostów usług, upewnij się, że obciążenie spowodowane odnawianiem blokady nie zmniejsza wydajności systemu. Jeśli tak, rozważ zwiększenie wartości HostLockRenewalPeriod.

InstanceLockedExceptionAction
Jeśli to ustawienie jest włączone, SqlWorkflowInstanceStore ponawia próbę załadowania zablokowanego wystąpienia przez następne 30 sekund. Ustaw InstanceLockedExceptionAction na BasicRetry lub AggressiveRetry, jeśli przepływ pracy odbiera wiele komunikatów w krótkim okresie czasu, a komunikaty te są odbierane przez różne komputery.

Ponieważ mechanizm ponawiania obciążenia nie wprowadza żadnych obciążeń związanych z wydajnością, o ile nie są podejmowane próby ponawiania prób obciążenia, InstanceLockedExceptionAction zawsze należy je włączyć.