이 페이지에서는 Google Cloud CLI의 gcloud
명령어를 사용하여 Cloud Tasks 큐를 구성하는 방법을 설명합니다.
Cloud Tasks 큐 구성
큐를 만들 때 또는 이후에 언제든지 Cloud Tasks 큐를 구성할 수 있으며 이 구성은 큐에 있는 모든 태스크에 적용됩니다.
큐 구성 시 다음 세 가지 기본 요소를 고려합니다.
라우팅 구성(App Engine 큐에만 해당)
큐는 해당 작업자가 포함된 서비스의 이름과 버전을 알고 있어야 합니다. 이를 대상이라고 합니다. 다음 세 가지 방법으로 대상을 설정할 수 있습니다.
- 대상을 명시적으로 설정하지 않습니다. 이렇게 하면 기본 서비스가 사용됩니다.
- AppEngineHttpRequest에서 AppEngineRouting을 설정하여 태스크 자체에서 대상을 명시적으로 선언합니다. 이는 기본 이외의 대상을 사용하려는 경우 선호하는 방법입니다.
- appEngineRoutingOverride를 사용하여 큐의 모든 태스크를 기본 대상 이외의 대상으로 명시적으로 라우팅합니다. 이 방법은 태스크 자체에서 설정될 수 있는 모든 라우팅을 재정의합니다.
gcloud
를 사용하여 이 기본이 아닌 큐 수준 라우팅을 설정하고 모든 태스크 수준 라우팅보다 우선 적용되게 하려면 아래와 같이 하세요.
gcloud tasks queues update [QUEUE_ID] \
--routing-override=service:[SERVICE],version:[VERSION]
각 항목의 의미는 다음과 같습니다.
SERVICE
는 태스크 처리를 담당하는 App Engine 작업자 서비스입니다.VERSION
은 앱 버전입니다.
예를 들어 barbequeue
라는 큐의 모든 태스크를 처리하도록 worker
라는 작업자 서비스를 설정한 경우 다음을 호출하여 해당 서비스와 기본 버전으로 라우팅할 수 있습니다.
gcloud tasks queues update barbequeue \
--routing-override=service:worker
큐 Describe
gcloud tasks queues describe barbequeue
출력은 다음과 같이 표시됩니다.
appEngineRoutingOverride:
host: worker.[PROJECT_ID].appspot.com
service: worker
name: projects/[PROJECT_ID]/locations/[LOCATION_ID]/queues/barbequeue
rateLimits:
maxBurstSize: 100
maxConcurrentDispatches: 1000
maxDispatchesPerSecond: 500.0
retryConfig:
maxAttempts: 100
maxBackoff: 3600s
maxDoublings: 16
minBackoff: 0.100s
state: RUNNING
라우팅을 삭제합니다.
gcloud tasks queues update [QUEUE_ID] \
--clear-routing-override
비율 한도 정의
큐에서 전달할 수 있는 최대 비율과 동시 태스크 수를 설정할 수 있습니다.
gcloud tasks queues update [QUEUE_ID] \
--max-dispatches-per-second=[DISPATCH_RATE] \
--max-concurrent-dispatches=[MAX_RUNNING]
각 항목의 의미는 다음과 같습니다.
DISPATCH_RATE
는 실제로 버킷의 토큰이 새로 고침되는 비율입니다. 비교적 안정적인 태스크 흐름이 있는 경우 태스크가 전달되는 속도와 같습니다.MAX_RUNNING
은 큐에서 한번에 실행할 수 있는 최대 작업 수입니다.
예를 들어 매개변수를 설정하지 않고 barbequeue
라는 큐를 만든 경우 다음을 호출하여 최대 동시 태스크 수를 업데이트할 수 있습니다.
gcloud tasks queues update barbequeue \
--max-concurrent-dispatches=20
큐 Describe
gcloud tasks queues describe barbequeue
출력은 다음과 같이 표시됩니다.
name: projects/[PROJECT_ID]/locations/[LOCATION_ID]/queues/barbequeue
rateLimits:
maxBurstSize: 100
maxConcurrentDispatches: 20
maxDispatchesPerSecond: 500.0
retryConfig:
maxAttempts: 100
maxBackoff: 3600s
maxDoublings: 16
minBackoff: 0.100s
state: RUNNING
gcloud
명령어 사용과 queue.yaml
사용을 비교하여 처리 속도 정의
큐 처리 속도를 정의하는 Cloud Tasks API 접근 방식은 queue.yaml
파일 업로드를 사용하는 접근 방식과 약간 다르지만 두 가지 방법 모두 동일한 기본 메커니즘을 사용합니다.
두 경우 모두 큐는 토큰 버킷 알고리즘을 사용하여 태스크 실행 속도를 제어합니다. 이름이 지정된 각 큐에는 토큰이 저장된 버킷이 포함됩니다.
애플리케이션이 태스크를 실행할 때마다 토큰이 버킷에서 삭제됩니다.
큐는 버킷의 토큰이 소진될 때까지 태스크를 계속 처리합니다. 시스템은 큐에 지정한 max_dispatches_per_second
속도에 따라 버킷에 새 토큰을 계속 채웁니다. 큐에 처리할 태스크가 있고 큐의 버킷에 토큰이 있으면 시스템은 설정된 max_concurrent_dispatches
값까지 토큰과 같은 수의 태스크를 동시에 처리합니다.
고르지 않은 로드로 인해 버킷의 토큰 수가 크게 증가할 수 있으며, 이로 인해 대량의 요청이 들어오면 처리량이 늘어날 수 있습니다. 이 경우 큐에 실제 전달 속도가 max_dispatches_per_second
속도를 초과하여 시스템 리소스를 사용하고 사용자 제공 요청과 경합할 수 있습니다. 다운스트림 서비스의 상대적으로 느린 SLA를 기반으로 큐를 사용하여 큐를 관리하는 경우 HTTP 429
(너무 많은 요청) 또는 503
(서비스를 사용할 수 없음)과 같은 오류가 발생할 수 있습니다.
Cloud Tasks API 메서드를 사용하는 경우 큐 전달 속도를 정의하는 두 가지 필드가 있습니다.
max_dispatches_per_second
max_concurrent_dispatches
위의 예를 참조하세요. 세 번째 필드 max_burst_size
는 max_dispatches_per_second
에 설정된 값에 따라 시스템이 계산합니다.
queue.yaml
메서드를 사용할 때 세 요소 모두 설정할 수 있습니다.
max_concurrent_requests
:max_concurrent_dispatches
와 같음rate
:max_dispatches_per_second
와 같음bucket_size
:max_burst_size
와 같음
대부분의 경우 Cloud Tasks API 메서드를 사용하고 시스템이 max_burst_size
를 설정하게 하면 요청 버스트를 매우 효율적으로 관리할 수 있습니다. 그러나 경우에 따라 원하는 속도가 비교적 느리거나 queue.yaml
메서드를 사용하여 수동으로 bucket_size
를 작은 값으로 설정하거나 Cloud Tasks API를 통해 max_concurrent_dispatches
를 작은 값으로 설정하는 등의 경우 특히 더 세부적으로 제어할 수 있습니다.
재시도 매개변수 설정
작업이 성공적으로 완료되지 않은 경우 Cloud Tasks가 설정한 매개변수에 따라 지수 백오프로 작업을 재시도합니다. 큐에서 실패한 작업을 재시도할 최대 횟수를 지정하고 재시도에 대한 시간 제한을 설정하며 시도 사이의 간격을 제어할 수 있습니다.
gcloud tasks queues update [QUEUE_ID] \
--max-attempts=[MAX_ATTEMPTS] \
--min-backoff=[MIN_INTERVAL] \
--max-backoff=[MAX_INTERVAL] \
--max-doublings=[MAX_DOUBLINGS] \
--max-retry-duration=[MAX_RETRY_DURATION]
각 항목의 의미는 다음과 같습니다.
MAX_ATTEMPTS
는 첫 시도를 포함한 최대 태스크 시도 횟수입니다. 이 플래그를unlimited
로 설정하여 무제한 재시도를 허용할 수 있습니다.MIN_INTERVAL
은 재시도 사이에 대기해야 하는 최소 시간입니다. 값은5s
와 같이 's'로 끝나는 문자열이어야 합니다.MAX_INTERVAL
은 재시도 사이에 대기해야 하는 최대 시간입니다. 값은5s
와 같이 's'로 끝나는 문자열이어야 합니다.MAX_DOUBLINGS
는 실패한 태스크의 재시도 간격이 두 배가 되는 최대 횟수입니다. 이 횟수 이후에는 증분 값이 상수가 됩니다.MAX_RETRY_DURATION
은 실패한 태스크를 재시도할 수 있는 최대 시간으로, 태스크가 처음 시도되었을 때부터 측정됩니다. 값은5s
와 같이 's'로 끝나는 문자열이어야 합니다.
큐가 성공적으로 구성되었는지 확인합니다.
gcloud tasks queues describe [QUEUE_ID]
다음 단계
- HTTP Target 작업 만들기 알아보기
- App Engine 작업 만들기 알아보기
- Cloud Logging 설정에 대해 알아보기
- RPC API 참조에서 큐 관리에 대해 자세히 알아보기
- REST API 참조에서 큐 관리에 대해 자세히 알아보기
- Cloud Tasks
gcloud
명령의 전체 목록 참조하기