Udostępnij za pośrednictwem


Najlepsze rozwiązania w zakresie stanów trwałych

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 utrwał wystąpienie przepływu pracy. Jest to możliwe tylko wtedy, gdy wystąpienie przepływu pracy nie znajduje się w strefie nietrwałej (na przykład oczekiwanie na zakończenie transakcji lub oczekiwanie na asynchroniczne wywołanie zwrotne). Aby umożliwić zwolnienie wystąpienia bezczynnego przepływu pracy, autor przepływu pracy powinien używać zakresów transakcji i działań asynchronicznych tylko w przypadku akcji krótkotrwałych. W szczególności autor powinien utrzymywać opóźnienia działań w tych strefach nietrwałych tak krótko, jak to 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 elementem NetDataContractSerializer w celu ich utrwalania przez SqlWorkflowInstanceStoreprogram .

Nie można odzyskać wystąpienia przepływu pracy w przypadku awarii hosta lub komputera, jeśli nie został 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 utrwalanie wystąpienia przepływu pracy przez cały okres zajętości. Można to zrobić, dodając Persist działania w całej sekwencji działań, które zachowują zajętość wystąpienia przepływu pracy. W ten sposób odtwarzanie domeny aplikacji, błędy hosta lub awarie komputera nie powodują wycofania systemu na początku okresu zajętości. 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 staną się bezczynne. 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 działań lub ustaw wartość TimeToPersist 0, aby włączyć odzyskiwanie wystąpienia 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 wartość TimeToUnload 0 tak szybko, 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 60 sekund, jeśli te komunikaty są odbierane przez ten sam komputer. Zapobiega to szybkiej sekwencji zwalniania i ładowania wystąpienia przepływu pracy. Nie powoduje to również zbyt długiego przechowywania wystąpienia w pamięci.

Ustaw TimeToUnload wartość 0 i ustaw wartość InstanceLockedExceptionAction 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 działań opóźnienia z krótkimi czasami trwania

W tym scenariuszu SqlWorkflowInstanceStore regularnie sonduje bazę danych trwałości dla wystąpień, które powinny zostać załadowane z powodu wygasłego Delay działania. 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 interwał sondowania.

Ustaw TimeToPersist wartość 0, aby zapisać czas wygaśnięcia bazy danych trwałości.

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

Nie zalecamy zmniejszenia wartości, RunnableInstancesDetectionPeriod ponieważ prowadzi to do zwiększonego obciążenia bazy danych trwałości. Każdy host usługi używający SqlWorkflowInstanceStore sonduje bazę danych jednorazowo na okres 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 parametr , SqlWorkflowInstanceStore aby skompresował stan wystąpienia przepływu pracy. Kompresja zmniejsza ilość danych przechowywanych w bazie danych trwałości i zmniejsza ruch sieciowy w przypadku, gdy baza danych trwałości 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 polecenie SqlWorkflowInstanceStore , aby zachować lub usunąć ukończone wystąpienia. Utrzymywanie ukończonych wystąpień zwiększa wymagania dotyczące magazynu bazy danych trwałości i prowadzi do większych tabel, co zwiększa czas wyszukiwania tabel. Jeśli nie są wymagane ukończone wystąpienia do debugowania lub inspekcji, najlepiej jest poinstruować SqlWorkflowInstanceStore , aby usunąć ukończone wystąpienia. Usunięte wystąpienia powinny być przechowywane tylko wtedy, gdy użytkownik ustanawia proces w celu ich końcu 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ł SqlWorkflowInstanceStore sondowania bazy danych trwałości dla wystąpień, które powinny zostać załadowane po Delay wygaśnięciu działania. 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 magazyn wystąpień przepływu pracy SQL osiąga wysoką dokładność czasomierzy, które działają dłużej niż RunnableInstancesDetectionPeriod.

Nie zalecamy zmniejszenia wartości RunnableInstancesDetectionPeriod, ponieważ prowadzi to do zwiększonego obciążenia bazy danych trwałości. Każdy host usługi używający SqlWorkflowInstanceStore sonduje bazę danych jednorazowo na okres 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 interwał, z którym host odnawia blokadę w bazie danych trwałości. 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 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 wartość BasicRetry lub AggressiveRetry, jeśli przepływ pracy odbiera wiele komunikatów w krótkim czasie, a te komunikaty 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ć.