이 페이지에서는 Cloud Tasks를 사용할 때 발생할 수 있는 몇 가지 문제와 제한사항을 설명합니다.
실행 순서
향후 실행하도록 예정된 태스크를 제외한 태스크 큐의 실행 순서는 플랫폼과 완전히 독립적입니다. 특정 순서로 태스크를 실행한다고 보장하거나 이를 위한 최선의 노력도 시도하지 않습니다. 특히 큐가 완전히 비어 있지 않으면 이전 태스크가 실행된다는 보장이 없습니다. 최신 태스크가 이전 태스크보다 먼저 실행된다는 일반적인 사례가 많이 있으며, 이와 관련한 패턴은 예고 없이 변경될 수 있습니다.
중복 실행
Cloud Tasks는 '정확하게 한 번만 실행'이라는 의미 구현을 목적으로 합니다. 그러나 설계상 보장된 실행과 중복 실행 간에 균형을 맞춰야 하는 상황에서는 보장된 실행에 서비스 오류가 발생합니다. 마찬가지로 중복 실행이 1회 이상 발생합니다. 개발자는 중복 실행이 치명적인 결과를 초래하지 않도록 조치를 취해야 합니다. 프로덕션 단계에서는 99.999% 이상의 태스크가 한번만 실행됩니다.
리소스 제한사항
즉시 처리 큐에서 가장 일반적인 백로그 소스는 대상 인스턴스의 리소스를 소진하는 것입니다. 사용자가 초당 10개의 요청만 처리할 수 있는 프런트엔드 인스턴스에서 초당 100개의 작업을 실행하려고 하면 백로그가 만들어집니다. 이는 대개 두 가지 방식 중 하나로 나타나는 데, 이중 하나는 일반적으로 요청을 처리하는 인스턴스 수를 늘려서 해결할 수 있습니다.
백오프 오류 및 적용 비율
과부하되는 서버에서 HTTP 503
(App Engine 대상)이나 HTTP 429
또는 5xx
(외부 대상) 같은 백오프 오류를 반환하기 시작할 수 있습니다.
Cloud Tasks는 오류가 중단될 때까지 실행 속도를 늦춰서 이러한 오류에 대응합니다. 이 시스템 제한은 작업자 과부하를 방지합니다. 사용자가 지정한 설정은 변경되지 않습니다.
시스템 제한은 다음과 같은 경우에 발생합니다.
Cloud Tasks가 모든 오류에서 백오프합니다. 일반적으로
rate limits
에 지정된 백오프가 사용됩니다. 하지만 작업자가 HTTP429 Too Many Requests
,503 Service Unavailable
을 반환하거나 오류 비율이 높은 경우 Cloud Tasks는 더 높은 백오프 비율을 사용합니다.Retry-After
HTTP 응답 헤더에 지정된 재시도가 고려됩니다.트래픽 급증을 방지하고 트래픽 급증을 원활하게 처리하기 위해 큐가 새로 생성되거나 유휴 상태일 때와 (생성 태스크 비율 급증, 일시중지가 해제된 큐, 동시에 예약된 여러 태스크 등으로 인해) 갑자기 많은 수의 태스크를 전달할 수 있게 된 경우에 전달이 천천히 늘어납니다.
지연 시간 급증 및 최대 동시 작업 수
과부하된 서버도 크게 증가한 지연 시간으로 응답할 수 있습니다.
이 상황에서 요청은 장기간 미해결 상태로 유지됩니다. 큐는 최대 동시 태스크 수로 실행되므로 큐에서 태스크를 예상 비율로 실행하지 못할 수 있습니다. 값이 너무 낮게 설정되어 있어 인위적인 비율 제한이 발생하는 상황에서는 영향을 받는 큐의 max_concurrent_tasks
를 늘리면 이러한 문제가 해결될 수 있습니다. 그러나 max_concurrent_tasks
를 늘리는 것으로 기본적인 리소스 문제를 해결하기는 어렵습니다.
장기 실행 태스크의 증가 문제
Cloud Tasks 큐는 이전에 전달된 태스크 수에 따라 부분적으로 출력을 늘립니다. 태스크 핸들러가 태스크를 완료하고 성공 응답을 반환하기까지 상당한 시간(수 분 단위)이 소요되는 경우 큐 증가 속도가 느려질 수 있습니다.
태스크 5,000개 이상 보기
태스크가 5,000개를 초과하는 경우 일부 태스크가 Google Cloud 콘솔에 표시되지 않습니다. 모든 태스크를 보려면 gcloud CLI를 사용하세요.