Sdílet prostřednictvím


Osvědčené postupy pro trvalost

Tento dokument popisuje osvědčené postupy pro návrh a konfiguraci pracovního postupu související s trvalostí pracovního postupu.

Návrh a implementace trvalých pracovních postupů

Obecně platí, že pracovní postupy provádějí práci v krátkých obdobích prokládání s časy, během kterých je pracovní postup nečinný, protože čeká na událost. Tato událost může být například zpráva nebo časovač vypršení platnosti. Aby bylo možné uvolnit instanci pracovního postupu při nečinnosti, musí hostitel služby zachovat instanci pracovního postupu. To je možné pouze v případě, že instance pracovního postupu není v zóně bez zachování (například čekání na dokončení transakce nebo čekání na asynchronní zpětné volání). Aby se nečinná instance pracovního postupu mohla uvolnit, měl by autor pracovního postupu používat obory transakcí a asynchronní aktivity pouze pro krátkodobé akce. Autor by měl zejména uchovávat aktivity zpoždění v těchto zónách, které nejsou trvalé, co nejkratší.

Pracovní postup lze zachovat pouze v případě, že jsou všechny datové typy používané pracovním postupem serializovatelné. Kromě toho musí být vlastní typy používané v trvalých pracovních postupech serializovatelné, NetDataContractSerializer aby bylo možné je zachovat SqlWorkflowInstanceStore.

Instanci pracovního postupu nelze obnovit v případě selhání hostitele nebo počítače, pokud nebyla zachována. Obecně doporučujeme zachovat instanci pracovního postupu v rané fázi životního cyklu pracovního postupu.

Pokud je váš pracovní postup po dlouhou dobu zaneprázdněný, doporučujeme, abyste instanci pracovního postupu pravidelně uchovávaly v průběhu jeho zaneprázdněného období. Můžete to provést přidáním Persist aktivit v celé posloupnosti aktivit, které udržují instanci pracovního postupu zaneprázdněné. Recyklace domény aplikace, selhání hostitele nebo selhání počítače tímto způsobem nezpůsobí vrácení systému zpět na začátek období zaneprázdnění. Mějte na paměti, že přidání Persist aktivit do pracovního postupu může vést ke snížení výkonu.

Windows Server App Fabric výrazně zjednodušuje konfiguraci a použití trvalosti. Další informace najdete v tématu Trvalost prostředků infrastruktury aplikací pro Windows Server.

Konfigurace parametrů škálovatelnosti

Požadavky na škálovatelnost a výkon určují nastavení následujících parametrů:

Tyto parametry by měly být nastaveny následujícím způsobem podle aktuálního scénáře.

Scénář: Malý počet instancí pracovního postupu, které vyžadují optimální dobu odezvy

V tomto scénáři by všechny instance pracovního postupu měly zůstat načteny, když se stanou nečinné. Nastavte TimeToUnload na velkou hodnotu. Použití tohoto nastavení brání tomu, aby instance pracovního postupu přecházení mezi počítači. Toto nastavení použijte pouze v případě, že platí jedna nebo více z následujících možností:

  • Instance pracovního postupu obdrží během své životnosti jednu zprávu.

  • Všechny instance pracovního postupu běží na jednom počítači.

  • Všechny zprávy přijaté instancí pracovního postupu obdrží stejný počítač.

Pomocí Persist aktivit nebo nastavených TimeToPersist na hodnotu 0 povolte obnovení instance pracovního postupu po selhání hostitele služby nebo počítače.

Scénář: Instance pracovních postupů jsou nečinné po dlouhou dobu

V tomto scénáři nastavte TimeToUnload na hodnotu 0, aby se prostředky uvolnily co nejdříve.

Scénář: Instance pracovního postupu přijímají více zpráv v krátkém časovém období

V tomto scénáři nastavte TimeToUnload na 60 sekund, pokud jsou tyto zprávy přijaty stejným počítačem. Tím se zabrání rychlé sekvenci uvolňování a načítání instance pracovního postupu. To také neudržuje instanci v paměti příliš dlouho.

Nastavte TimeToUnload na 0 a nastavte InstanceLockedExceptionAction na BasicRetry nebo AggressiveRetry, pokud tyto zprávy mohou být přijaty různými počítači. To umožňuje načtení instance pracovního postupu jiným počítačem.

Scénář: Pracovní postup používá aktivity zpoždění s krátkými dobami trvání

V tomto scénáři SqlWorkflowInstanceStore se pravidelně dotazuje databáze trvalosti na instance, které by se měly načíst z důvodu aktivity s vypršenou Delay platností. SqlWorkflowInstanceStore Pokud najde časovač, jehož platnost vyprší v dalším intervalu dotazování, služba SQL Workflow Instance Store zkracuje interval dotazování. Další dotaz se pak zobrazí hned po vypršení platnosti časovače. Úložiště instancí pracovního postupu SQL tak dosahuje vysoké přesnosti časovačů, které běží déle než interval dotazování, který je nastaven .RunnableInstancesDetectionPeriod Aby bylo možné včasné zpracování kratších zpoždění, musí instance pracovního postupu zůstat v paměti po dobu nejméně jednoho intervalu dotazování.

Nastavte TimeToPersist na hodnotu 0 pro zápis doby vypršení platnosti do databáze trvalosti.

Pokud chcete zachovat instanci v paměti alespoň pro jeden interval dotazování, nastavte TimeToUnload na delší nebo rovnou RunnableInstancesDetectionPeriod .

Nedoporučujeme snižovat RunnableInstancesDetectionPeriod , protože to vede ke zvýšenému zatížení databáze trvalosti. Každý hostitel služby, který používá dotazování SqlWorkflowInstanceStore databáze jednou za období detekce. Nastavení RunnableInstancesDetectionPeriod příliš malého časového intervalu může způsobit snížení výkonu systému, pokud je velký počet hostitelů služeb.

Konfigurace úložiště instancí pracovního postupu SQL

Úložiště instancí pracovního postupu SQL má následující parametry konfigurace:

InstanceEncodingOption
Tento parametr dává pokyn SqlWorkflowInstanceStore ke komprimaci stavu instance pracovního postupu. Komprese snižuje množství dat uložených v databázi trvalosti a snižuje síťový provoz v případě, že se databáze trvalosti nachází na vyhrazeném databázovém serveru. Při použití komprese vyžaduje výpočetní prostředky ke komprimaci a extrahování stavu instance. Ve většině případů komprese zvyšuje výkon.

InstanceCompletionAction
Tento parametr dává pokyn SqlWorkflowInstanceStore k zachování nebo odstranění dokončených instancí. Udržování dokončených instancí zvyšuje požadavky na úložiště databáze trvalosti a vede k větším tabulkám, což zvyšuje doby vyhledávání tabulek. Pokud nejsou pro ladění nebo auditování potřeba dokončené instance, je nejlepší dát pokyn SqlWorkflowInstanceStore k odstranění dokončených instancí. Odstraněné instance by se měly uchovávat pouze v případě, že uživatel vytvoří proces pro jejich případné odebrání. Mějte na paměti, že klíče korelace nelze znovu použít, pokud se dokončená instance pracovního postupu nachází v úložišti instancí.

RunnableInstancesDetectionPeriod
Tento parametr definuje maximální interval, kdy se SqlWorkflowInstanceStore databáze trvalosti dotazuje na instance, které by se měly načíst při Delay vypršení platnosti aktivity. SqlWorkflowInstanceStore Pokud najde časovač, jehož platnost vyprší v dalším intervalu dotazování, zkracuje interval dotazování, aby další dotazování nastalo hned po vypršení platnosti časovače. Úložiště instancí pracovního postupu SQL tak dosahuje vysoké přesnosti časovačů, které běží déle než RunnableInstancesDetectionPeriod.

Nedoporučujeme snižovat RunnableInstancesDetectionPeriod, protože to vede ke zvýšenému zatížení databáze trvalosti. Každý hostitel služby, který používá dotazování SqlWorkflowInstanceStore databáze jednou za období detekce. Nastavení RunnableInstancesDetectionPeriod příliš malého intervalu může způsobit snížení výkonu systému, pokud je velký počet hostitelů služeb.

HostLockRenewalPeriod
Tento parametr definuje interval, pomocí kterého hostitel obnoví svůj zámek v databázi trvalosti. Zkrácení tohoto intervalu umožní rychlejší obnovení instancí pracovního postupu v případě selhání hostitele nebo počítače. Na druhou stranu krátké období prodlužování zámku zvyšuje zatížení databáze trvalosti. Každý hostitel služby, který používá, SqlWorkflowInstanceStore aktualizuje své zámky v databázi jednou za období prodloužení. Pokud počítač spouští mnoho hostitelů služeb, ujistěte se, že zatížení způsobené obnovením zámku nezmenší výkon systému. Pokud ano, zvažte zvýšení HostLockRenewalPeriod.

InstanceLockedExceptionAction
Pokud je tato možnost povolená, SqlWorkflowInstanceStore pokusy o načtení uzamčené instance po dobu dalších 30 sekund. Nastavte InstanceLockedExceptionAction na BasicRetry nebo AggressiveRetry, pokud pracovní postup přijímá více zpráv za krátkou dobu a tyto zprávy jsou přijímány různými počítači.

Vzhledem k tomu, že mechanismus opakování zatížení nezavádí žádné režijní náklady na výkon, pokud se pokusy o načtení nezkoušají, InstanceLockedExceptionAction je třeba je vždy povolit.