검사점 및 병렬 처리 살펴보기
워크플로를 통해 코드 내에서 복잡한 논리를 구현할 수 있습니다. 워크플로에 사용할 수 있는 두 가지 기능은 검사점과 병렬 처리입니다.
검사점
검사점은 워크플로의 현재 상태 스냅샷입니다.
검사점에는 변수의 현재 값과 해당 지점까지 생성된 모든 출력이 포함됩니다. (검사점에 대한 자세한 내용은 검사점 웹 페이지를 참조하세요.)
워크플로가 오류로 종료되거나 일시 중단된 경우 다음에 워크플로가 실행될 때 워크플로의 처음이 아닌 마지막 검사점부터 시작됩니다.
Checkpoint-Workflow 활동을 사용하여 워크플로에서 검사점을 설정할 수 있습니다.
예를 들어 Activity2 후에 예외가 발생하면 워크플로가 다음 샘플 코드로 종료됩니다.
워크플로를 다시 실행하면 마지막으로 설정된 검사점 바로 뒤에서 Activity2로 시작됩니다.
<Activity1>
Checkpoint-Workflow
<Activity2>
<Exception>
<Activity3>
병렬 처리
스크립트 블록에는 일반 스크립트처럼 순차적이 아닌 동시에(또는 병렬로) 실행되는 여러 명령이 있습니다.
이를 병렬 처리라고 합니다. (병렬 처리에 대한 자세한 내용은 병렬 처리 웹 페이지에서 확인할 수 있습니다.)
다음 예제에서 vm0 및 vm1 VM은 동시에 시작되고, vm2는 vm0 및 vm1이 시작된 후에만 시작됩니다.
Parallel
{
Start-AzureRmVM -Name $vm0 -ResourceGroupName $rg
Start-AzureRmVM -Name $vm1 -ResourceGroupName $rg
}
Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg
몇 가지 옵션을 추가하는 다음 구문은 병렬 처리의 또 다른 사례입니다.
- ForEach -Parallel. ForEach -Parallel 구문을 사용하여 컬렉션의 각 항목에 대한 명령을 동시에 처리할 수 있습니다. 이 경우 컬렉션의 항목은 병렬로 처리되지만 스크립트 블록의 명령은 순차적으로 실행됩니다.
다음 예제에서 Activity1은 컬렉션의 모든 항목과 동시에 시작됩니다.
각 항목에서 Activity2는 Activity1이 완료된 후에 시작됩니다. Activity3는 모든 항목에 대해 Activity1 및 Activity2가 완료된 후에만 시작됩니다.
- 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."
}