이 페이지에서는 Cloud Tasks 태스크 및 큐의 정의, 사용하는 경우, 사용 방법을 설명합니다. Cloud Tasks를 사용하면 기본 애플리케이션 흐름 외부에서 독립적으로 수행할 수 있는 작업을 분리하여 핸들러를 사용하여 비동기식으로 처리되도록 보낼 수 있습니다. 이처럼 독립적인 작업을 태스크라고 합니다. 예를 들어 사용자 요청을 처리할 때 데이터베이스를 업데이트해야 하지만 이는 시간이 오래 걸릴 수 있습니다. 그 세부정보를 태스크로 오프로드하면 요청으로부터 더 신속하게 처리할 수 있습니다.
오프로드한 태스크는 큐에 추가되고, 태스크가 성공적으로 실행될 때까지 큐는 태스크를 지속합니다. 큐는 초기 구성을 기반으로 전달 흐름 제어 역할을 할 수도 있습니다. 큐를 생성하여 구성하면 Cloud Tasks 서비스에서 큐를 관리합니다. 태스크가 추가되면 큐에서 태스크를 전달하고 작업자가 안정적으로 처리하도록 합니다. 사용자 대상 지연 시간 비용, 서버 다운, 리소스 사용 제한, 재시도 관리와 같은 절차 관련 복잡성은 서비스를 통해 처리됩니다.
Cloud Tasks는 '최소 1회' 전송하도록 설계되었습니다. 따라서 태스크가 성공적으로 추가되면 큐는 태스크를 최소 1회 이상 핸들러에 전송합니다. 드물기는 하지만 여러 작업을 실행할 수 있으므로 반복 실행으로 인해 유해한 부작용이 발생하지 않도록 코드를 작성해야 합니다. 핸들러는 멱등성이 있어야 합니다.
작업 자체는 고유한 이름 및 구성 정보뿐만 아니라 요청을 처리하는 데 필요한 페이로드라고 하는 초기 요청의 모든 데이터(선택사항)로 이루어집니다. 페이로드는 요청 본문으로 전송되므로 페이로드를 포함하는 작업은 POST 또는 PUT를 HTTP 메소드로 사용해야 합니다.
Cloud Tasks API를 사용하여 Cloud Tasks 서비스에 액세스하려면 Google Cloud 프로젝트가 있어야 합니다.
사용 사례
일반적인 사용 사례는 다음과 같습니다.
- 데이터베이스 업데이트와 같이 잠재적으로 속도가 느린 백그라운드 작업을 작업자에게 위임하여 사용자 응답 속도를 높입니다.
- 예상치 못한 프로덕션 이슈가 발생하는 경우 요청을 보존합니다.
- 사용자 대상이 아닌 작업을 기본 사용자 흐름에서 삭제하여 트래픽 급증을 원활하게 처리합니다.
- 타사 API 호출 비율 관리
HTTP Target이 있는 Cloud Tasks 큐
일반 HTTP Target의 경우 Cloud Tasks 서비스는 태스크 구성 방식에 따라 일반 HTTP 엔드포인트에 있는 작업자에게 태스크 요청을 전달합니다. 이 엔드포인트는 태스크가 구성된 방식에 따라 Cloud Run 함수, Cloud Run, GKE, Compute Engine 또는 온프렘 웹 서버에 있을 수 있습니다. 이러한 큐는 안정적이고 구성 가능한 속도로 요청을 전송합니다. 이를 통해 태스크가 안정적으로 실행됩니다. 성공 시 모든 작업자는 기본 10분, 최대 30분의 제한 시간 전에 HTTP 응답 코드(200-299)를 Cloud Tasks 서비스에 보내야 합니다. 다른 응답이 전송되는 경우나 응답이 없는 경우 태스크를 다시 시도합니다.
Target은 증가하는 작업자를 관리하고 완료되면 태스크를 삭제해야 합니다.
Target에 인증이 필요한 경우 최대 2개의 서비스 계정을 설정해야 합니다. 이때 하나는 클라이언트인 애플리케이션용이고 다른 하나는 큐 자체용입니다. 두 계정 모두에 필수 권한을 부여하고 클라이언트 서비스 계정의 식별자를 태스크 요청에 포함시켜야 합니다. 자세한 내용은 HTTP Target 태스크 만들기를 참조하세요.
App Engine Target이 있는 Cloud Tasks 큐
Cloud Tasks는 다음 App Engine 환경과 호환됩니다.
- App Engine 표준 환경 2세대 런타임
- App Engine 가변형 환경
현재 Task Queue API를 사용하는 App Engine 1세대 런타임 사용자는 Cloud Tasks로 마이그레이션할 수 있습니다. 자세한 내용은 기존 번들 서비스 마이그레이션을 참조하세요. 번들 태스크 서비스를 사용하지 않는 App Engine 1세대 런타임 사용자는 2세대 런타임으로 업그레이드하여 Cloud Tasks를 사용할 수 있습니다.
App Engine Target의 경우 Cloud Tasks 서비스는 태스크 요청을 핸들러로 전달하지만 이 작업자는 App Engine 내에 있습니다. 따라서 App Engine 핸들러를 타겟팅하는 모든 큐에는 App Engine 앱이 있어야 합니다. 핸들러는 App Engine 앱이 실행되는 리전에서 실행되어야 합니다. 이 리전은 Cloud Tasks 요청의 LOCATION_ID 매개변수로도 사용됩니다.
태스크는 태스크(또는 드물게 큐 자체)의 구성 방식에 따라 라우팅됩니다. 큐는 안정적이고 구성 가능한 속도로 요청을 전송합니다. 이를 통해 태스크가 안정적으로 실행됩니다. 성공 시 모든 작업자는 서비스의 인스턴스 확장 유형에 따라 기한(자동 확장의 경우 10분, 수동 확장의 경우 최대 24시간) 전에 HTTP 응답 코드(200-299)를 Cloud Tasks 서비스에 보내야 합니다. 다른 응답이 전송되는 경우나 응답이 없는 경우 태스크를 다시 시도합니다.
핸들러는 App Engine의 일부이므로 Cloud Tasks 서비스는 태스크의 수많은 프로세스를 관리하므로 트래픽에 맞게 작업자를 증가 및 감소시키고 완료되면 태스크를 삭제합니다.
대상별 지원되는 리전
대상이 HTTP/S 엔드포인트인 경우 Cloud Tasks는 Cloud Tasks에 지원되는 모든 Google Cloud 리전에서 사용할 수 있습니다.
대상이 현재 프로젝트 내에 있는 App Engine 애플리케이션인 경우:
App Engine을 대상으로 하는 태스크는 프로젝트의 App Engine 리전에서만 만들 수 있습니다.
Google Cloud 프로젝트는 App Engine 앱을 하나만 포함할 수 있으며, App Engine 앱이 위치한 리전은 앱 생성 후 변경할 수 없습니다.
App Engine은 리전을 기준으로 합니다. 즉, 앱을 실행하는 인프라가 특정 리전에 위치합니다. 컴퓨팅 및 큐를 여러 리전에 배포하려면 HTTP/S 엔드포인트를 대신 타겟팅해야 합니다.
App Engine을 대상으로 사용하지 않는 경우 App Engine 앱을 배포할 필요가 없으며 기존 App Engine 앱을 사용 중지할 수 있습니다.
워크플로
일반적인 워크플로는 다음과 같습니다.
- 태스크를 처리할 작업자를 만듭니다.
- 큐를 만듭니다.
- 태스크를 프로그래매틱 방식으로 만들어서 큐에 추가합니다.
- Cloud Tasks 서비스가 원래 애플리케이션에 확인을 반환합니다. 이는 태스크가 Cloud Task 스토리지에 성공적으로 기록되어 태스크 만들기 요청의 가용성과 내구성이 향상되었음을 나타냅니다.
- 태스크가 작업자에게 전달됩니다.
- 작업자가 태스크를 처리합니다.
- 시퀀스를 완료하려면 작업자가 2xx 성공 상태 코드를 Cloud Tasks 서비스에 반환합니다.
태스크가 큐에 전달되면 초기 요청에 사용할 수 있는 데이터가 없습니다.
특성
Cloud Tasks를 사용하면 다음 컨트롤을 사용하여 비동기 작업 항목을 전달할 수 있습니다.
- 특정 전송 시간 예약
- 전달 속도 관리
- 재시도 동작 구성
- 큐의 개별 태스크 액세스 및 관리
- 태스크 중복 삭제 사용
약관
다음 표에는 Cloud Tasks 동작을 설명하는 주요 용어가 나와 있습니다.
용어 | 정의 |
---|---|
큐 | 단일 구성을 통해 관리되는 같은 대상 유형을 갖는 태스크 집합입니다. |
대상 유형 | 작업이 처리되는 위치와 그 방법입니다. |
작업자 | 작업을 처리하는 서비스입니다. |
시도 | 작업을 실행하려는 시도입니다. |
시도 전달 | Cloud Tasks가 작업을 대상에 보낸 순간입니다. |
시도 응답 | 태스크와 관련된 처리가 성공적으로 완료되었거나 실패했음을 나타내는 작업자의 응답입니다. |
다시 시도 | 태스크 실행을 여러 번 시도합니다. 재시도 횟수는 RetryConfig를 통해 설정됩니다. |
비율 한도 | 큐의 비율 한도입니다. |
측정항목
Cloud Monitoring을 사용하여 다음과 같은 사전 정의된 Google Tasks 측정항목을 사용할 수 있습니다.
측정항목 유형 표시 이름 종류, 유형, 단위 |
설명 라벨 |
---|---|
api/request_count API 요청 DELTA , INT64 , 1 |
Cloud Tasks API 호출 수입니다.
api_method : 호출되는 API 메서드입니다(예: CreateTask).
response_code : 문자열로 된 표준 응답 코드입니다(예: 'ok').
|
queue/depth 베타 큐 깊이 GAUGE , INT64 , 1 |
큐에 있는 태스크 수입니다. 60초마다 샘플링됩니다. 샘플링되면 데이터는 최대 120초 동안 표시되지 않습니다. |
queue/task_attempt_count 태스크 시도 횟수 DELTA , INT64 , 1 |
태스크 응답 코드별로 구분된, 큐에서 전달하려고 시도한 태스크 수입니다.
response_code : 문자열로 된 표준 응답 코드입니다(예: 'ok').
|
queue/task_attempt_delays 작업 시도 지연 DELTA , DISTRIBUTION , ms |
예정된 각 시도 시간과 실제 시도 시간 간의 지연 시간입니다. |