이 튜토리얼에서는 워크플로 실행 속도를 조절할 수 있는 Cloud Tasks 큐를 만드는 방법을 보여줍니다.
활성 워크플로 실행이 동시에 발생할 수 있는 최대 개수가 존재합니다. 이 할당량이 소진되고 실행 백로그가 사용 중지되었거나 백로그된 실행의 할당량에 도달하면 새 실행은 HTTP 429 Too many requests
상태 코드와 함께 실패합니다. 사용자가 정의한 속도로 하위 워크플로를 실행하도록 Cloud Tasks 큐를 사용 설정하면 Workflows 할당량 관련 문제를 방지하고 실행 속도를 더 높일 수 있습니다.
Cloud Tasks는 전송을 '최소 1회' 하도록 설계되었습니다. 그러나 Workflows는 Cloud Tasks의 중복 요청을 단 한 번만 처리할 것임을 보장하지 않습니다.
다음 다이어그램에서 상위 워크플로는 전달 비율이 적용된 Cloud Tasks 큐로 규제되는 하위 워크플로를 호출합니다.
Cloud Tasks 큐 만들기
상위 워크플로에서 사용할 수 있으며 워크플로 실행 속도를 제어할 수 있는 Cloud Tasks 큐를 만듭니다.
콘솔
Google Cloud 콘솔에서 Cloud Tasks 페이지로 이동합니다.
푸시 큐 만들기를 클릭합니다.
큐 이름으로
queue-workflow-child
를 입력합니다.리전 목록에서 us-central1(아이오와)을 선택합니다.
만들기를 클릭합니다.
gcloud
QUEUE=queue-workflow-child LOCATION=us-central1 gcloud tasks queues create $QUEUE --location=$LOCATION
하위 워크플로 만들기 및 배포
하위 워크플로는 상위 워크플로에서 데이터를 수신하고 처리할 수 있습니다. 다음을 수행하는 하위 워크플로를 만들고 배포합니다.
- 인수로
iteration
을 수신합니다. - 10초 동안 절전 모드로 전환해서 일부 처리를 시뮬레이션합니다.
실행에 성공하면 문자열을 반환합니다.
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
만들기를 클릭합니다.
새 워크플로에 대해
workflow-child
이름을 입력합니다.리전 목록에서 us-central1(아이오와)을 선택합니다.
서비스 계정 목록에서 Compute Engine 기본 서비스 계정을 선택합니다.
다음을 클릭합니다.
워크플로 편집기에서 다음 워크플로 정의를 입력합니다.
배포를 클릭합니다.
gcloud
워크플로의 소스 코드 파일을 만듭니다.
touch workflow-child.yaml
텍스트 편집기에서 소스 코드 파일을 열고 다음 워크플로를 파일에 복사합니다.
워크플로 배포:
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
상위 워크플로 만들기 및 배포
상위 워크플로는 for
루프를 사용해서 하위 워크플로의 여러 분기를 실행합니다.
상위 워크플로를 정의하는 소스 코드를 복사합니다.
이 워크플로는 다음 단계로 구성됩니다.
하위 워크플로와 Cloud Tasks 큐 이름을 참조하는 상수를 할당하는 데 사용되는 맵입니다. 자세한 내용은 맵을 참조하세요.
하위 워크플로를 반복 호출하기 위해 실행되는
for
루프입니다. 자세한 내용은 반복을 참조하세요.하위 워크플로를 실행하기 위해 많은 수의 태스크를 만들어 Cloud Tasks 큐에 추가하는 워크플로 단계입니다. 자세한 내용은 Cloud Tasks API 커넥터를 참조하세요.
워크플로를 배포합니다.
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
만들기를 클릭합니다.
새 워크플로에 대해
workflow-parent
이름을 입력합니다.리전 목록에서 us-central1(아이오와)을 선택합니다.
서비스 계정 목록에서 Compute Engine 기본 서비스 계정을 선택합니다.
다음을 클릭합니다.
워크플로 편집기에서 상위 워크플로의 정의를 붙여넣습니다.
배포를 클릭합니다.
gcloud
워크플로의 소스 코드 파일을 만듭니다.
touch workflow-parent.yaml
텍스트 편집기에서 소스 코드 파일을 열고 상위 워크플로에 대한 정의를 붙여넣습니다.
워크플로를 배포합니다.
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
비율 제한 없이 상위 워크플로 실행
상위 워크플로를 실행하여 Cloud Tasks 큐를 통해 하위 워크플로를 호출합니다. 실행을 완료하는 데 약 10초 정도 걸립니다.
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
Workflows 페이지에서 workflow-parent 워크플로를 클릭하여 세부정보 페이지로 이동합니다.
Workflows 세부정보 페이지에서 play_arrow 실행을 클릭합니다.
실행을 다시 클릭합니다.
상위 워크플로가 실행 중일 때 Workflows 페이지로 돌아가 workflow-child 워크플로를 클릭하여 세부정보 페이지로 이동합니다.
실행 탭을 클릭합니다.
다음과 비슷하게 하위 워크플로가 거의 동시에 실행됩니다.
gcloud
워크플로를 실행합니다.
gcloud workflows run workflow-parent \ --location=us-central1
워크플로 실행이 트리거되었는지 확인하려면 마지막의 4개 실행을 나열합니다.
gcloud workflows executions list workflow-child --limit=4
실행 횟수인 100이 Workflows 동시 실행 한도보다 낮으므로 결과는 다음과 유사합니다. 동시에 수천 개의 실행을 제출하면 할당량 문제가 발생할 수 있습니다.
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/1570d06e-d133-4536-a859-b7b6a1a85524 STATE: ACTIVE START_TIME: 2023-07-27T00:56:15.093934448Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/82724960-7d92-4961-aa2c-a0f0be46212c STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.903007626Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/598126fb-37f9-45bc-91d8-aea7d795d702 STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.698260524Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/d2e9960b-f93f-4df4-a594-3e7e5c2be53f STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.503818840Z END_TIME:
이제 하위 워크플로 100회 반복을 호출하는 워크플로를 만들고 배포했습니다.
비율 제한을 사용하여 상위 워크플로 실행
Cloud Tasks 큐에 초당 디스패치 1회의 비율 제한을 적용한 다음 상위 워크플로를 실행합니다.
콘솔
Google Cloud 콘솔에서 Cloud Tasks 페이지로 이동합니다.
생성된 Cloud Tasks 큐인 queue-workflow-child를 클릭하고 큐 수정을 클릭합니다.
작업 디스패치의 비율 제한 섹션에서 최대 디스패치 필드에 1을 입력합니다.
저장을 클릭합니다.
Workflows 페이지로 이동합니다.
workflow-parent 워크플로를 클릭하여 세부정보 페이지로 이동합니다.
Workflows 세부정보 페이지에서 play_arrow 실행을 클릭합니다.
실행을 다시 클릭합니다.
상위 워크플로가 실행 중일 때 Workflows 페이지로 돌아가 workflow-child 워크플로를 클릭하여 세부정보 페이지로 이동합니다.
실행 탭을 클릭합니다.
다음과 비슷하게 하위 워크플로가 초당 요청 1회로 실행됩니다.
gcloud
Cloud Tasks 큐를 업데이트하여 초당 디스패치 1회의 비율 제한을 적용합니다.
gcloud tasks queues update $QUEUE \ --max-dispatches-per-second=1 \ --location=us-central1
워크플로를 실행합니다.
gcloud workflows run workflow-parent \ --location=us-central1
워크플로 실행이 트리거되었는지 확인하려면 마지막의 4개 실행을 나열합니다.
gcloud workflows executions list workflow-child --limit=4
결과는 다음과 비슷하게 초당 워크플로 하나가 실행됩니다.
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/becf4957-9fb2-40d9-835d-0ff2dd0c1249 STATE: ACTIVE START_TIME: 2023-07-27T01:07:24.446361457Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/6c1e7c4b-7ac6-4121-b351-1e2d56d10903 STATE: ACTIVE START_TIME: 2023-07-27T01:07:23.448213989Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/f2ba5027-af40-4cd3-8cd0-b8033bcc6211 STATE: ACTIVE START_TIME: 2023-07-27T01:07:22.431485914Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/ecc61ee5-fe87-49eb-8803-89dba929f6c8 STATE: ACTIVE START_TIME: 2023-07-27T01:07:21.443466369Z END_TIME:
초당 1회 실행의 디스패치 비율로 하위 워크플로 100회 반복을 호출하는 워크플로를 성공적으로 배포했습니다.