개별 작업 태스크 또는 작업 실행도 여러 가지 이유로 실패할 수 있습니다. 이 페이지에서는 태스크 재시작 및 작업 체크포인트를 중심으로 이러한 실패를 해결하는 권장사항을 제시합니다.
태스크 재시도 사용
개별 작업 태스크는 애플리케이션 종속 항목 문제, 할당량 초과, 내부 시스템 이벤트 등 다양한 이유로 실패할 수 있습니다. 이러한 문제는 일시적인 경우가 많으며 재시도 후 태스크가 성공할 수 있습니다.
기본적으로 각 태스크는 최대 3번까지 자동으로 재시도됩니다. 이렇게 하면 일시적인 태스크 실패에 직면하더라도 작업이 완료되도록 하는 데 도움이 됩니다. 최대 재시도 횟수를 맞춤설정하는 것도 가능합니다. 하지만 기본값을 변경할 때는 최소 한 번 이상 재시도를 지정해야 합니다.
작업 태스크 재시작 계획
태스크가 재시작되어 출력이 손상되거나 중복되지 않도록 작업이 멱등성을 갖도록 합니다. 즉, 반복 횟수 또는 실행 시점에 관계없이 특정 입력 세트에 대해 동일한 동작을 갖는 반복 가능한 논리를 작성합니다.
입력 데이터와 다른 위치에 출력을 작성하여 입력 데이터를 그대로 유지합니다. 이렇게 하면 작업이 다시 실행될 때 작업이 프로세스를 처음부터 반복하여 동일한 결과를 얻을 수 있습니다.
동일한 고유 식별자를 재사용하거나 출력이 이미 있는지 확인하여 출력 데이터가 중복되지 않도록 합니다. 중복 데이터는 컬렉션 수준 데이터 손상을 나타냅니다.
체크포인트 사용
가능한 경우 실패 후 태스크가 다시 시작되어도 작업을 처음부터 다시 시작하는 대신 중단된 부분부터 다시 진행할 수 있도록 작업 체크포인트를 저장합니다. 이렇게 하면 작업 속도가 빨라지고 불필요한 비용이 최소화됩니다.
Cloud Storage 또는 데이터베이스와 같은 영구 스토리지 위치에 부분적인 결과와 진행률 표시를 주기적으로 작성합니다. 태스크가 시작되면 시작 시에 부분적인 결과를 찾습니다. 부분적인 결과가 발견되면 중단된 지점부터 처리를 시작합니다.
작업이 체크포인트에 적합하지 않은 경우 더 작은 청크로 나누어 더 많은 수의 태스크를 실행하는 것이 좋습니다.
체크포인트 예시 1: 원주율 계산
Pi를 여러 소수 자릿수로 계산하는 등 재귀 알고리즘을 실행하는 작업이 있고 값을 1로 설정한 동시 로드를 사용하는 경우:
- 10분마다 진행률을 기록하거나 손실된 작업 허용 범위에 따라
pi-progress.txt
Cloud Storage 객체에 기록합니다. - 태스크가 시작되면
pi-progress.txt
객체를 쿼리하고 이 값을 시작점으로 로드합니다. 이 값을 함수의 초기 입력으로 사용합니다. - 최종 결과를 Cloud Storage에 작성할 때 병렬 실행 또는 반복 실행을 통한 중복을 방지하려면
pi-complete.txt
를 객체로 사용하고, 완료 날짜를 기준으로 구분하려면pi-complete-DATE.txt
를 사용합니다.
체크포인트 예시 2: Cloud SQL에서 레코드 10,000개 처리
Cloud SQL과 같은 관계형 데이터베이스에서 레코드 10,000개를 처리하는 작업이 있는 경우:
SELECT * FROM example_table LIMIT 10000
과 같은 SQL 쿼리로 처리할 레코드를 검색합니다.- 중요한 처리 작업이 중단시 손실되지 않도록 업데이트된 레코드를 100개 단위의 배치로 작성합니다.
- 레코드가 기록되면 처리된 레코드를 기록해 둡니다. 처리가 확인된 경우에만 1로 설정된 테이블에 처리된 불리언 열을 추가할 수 있습니다.
- 태스크가 시작되면 처리할 항목을 검색하는 데 사용되는 쿼리에 처리됨 = 0 조건이 추가되어야 합니다.
- 재시도를 정리하는 것 외에도 이 기법은 작업을 작은 태스크로 분할하도록 지원합니다. 예를 들어 한 번에 100개의 레코드를 선택하도록 쿼리를 수정하고(
LIMIT 100 OFFSET $CLOUD_RUN_TASK_INDEX*100
) 100개의 태스크를 실행하여 10,000개의 레코드를 모두 처리할 수 있습니다.CLOUD_RUN_TASK_INDEX
는 Cloud Run 작업을 실행하는 컨테이너 내에 있는 기본 제공 환경 변수입니다.
이러한 모든 요소를 함께 사용하면 최종 쿼리가 다음과 같이 표시될 수 있습니다.
SELECT * FROM example_table WHERE processed = 0 LIMIT 100 OFFSET $CLOUD_RUN_TASK_INDEX*100
다음 단계
- Cloud Run 작업을 만들려면 작업 만들기를 참조하세요.
- 작업을 실행하려면 작업 실행을 참조하세요.
- 일정에 따라 작업을 실행하려면 일정에 따라 작업 실행을 참조하세요.