Best practices voor persistentie
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 in korte perioden uit die interleaved zijn met tijden 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 werkstroomexemplaren wilt kunnen verwijderen wanneer het niet actief wordt, moet de servicehost het werkstroomexemplaren behouden. Dit is alleen mogelijk als het werkstroomexemplaren zich niet in een niet-persistente zone bevinden (bijvoorbeeld wachten tot een transactie is voltooid of wachten op een asynchrone callback). Als u wilt toestaan dat een niet-actief werkstroomexemplaren worden verwijderd, moet de auteur van de werkstroom alleen transactiebereiken en asynchrone activiteiten gebruiken voor kortdurende acties. De auteur moet met name de activiteiten in deze niet-persistente zones zo kort mogelijk vertragen.
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 om NetDataContractSerializer door te kunnen worden bewaard SqlWorkflowInstanceStore.
Een werkstroomexemplaren kunnen niet worden hersteld in het geval van een host- of computerfout als deze niet is behouden. Over het algemeen raden we u aan om een werkstroomexemplaren vroeg in de levenscyclus van de werkstroom te behouden.
Als uw werkstroom lang bezig is, raden we u aan het werkstroomexemplaren gedurende de drukke periode regelmatig te behouden. U kunt dit doen door activiteiten toe te voegen Persist in de reeks activiteiten die het werkstroomexemplaren bezet houden. 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 niet actief worden. Ingesteld TimeToUnload op een grote waarde. Het gebruik van deze instelling voorkomt dat een werkstroomexemplaren tussen computers worden verplaatst. Gebruik deze instelling alleen als een of meer van de volgende waar zijn:
Een werkstroomexemplaren ontvangen gedurende de hele levensduur één bericht.
Alle werkstroomexemplaren worden uitgevoerd op één computer
Alle berichten die worden ontvangen door een werkstroomexemplaren, worden ontvangen door dezelfde computer.
Gebruik Persist activiteiten of stel deze in op TimeToPersist 0 om het herstel van uw werkstroomexemplaren 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 stelt u in op TimeToUnload 60 seconden als deze berichten door dezelfde computer worden ontvangen. Dit voorkomt een snelle volgorde van het lossen en laden van een werkstroomexemplaren. Dit houdt het exemplaar 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 werkstroomexemplaren 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 er SqlWorkflowInstanceStore een timer wordt gevonden 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. Als u het tijdig verwerken van kortere vertragingen wilt inschakelen, moet het werkstroomexemplaren gedurende ten minste één polling-interval in het geheugen blijven.
Ingesteld TimeToPersist op 0 om de verlooptijd naar de persistentiedatabase te schrijven.
Ingesteld TimeToUnload op langer dan of gelijk aan RunnableInstancesDetectionPeriod om het exemplaar in het geheugen te houden voor ten minste één polling-interval.
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 polls van de database één keer per detectieperiode. Als RunnableInstancesDetectionPeriod u een te klein tijdsinterval instelt, kunnen de prestaties van uw systeem afnemen als het aantal servicehosts groot is.
De SQL Workflow Instance Store configureren
De SQL Workflow Instance Store heeft de volgende configuratieparameters:
InstanceEncodingOption
Met deze parameter wordt de status van het SqlWorkflowInstanceStore werkstroomexemplaren 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 raadzaam 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 werkstroomexemplaren zich in het exemplaararchief bevinden.
RunnableInstancesDetectionPeriod
Deze parameter definieert het maximuminterval waarmee de SqlWorkflowInstanceStore persistentiedatabase wordt opgevraagd voor exemplaren die moeten worden geladen wanneer een Delay activiteit verloopt. Als er SqlWorkflowInstanceStore een timer wordt gevonden die in het volgende polling-interval verloopt, wordt het polling-interval ingekort, zodat de volgende poll plaatsvindt 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 RunnableInstancesDetectionPeriod.
We raden u niet aan om de RunnableInstancesDetectionPeriod, omdat dit leidt tot een verhoogde belasting van de persistentiedatabase. Elke servicehost die gebruikmaakt van de SqlWorkflowInstanceStore polls van de database één keer per detectieperiode. Als RunnableInstancesDetectionPeriod u een te klein interval instelt, 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. Als u dit interval verkort, kunt u 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 dat het geval is, kunt u overwegen de HostLockRenewalPeriod.
InstanceLockedExceptionAction
Als deze optie is ingeschakeld, wordt geprobeerd SqlWorkflowInstanceStore een vergrendeld exemplaar voor de komende 30 seconden 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 proberen van belasting geen prestatieoverhead veroorzaakt zolang er geen nieuwe pogingen worden geprobeerd, InstanceLockedExceptionAction moet altijd worden ingeschakeld.