Examinar o ponto de verificação e o processamento paralelo

Concluído

Os fluxos de trabalho permitem implementar lógica complexa em seu código. Dois recursos disponíveis com fluxos de trabalho são pontos de verificação e processamento paralelo.

Pontos de verificação

Um ponto de verificação é um instantâneo do estado atual do fluxo de trabalho.

Os pontos de verificação incluem o valor atual para variáveis e qualquer saída gerada até esse ponto. (Para obter mais informações sobre o que é um ponto de verificação, leia a página da Web do ponto de verificação.)

Se um fluxo de trabalho terminar em um erro ou for suspenso, da próxima vez que for executado, ele será iniciado a partir de seu último ponto de verificação em vez de no início do fluxo de trabalho.

Você pode definir um ponto de verificação em um fluxo de trabalho com a atividade Checkpoint-Workflow .

Por exemplo, se ocorrer uma exceção após a Atividade2, o fluxo de trabalho terminará no código de exemplo a seguir.

Quando o fluxo de trabalho é executado novamente, ele começa com Activity2, seguido logo após o último conjunto de pontos de verificação.

    <Activity1>
        Checkpoint-Workflow
            <Activity2>
                <Exception>
            <Activity3>

Processamento paralelo

Um bloco de script tem vários comandos que são executados simultaneamente (ou em paralelo) em vez de sequencialmente, como para um script típico.

É conhecido como processamento paralelo. (Mais informações sobre processamento paralelo estão disponíveis no Página Web de processamento paralelo.)

No exemplo a seguir, duas VMs vm0 e vm1 serão iniciadas simultaneamente, e vm2 só será iniciado depois que vm0 e vm1 tiverem iniciado.

    Parallel
    {
        Start-AzureRmVM -Name $vm0 -ResourceGroupName $rg 
        Start-AzureRmVM -Name $vm1 -ResourceGroupName $rg
    }

    Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg 

Outro exemplo de processamento paralelo seriam as seguintes construções que introduzem algumas opções extras:

  • ForEach -Paralelo. Você pode usar a construção ForEach -Parallel para processar comandos simultaneamente para cada item em uma coleção. Os itens na coleção são processados em paralelo, enquanto os comandos no bloco de script são executados sequencialmente.

No exemplo a seguir, Activity1 começa ao mesmo tempo para todos os itens da coleção.

Para cada item, a Atividade2 começa após a conclusão da Atividade1 . A Atividade3 só começa após a conclusão da Atividade1 e da Atividade2 para todos os itens.

  • ThrottleLimit - Usamos o parâmetro ThrottleLimit para limitar o paralelismo. Muito alto de um ThrottleLimit pode causar problemas. O valor ideal para o parâmetro ThrottleLimit depende de vários fatores ambientais. Tente começar com um valor ThrottleLimit baixo e, em seguida, aumente o valor até encontrar um que funcione para suas circunstâncias específicas:
ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
    <Activity1>
    <Activity2>
}
<Activity3>

Um exemplo real disso pode ser semelhante ao seguinte código: uma mensagem é exibida para cada arquivo depois que ele é copiado. Somente depois que todos os arquivos forem copiados é exibida a mensagem de conclusão.

    Workflow Copy-Files
    {
        $files = @("C:\LocalPath\File1.txt","C:\LocalPath\File2.txt","C:\LocalPath\File3.txt")
   
        ForEach -Parallel -ThrottleLimit 10 ($File in $Files)
        {
            Copy-Item -Path $File -Destination \\NetworkPath
            Write-Output "$File copied."
        }
   
        Write-Output "All files copied."
    }