Práticas recomendadas de persistência
Este documento aborda as práticas recomendadas para o design e a configuração de fluxo de trabalho relacionados à persistência de fluxo de trabalho.
Design e implementação de fluxos de trabalho duráveis
Geralmente, os fluxos de trabalho executam o trabalho em curtas períodos que são intercalados com horários durante o qual o fluxo de trabalho estiver ocioso porque está aguardando um evento. Esse evento pode ser itens como uma mensagem ou um timer expira. Para poder descarregar o fluxo de trabalho métodos como exemplo quando fica ocioso, o serviço que o host deve manter a instância de fluxo de trabalho. Isso é possível somente se a instância de fluxo de trabalho não está em uma zona sem persistir (por exemplo, aguardando uma transação para concluir, ou aguardando um retorno de chamada assíncrona). Para permitir que uma instância ocioso de fluxo de trabalho descarregar, o autor de fluxo de trabalho deve usar escopos de transação e atividades assíncronas para uma breve ações somente. Em particular, o autor deve manter atividades de atraso nesses sem para persistir as zonas tão curto como possível.
Um fluxo de trabalho só pode ser persistido se todos os tipos de dados usados pelo fluxo de trabalho são serializados. Além disso, os tipos personalizados usados em fluxos de trabalho persistentes devem ser serializáveis com NetDataContractSerializer para ser persistido por SqlWorkflowInstanceStore.
Uma instância de fluxo de trabalho não pode ser recuperada em caso de uma falha de host do computador ou se não foi persistente. Em geral, recomendamos que você persistir uma instância de fluxo de trabalho no início do ciclo de vida de fluxo de trabalho.
Se seu fluxo de trabalho é muito ocupado por tempo, recomendamos que você persistir a instância de fluxo de trabalho regularmente ao longo do seu período ocupado. Você pode fazer isso adicionando atividades de Persist durante a sequência de atividades que mantém a instância de fluxo de trabalho ocupado. Assim, reciclagem do domínio de aplicativo, falhas host, ou falhas do computador não causam o sistema a ser rolado de volta para o início do período ocupado. Esteja ciente que adicionar atividades de Persist ao fluxo de trabalho pode levar a uma degradação de desempenho.
A tela de aplicativo Windows Server simplifica bastante a configuração e uso de persistência. Para obter mais informações, consulte Persistência do Windows Server App Fabric
Configuração de parâmetros de escalabilidade
Os requisitos de escalabilidade e desempenho determinam as configurações dos seguintes parâmetros:
Esses parâmetros devem ser definidos como segue, de acordo com o cenário atual.
Cenário: Um pequeno número de instâncias de fluxo de trabalho que exigem o tempo de resposta ótimo
Nesse cenário, todas as instâncias de fluxo de trabalho devem permanecer carregadas quando se tornam ociosos. Definir TimeToUnload para um valor grande. O uso dessa configuração impede que uma instância de fluxo de trabalho se mover entre computadores. Use essa configuração somente se um ou mais dos seguintes condições forem verdadeiras:
Uma instância de fluxo de trabalho recebe uma única mensagem em seu tempo de vida.
Todas as instâncias de fluxo de trabalho executadas em um único computador
Todas as mensagens que são recebidas por uma instância de fluxo de trabalho são recebidas pelo mesmo computador.
Use atividades de Persist ou TimeToPersist definido como 0 para ativar a recuperação de sua instância de fluxo de trabalho depois que falhas de host ou do computador de serviço.
Cenário: As instâncias de fluxo de trabalho são ociosos por longos períodos de tempo
Nesse cenário, defina TimeToUnload a 0 para liberar o mais rápido possível recursos.
Cenário: As instâncias de fluxo de trabalho vários recebem mensagens em um curto período de tempo
Nesse cenário, defina TimeToUnload como 60 segundos se essas mensagens são recebidas pelo mesmo computador. Isso evita uma sequência rápida de unload e carregar de uma instância de fluxo de trabalho. Isso também não mantém a instância na memória durante o suficiente tiempo.
Definir TimeToUnload a 0, e o conjunto InstanceLockedExceptionAction a BasicRetry ou a AggressiveRetry se essas mensagens podem ser recebidas por diferentes computadores. Isso permite que a instância de fluxo de trabalho é carregada por outro computador.
Cenário: Atividades de atraso dos usos de fluxo de trabalho com durações curtas
Nesse cenário, SqlWorkflowInstanceStore sonda regularmente o base de dados de persistência para as instâncias que devem ser carregadas devido a uma atividade expirada de Delay . Se SqlWorkflowInstanceStore encontrar um timer que expirou no intervalo de pesquisa seguir, a instância Store de fluxo de trabalho do SQL diminuirá o intervalo de pesquisa. A votação seguir ocorrerá em right após o timer expirou. Essa maneira, a instância Store de fluxo de trabalho do SQL obtém uma alta precisão de temporizadores que executam mais tempo do intervalo de pesquisa, que é definido por RunnableInstancesDetectionPeriod. Para ativar o processamento hábil de um atrasos mais curtas, a instância de fluxo de trabalho deve permanecer na memória pelo menos um intervalo de pesquisa.
Definir TimeToPersist a 0 para escrever o tempo de expiração a base de dados de persistência.
Definir TimeToUnload mais tempo que ou igual a RunnableInstancesDetectionPeriod para manter no mínimo a instância na memória um intervalo de pesquisa.
Não recomendamos reduzir RunnableInstancesDetectionPeriod porque isso resulta em uma carga na base de dados de persistência. Cada host serviço que usa SqlWorkflowInstanceStore sonda o base de dados uma vez por período de detecção. A configuração RunnableInstancesDetectionPeriod a um intervalo de tempo muito pequeno pode fazer com que o desempenho do sistema diminui se o número de host serviço é grande.
Configurando a instância Store de fluxo de trabalho do SQL
A instância Store de fluxo de trabalho do SQL possui os seguintes parâmetros de configuração:
InstanceEncodingOption
Este parâmetro instrui SqlWorkflowInstanceStore para compactar o estado da instância de fluxo de trabalho. A compactação reduz a quantidade de dados que são armazenados na base de dados de persistência e reduzir o tráfego de rede no caso do base de dados de persistência reside em um servidor de base de dados dedicado. Se a compactação é usado, requer recursos computacionais compactar e extrair o estado da instância. Na maioria dos casos, os passa de compactação aumentaram o desempenho.
InstanceCompletionAction
Este parâmetro instrui SqlWorkflowInstanceStore a mantém ou exclui instâncias concluídas. Manter instâncias concluídas aumenta os requisitos de armazenamento de base de dados de persistência e condu-los para tabelas maiores, o que aumenta tempo de pesquisa de tabela. A menos que as instâncias concluídas são necessárias depuração ou auditando, é melhor instruir SqlWorkflowInstanceStore para excluir instâncias concluídas. As instâncias excluídas devem ser mantidas somente se o usuário estabelece um processo para eventualmente as remover. Observe que as chaves de correlação não podem ser reutilizadas como a instância concluída de fluxo de trabalho reside no armazenamento de instância.
RunnableInstancesDetectionPeriod
Este parâmetro define o máximo intervalo com que SqlWorkflowInstanceStore sonda o base de dados de persistência para as instâncias que devem ser carregadas quando uma atividade de Delay expira. Se SqlWorkflowInstanceStore encontrar um timer que expirou no intervalo de pesquisa seguir, diminuirá o intervalo de pesquisa de modo que a votação seguir ocorre direita após o timer expirou. Essa maneira, a instância Store de fluxo de trabalho do SQL obtém uma alta precisão de temporizadores que executam mais tempo de RunnableInstancesDetectionPeriod.
Não recomendamos reduzir RunnableInstancesDetectionPeriod, porque isso resulta em uma carga na base de dados de persistência. Cada host serviço que usa SqlWorkflowInstanceStore sonda o base de dados uma vez por período de detecção. A configuração RunnableInstancesDetectionPeriod a um intervalo muito pequeno pode fazer com que o desempenho do sistema diminui se o número de host serviço é grande.
HostLockRenewalPeriod
Este parâmetro define o intervalo com que o host renova o bloqueio na base de dados de persistência. Reduzir esse intervalo permitirá uma recuperação mais rápido de instâncias de fluxo de trabalho no caso de um host ou um computador falhará. Por outro lado, um período curta de renovação de bloqueio aumenta a carga na base de dados de persistência. Cada host serviço que usa SqlWorkflowInstanceStore atualizará os bloqueios na base de dados uma vez por período de renovação. Se um computador executa muitos host serviço, certifique-se de que a carga causada pela renovação de bloqueio não reduz o desempenho do sistema. Se fizer isso, para ver aumentar HostLockRenewalPeriod.
InstanceLockedExceptionAction
Se ativado, SqlWorkflowInstanceStore tentar de volta para carregar uma instância bloqueado para os próximos 30 segundos. Definir InstanceLockedExceptionAction a BasicRetry ou a AggressiveRetry se o fluxo de trabalho recebe mais mensagens em um curto período de tempo, e essas mensagens são recebidas por diferentes computadores.
Porque o mecanismo do tentativa de carregamento não apresenta nenhuma sobrecarga de desempenho como novas tentativas de carregamento não são tentadas, InstanceLockedExceptionAction deve sempre ser ativado.