이 페이지에서는 push 큐를 만들고 맞춤설정하는 방법과 큐의 콘텐츠를 검사하는 방법을 설명합니다.
큐 구성 파일을 사용하여 큐 만들기
태스크를 처리하려면 push 큐에 추가해야 합니다. App Engine은 default
라고 하는 기본 push 큐를 제공하며 이 큐는 기본 설정으로 구성되어 바로 사용할 수 있습니다. 원하는 경우 다른 큐를 만들고 구성할 필요 없이 모든 태스크를 기본 큐에 추가할 수 있습니다.
큐를 추가하거나 기본 구성을 변경하려면 App Engine에 업로드할 애플리케이션의 큐 구성 파일을 수정합니다. 큐를 최대 100개까지 만들 수 있습니다. 큐를 동적으로 만들 수 없습니다.
이 큐 구성 파일은 다음과 같이 두 개의 큐를 정의합니다.
queue:
- name: queue-blue
target: v2.task-module
rate: 5/s
- name: queue-red
rate: 1/s
파일을 업로드하려면 다음을 사용하세요.
gcloud app deploy queue.yaml
queue-blue
에 추가된 모든 태스크는 대상 모듈 v2.task-module
로 전송됩니다.
queue-red
의 새로고침 빈도가 초당 5회에서 초당 1회로 바뀝니다. 태스크가 큐에서 제외되고 초당 1개의 태스크 속도로 대상에 전송됩니다.
큐를 삭제한 후 동일한 이름으로 큐를 새로 만들려면 약 7일을 기다려야 합니다.
push 큐의 동작을 맞춤설정하기 위해 구성 파일에 추가할 수 있는 다른 매개변수가 많이 있습니다. 자세한 내용은 큐 구성 파일 참조를 확인하세요.
push 큐 처리 속도 정의
rate
, bucket_size
, max_concurrent_requests
와 같은 다른 지시문을 정의하여 각 큐에서 태스크가 처리되는 속도를 제어할 수 있습니다.
태스크 큐는 토큰 버킷을 사용하여 태스크 실행 속도를 제어합니다. 이름이 지정된 각 큐에는 토큰이 bucket_size
에서 지정한 최댓값까지 또는 버킷 크기를 지정하지 않은 경우 최대 5개까지 포함된 토큰 버킷이 있습니다.
애플리케이션이 태스크를 실행할 때마다 토큰이 버킷에서 삭제됩니다.
애플리케이션은 큐의 버킷에서 토큰이 없어질 때까지 큐의 태스크를 계속 처리합니다. App Engine은 큐에 지정한 rate
에 따라 버킷에 새 토큰을 계속 채웁니다.
큐에 처리할 작업이 있고 큐의 버킷에 토큰이 있으면 App Engine은 토큰과 같은 개수의 태스크를 동시에 처리합니다. 이로 인해 처리량이 급증하고 시스템 리소스가 소모되어 사용자를 지원하는 요청과 경합할 수 있습니다.
한 번에 너무 많은 태스크가 실행되지 않도록 하거나 Datastore 경합을 방지하려면 max_concurrent_requests
를 사용합니다.
다음 샘플은 태스크를 제한하도록 max_concurrent_requests
를 설정하는 방법과 애플리케이션 니즈와 사용 가능한 리소스에 따라 버킷 크기와 속도를 조정하는 방법을 보여줍니다.
queue:
- name: queue-blue
rate: 20/s
bucket_size: 40
max_concurrent_requests: 10
모든 큐의 스토리지 한도 설정
큐 구성 파일을 사용하여 태스크 데이터가 모든 큐에서 사용할 수 있는 총 스토리지를 정의할 수 있습니다. 총 스토리지 한도를 정의하려면 최상위 수준에 total_storage_limit
라고 하는 요소를 포함합니다.
# Set the total storage limit for all queues to 120MB
total_storage_limit: 120M
queue:
- name: queue-blue
rate: 35/s
값은 숫자 뒤에 단위가 표시됩니다. B
는 바이트, K
는 킬로바이트, M
는 메가바이트, G
는 기가바이트, T
는 테라바이트입니다. 예를 들어 100K
는 100킬로바이트의 한도를 지정합니다. 태스크 추가로 인해 큐가 스토리지 한도를 초과하게 되는 경우 태스크를 추가하기 위한 호출이 실패합니다. 무료 앱의 기본 한도는 500M
(500메가바이트)입니다. 결제가 설정된 앱은 명시적으로 한도를 설정하지 않으면 한도가 없습니다. 한도를 사용하면 각 태스크가 실행 중에 여러 개의 다른 태스크를 추가하는 포크 폭탄(fork bomb) 프로그래밍 오류로부터 앱을 보호할 수 있습니다.
태스크를 추가할 때 할당량 부족으로 앱에서 오류를 수신하는 경우 총 스토리지 한도를 늘리면 도움이 됩니다. 이 기능을 사용할 때는 반드시 며칠 분량의 태스크에 필요한 스토리지에 해당하는 한도를 설정하는 것이 좋습니다. 이렇게 하면 대기열이 임시로 백업되고, 백로그를 통해 작업하면서 새로운 작업을 계속 받을 수 있는 동시에 포크 폭탄 프로그래밍 오류로부터도 보호됩니다.
동시 요청의 최대 개수 구성
동시에 실행할 수 있는 태스크 수를 제한하는 max_concurrent_requests
를 설정하여 처리 속도를 제어할 수 있습니다.
애플리케이션 큐의 속도가 초당 20개이고 버킷 크기가 40이면 해당 큐의 태스크가 실행되는 속도는 초당 20개이고 일시적으로 초당 40개까지 증가할 수 있습니다. 작업 지연 시간이 상대적으로 짧으면 이러한 설정이 문제없이 작동하지만, 지연 시간이 크게 늘어나면 상당히 많은 수의 동시 작업을 처리하게 됩니다. 이러한 추가 처리 로드로 인해 더 많은 인스턴스가 사용되고 애플리케이션이 느려질 수 있습니다.
예를 들어 일반적인 작업 지연 시간이 0.3초라고 가정합니다. 이러한 지연 시간에서는 최대 약 40개의 작업을 동시에 처리합니다. 하지만 작업 지연 시간이 5초로 늘어나면 100개 이상의 작업을 한번에 처리하게 되기가 쉽습니다. 이러한 증가로 인해 애플리케이션에서 추가 태스크를 처리하기 위해 더 많은 인스턴스를 사용하게 되고, 잠재적으로 전체 애플리케이션이 느려지고 사용자 요청이 방해받을 수 있습니다. max_concurrent_requests
값을 더 낮게 설정하여 이 문제를 방지할 수 있습니다.
예를 들어 max_concurrent_requests
를 10으로 설정하면 예시 큐는 지연 시간이 0.3초일 때 초당 약 20개의 태스크를 유지합니다.
하지만 지연 시간이 증가하여 0.5초를 초과하면 이 설정은 처리 속도를 제한하여 10개 이하의 태스크가 동시에 실행되도록 합니다.
queue:
# Set the max number of concurrent requests to 50
- name: optimize-queue
rate: 20/s
bucket_size: 40
max_concurrent_requests: 10
Google Cloud 콘솔에서 큐 모니터링
Google Cloud Console에서 Cloud Tasks 페이지로 이동합니다.
App Engine 태스크 큐 페이지로 이동하면 Cloud Tasks 페이지를 안내하는 지침이 있습니다. Google Cloud Console의 이 업데이트는 태스크 큐의 작동 방식을 변경하지 않습니다.
Cloud Tasks API를 사용 설정합니다.
Cloud Tasks 페이지로 이동하면 애플리케이션의 모든 큐 목록이 표시됩니다. 큐 이름을 클릭하면 선택한 큐의 모든 태스크를 보여주는 큐 세부정보 페이지가 열립니다.
다음 단계
태스크 만들기 알아보기