Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit document bevat aanbevolen procedures voor werkstroomontwerp en -configuratie met betrekking tot persistentie van werkstromen.
Ontwerpen en implementeren van duurzame werkstromen
Over het algemeen voeren werkstromen werk uit in korte perioden, afgewisseld met perioden waarin de werkstroom niet actief is omdat deze wacht op een gebeurtenis. Deze gebeurtenis kan bijvoorbeeld een bericht of een verlopende timer zijn. Als u het werkstroomexemplaar wilt kunnen ontladen wanneer het inactief wordt, moet de servicehost het werkstroomexemplaar opslaan. Dit is alleen mogelijk als het werkstroomexemplaar zich niet in een niet-persisterende zone bevindt (Bijvoorbeeld wachten tot een transactie is voltooid of wachten op een asynchrone terugroepactie). Om toe te staan dat een niet-actieve workflow-exemplaar wordt ontladen, moet de auteur van de werkstroom transactiescopes en asynchrone activiteiten alleen gebruiken voor kortdurende acties. De auteur moet met name de vertraging van activiteiten binnen deze niet-persistente zones zo kort mogelijk houden.
Een werkstroom kan alleen worden bewaard als alle gegevenstypen die door de werkstroom worden gebruikt, serialiseerbaar zijn. Daarnaast moeten aangepaste typen die worden gebruikt in persistente werkstromen serialiseerbaar zijn met NetDataContractSerializer om door SqlWorkflowInstanceStore te kunnen worden opgeslagen.
Een workflow-exemplaar kan niet worden hersteld in het geval van een host- of computerfout als deze niet is opgeslagen. Over het algemeen raden we aan om een werkstroominstantie vroeg in de levenscyclus van de werkstroom op te slaan.
Als uw werkstroom lange tijd druk is, raden we u aan om de workflow-instantie gedurende de drukke periode regelmatig te behouden. U kunt dit doen door activiteiten toe te voegen Persist in de reeks activiteiten die het werkstroomexemplaar bezighoudt. Op deze manier zorgen recycling van toepassingsdomeinen, hostfouten of computerfouten er niet voor dat het systeem wordt teruggedraaid naar het begin van de drukke periode. Houd er rekening mee dat het toevoegen Persist van activiteiten aan uw werkstroom kan leiden tot een verslechtering van de prestaties.
Windows Server App Fabric vereenvoudigt de configuratie en het gebruik van persistentie aanzienlijk. Zie Windows Server App Fabric Persistence voor meer informatie
Configuratie van schaalbaarheidsparameters
Schaalbaarheids- en prestatievereisten bepalen de instellingen van de volgende parameters:
Deze parameters moeten als volgt worden ingesteld volgens het huidige scenario.
Scenario: Een klein aantal werkstroomexemplaren waarvoor een optimale reactietijd is vereist
In dit scenario moeten alle werkstroomexemplaren geladen blijven wanneer ze inactief zijn. Stel TimeToUnload in op een grote waarde. Het gebruik van deze instelling voorkomt dat een werkstroominstantie tussen computers wordt verplaatst. Gebruik deze instelling alleen als een of meer van de volgende waar zijn:
Een werkstroomexemplaar ontvangt tijdens zijn levensduur één bericht.
Alle werkstroomexemplaren worden uitgevoerd op één computer
Alle berichten die worden ontvangen door een werkstroomexemplaar, worden door dezelfde computer ontvangen.
Gebruik Persist activiteiten of stel TimeToPersist in op 0 om het herstel van uw workflow-exemplaar in te schakelen na storingen van de servicehost of computer.
Scenario: Werkstroomexemplaren zijn niet actief voor lange perioden
In dit scenario stelt u in op TimeToUnload 0 om zo snel mogelijk resources vrij te geven.
Scenario: Werkstroomexemplaren ontvangen meerdere berichten in een korte periode
In dit scenario, stel TimeToUnload in op 60 seconden als deze berichten door dezelfde computer worden ontvangen. Dit voorkomt een snelle reeks van het lossen en laden van een werkstroomexemplaar. Dit houdt de instantie ook niet te lang in het geheugen.
Ingesteld TimeToUnload op 0 en ingesteld InstanceLockedExceptionAction op BasicRetry of AggressiveRetry als deze berichten kunnen worden ontvangen door verschillende computers. Hierdoor kan het werkstroomexemplaar door een andere computer worden geladen.
Scenario: Werkstroom maakt gebruik van vertragingsactiviteiten met korte duur
In dit scenario wordt de SqlWorkflowInstanceStore persistentiedatabase regelmatig gecontroleerd op exemplaren die moeten worden geladen vanwege een verlopen Delay activiteit. Als SqlWorkflowInstanceStore een timer vindt die in het volgende polling-interval verloopt, verkort de SQL Workflow Instance Store het polling-interval. De volgende poll vindt plaats direct nadat de timer is verlopen. Op deze manier bereikt de SQL Workflow Instance Store een hoge nauwkeurigheid van timers die langer worden uitgevoerd dan het polling-interval, dat is ingesteld door RunnableInstancesDetectionPeriod. Om tijdige verwerking van kortere vertragingen mogelijk te maken, moet de workflowinstance gedurende ten minste één pollinginterval in het geheugen aanwezig blijven.
Ingesteld TimeToPersist op 0 om de verlooptijd naar de persistentiedatabase te schrijven.
Stel TimeToUnload in op langer dan of gelijk aan RunnableInstancesDetectionPeriod om de instantie in het geheugen te houden voor minstens één pollinginterval.
We raden u niet aan om het RunnableInstancesDetectionPeriod aantal te verminderen omdat dit leidt tot een verhoogde belasting van de persistentiedatabase. Elke servicehost die gebruikmaakt van de SqlWorkflowInstanceStore raadpleegt de database één keer per detectieperiode. Als u een te klein tijdsinterval kiest, kunnen de prestaties van uw systeem verminderen als het aantal service-hosts groot is.
De SQL Workflow Instance Store configureren
De SQL Workflow Instance Store heeft de volgende configuratieparameters:
InstanceEncodingOption
Met deze parameter wordt de staat van de SqlWorkflowInstanceStore werkstroominstantie gecomprimeerd. Compressie vermindert de hoeveelheid gegevens die zijn opgeslagen in de persistentiedatabase en vermindert het netwerkverkeer voor het geval de persistentiedatabase zich op een toegewezen databaseserver bevindt. Als compressie wordt gebruikt, moeten rekenbronnen de instantiestatus comprimeren en extraheren. In de meeste gevallen levert compressie betere prestaties op.
InstanceCompletionAction
Deze parameter geeft de SqlWorkflowInstanceStore opdracht voltooide exemplaren te behouden of te verwijderen. Het bijhouden van voltooide exemplaren verhoogt de opslagvereisten voor de persistentiedatabase en leidt tot grotere tabellen, waardoor de opzoektijden van tabellen toenemen. Tenzij voltooide exemplaren vereist zijn voor foutopsporing of controle, is het het beste om voltooide SqlWorkflowInstanceStore exemplaren te verwijderen. Verwijderde exemplaren moeten alleen worden bewaard als de gebruiker een proces tot stand brengt om ze uiteindelijk te verwijderen. Correlatiesleutels kunnen niet opnieuw worden gebruikt zolang het voltooide werkstroomexemplaar zich in de exemplaarkluis bevindt.
RunnableInstancesDetectionPeriod
Deze parameter definieert het maximuminterval waarmee de SqlWorkflowInstanceStore persistentiedatabase wordt opgevraagd voor exemplaren die moeten worden geladen wanneer een Delay activiteit verloopt. Als SqlWorkflowInstanceStore een timer vindt die in het volgende polling-interval verloopt, verkort het het polling-interval zodat de volgende poll direct plaatsvindt nadat de timer is verlopen. Op deze manier bereikt de SQL Workflow Instance Store een hoge nauwkeurigheid van timers die langer worden uitgevoerd dan RunnableInstancesDetectionPeriod.
We raden u niet aan om de RunnableInstancesDetectionPeriod te verlagen, omdat dit leidt tot een verhoogde belasting van de persistentiedatabase. Elke servicehost die gebruikmaakt van de SqlWorkflowInstanceStore raadpleegt de database één keer per detectieperiode. Wanneer u RunnableInstancesDetectionPeriod instelt op een te klein interval, kunnen de prestaties van uw systeem afnemen als het aantal servicehosts groot is.
HostLockRenewalPeriod
Deze parameter definieert het interval waarmee de host de vergrendeling in de persistentiedatabase verlengt. Door dit interval te verkorten, kun je de werkstroomexemplaren sneller herstellen als een host of computer uitvalt. Aan de andere kant verhoogt een korte verlengingsperiode voor vergrendeling de belasting van de persistentiedatabase. Elke servicehost die gebruikmaakt van de SqlWorkflowInstanceStore service werkt de vergrendelingen in de database één keer bij per verlengingsperiode. Als een computer veel servicehosts uitvoert, moet u ervoor zorgen dat de belasting die wordt veroorzaakt door het vernieuwen van vergrendelingen, de prestaties van uw systeem niet verlaagt. Als HostLockRenewalPeriod dan moet worden verhoogd, kunt u dit overwegen.
InstanceLockedExceptionAction
Als deze optie is ingeschakeld, probeert SqlWorkflowInstanceStore gedurende de komende 30 seconden een vergrendeld exemplaar te laden. Stel deze InstanceLockedExceptionAction optie in op BasicRetry of AggressiveRetry als de werkstroom in korte tijd meerdere berichten ontvangt en deze berichten worden ontvangen door verschillende computers.
Omdat het mechanisme voor het opnieuw laden geen prestatieoverhead veroorzaakt zolang er geen nieuwe pogingen worden gedaan, dient InstanceLockedExceptionAction altijd ingeschakeld te zijn.