Cloud Tasks 큐 구성하기

이 페이지에서는 Google Cloud SDK의 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] \
    --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_sizemax_dispatches_per_second에 설정된 값에 따라 시스템이 계산합니다.

queue.yaml 메서드를 사용할 때 세 요소 모두 설정할 수 있습니다.

  • max_concurrent_dispatches: max_concurrent_requests와 같음
  • 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]

다음 단계