검사점 및 병렬 처리 살펴보기

완료됨

워크플로를 통해 코드 내에서 복잡한 논리를 구현할 수 있습니다. 워크플로에 사용할 수 있는 두 가지 기능은 검사점과 병렬 처리입니다.

검사점

검사점은 워크플로의 현재 상태 스냅샷입니다.

검사점에는 변수의 현재 값과 해당 지점까지 생성된 모든 출력이 포함됩니다. (검사점에 대한 자세한 내용은 검사점 웹 페이지를 참조하세요.)

워크플로가 오류로 종료되거나 일시 중단된 경우 다음에 워크플로가 실행될 때 워크플로의 처음이 아닌 마지막 검사점부터 시작됩니다.

Checkpoint-Workflow 활동을 사용하여 워크플로에서 검사점을 설정할 수 있습니다.

예를 들어 Activity2 후에 예외가 발생하면 워크플로가 다음 샘플 코드로 종료됩니다.

워크플로를 다시 실행하면 마지막으로 설정된 검사점 바로 뒤에서 Activity2로 시작됩니다.

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

병렬 처리

스크립트 블록에는 일반 스크립트처럼 순차적이 아닌 동시에(또는 병렬로) 실행되는 여러 명령이 있습니다.

이를 병렬 처리라고 합니다. (병렬 처리에 대한 자세한 내용은 병렬 처리 웹 페이지에서 확인할 수 있습니다.)

다음 예제에서 vm0vm1 VM은 동시에 시작되고, vm2vm0vm1이 시작된 후에만 시작됩니다.

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

    Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg 

몇 가지 옵션을 추가하는 다음 구문은 병렬 처리의 또 다른 사례입니다.

  • ForEach -Parallel. ForEach -Parallel 구문을 사용하여 컬렉션의 각 항목에 대한 명령을 동시에 처리할 수 있습니다. 이 경우 컬렉션의 항목은 병렬로 처리되지만 스크립트 블록의 명령은 순차적으로 실행됩니다.

다음 예제에서 Activity1은 컬렉션의 모든 항목과 동시에 시작됩니다.

각 항목에서 Activity2Activity1이 완료된 후에 시작됩니다. Activity3는 모든 항목에 대해 Activity1Activity2가 완료된 후에만 시작됩니다.

  • ThrottleLimit - ThrottleLimit 매개 변수를 사용하여 병렬 처리를 제한합니다. ThrottleLimit가 너무 높으면 문제가 발생할 수 있습니다. ThrottleLimit 매개 변수에 적합한 값은 여러 환경 요인에 따라 달라집니다. 낮은 ThrottleLimit 값으로 시작한 다음, 값을 조금씩 높이면서 해당 환경에 적합한 값을 찾는 것이 좋습니다.
ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
    <Activity1>
    <Activity2>
}
<Activity3>

실제 예제는 다음 코드와 비슷합니다. 복사 후 각 파일에 대한 메시지가 표시됩니다. 모든 파일이 복사된 후에만 완료 메시지가 표시됩니다.

    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."
    }