Google Ads API는 고객 ID와 Google Cloud 프로젝트 모두에서 초당 쿼리 수 (QPS)를 기준으로 비율 제한을 독립적으로 적용합니다. Google Ads API는 분당 요청 수(API 호출 빈도 측정) 외에도 분당 작업 수 (요청 전반의 총 API 작업 수 측정)에 대한 한도도 적용합니다. Google Ads API는 토큰 버킷 알고리즘을 사용하여 요청을 측정하고 적절한 QPS 한도를 결정하므로 정확한 한도는 특정 시점의 전체 서버 부하에 따라 달라집니다.
비율 제한을 적용하는 목적은 한 사용자가 (의도적이든 의도적이지 않든) 대량의 요청으로 Google Ads API 서버를 압도하여 다른 사용자의 서비스를 방해하는 것을 방지하기 위함입니다.
비율 제한을 위반하는 요청은 RESOURCE_TEMPORARILY_EXHAUSTED 오류와 함께 거부됩니다.
클라이언트 측에서 요청 수를 적극적으로 줄이고 QPS를 제한하여 앱을 제어하고 비율 제한을 완화할 수 있습니다.
비율 제한을 초과할 가능성을 줄이는 방법에는 여러 가지가 있습니다. 메시징, 재전송, 제한과 같은 엔터프라이즈 통합 패턴 (EIP) 개념을 숙지하면 보다 강력한 클라이언트 앱을 빌드하는 데 도움이 될 수 있습니다.
다음 권장사항은 복잡성 순으로 정렬되어 있으며, 더 간단한 전략이 맨 위에 있고 더 강력하지만 정교한 아키텍처가 그 뒤에 있습니다.
지수 백오프
애플리케이션이 RESOURCE_TEMPORARILY_EXHAUSTED 오류를 수신하면 실패한 요청을 재시도하기 전에 무작위 지터가 있는 지수 백오프 정책을 사용합니다. 지수 백오프는 재시도 간 대기 시간을 점진적으로 늘려 (예: 2초, 4초, 8초 대기 후 작은 무작위 지연 시간 추가) 서버 부하와 할당량 버킷을 복구하는 동시에 클라이언트 인스턴스 전반에서 동기화된 재시도 급증을 방지합니다.
동시 실행 태스크 제한
비율 제한을 초과하는 근본 원인 중 하나는 클라이언트 앱이 과도한 수의 동시 태스크를 생성하기 때문입니다. 클라이언트 앱이 가질 수 있는 동시 요청 수에는 제한이 없지만 Google Cloud 프로젝트 수준에서 초당 요청 수 한도를 초과할 수 있습니다.
요청을 수행할 동시 태스크의 총 개수 (모든 프로세스 및 머신에서)에 대해 합리적인 상한을 설정하고 비율 제한을 초과하지 않고 처리량을 최적화하도록 상향 조정하는 것이 좋습니다.
또한 클라이언트 측에서 QPS를 제한할 수 있습니다(제한 및 비율 제한기 참조).
요청 일괄 처리
여러 작업을 단일 요청으로 일괄 처리하는 것이 좋습니다. 이는 다양한 서비스에 대한 Mutate 호출에 가장 적합합니다. 예를 들어 AdGroupAd의 여러 인스턴스에 대한 상태를 업데이트하는 경우 각 AdGroupAd에 대해 MutateAdGroupAds를 한 번 호출하는 대신 MutateAdGroupAds를 한 번 호출하고 여러 operations를 전달할 수 있습니다. 추가 예시는 일괄 작업 안내를 참고하세요.
요청을 일괄 처리하면 총 API 호출 수가 줄어들고 분당 요청 비율 제한이 완화되지만, 단일 계정에 대해 많은 수의 작업을 수행하는 경우 분당 작업 비율 제한이 트리거될 수 있습니다.
제한 및 비율 제한기
애플리케이션의 총 스레드 수를 제한하는 것 외에도 클라이언트 측에서 비율 제한을 구현할 수 있습니다. 이렇게 하면 프로세스, 클러스터 또는 둘 다의 모든 스레드가 클라이언트 측의 특정 QPS 한도에 의해 제어됩니다.
Guava RateLimiter를 참조하거나 클러스터링된 환경에 자체 토큰 버킷 알고리즘을 구현합니다. 예를 들어 Redis 또는 Memcached와 같은 분산형 지연 시간이 짧은 인메모리 데이터 스토어에서 토큰을 관리할 수 있습니다. 여기서 각 클라이언트는 요청을 처리하기 전에 토큰을 획득하고 사용합니다. 토큰이 소진되면 클라이언트는 다음 토큰 배치가 보충될 때까지 기다립니다.
현재 재생목록
메시지 큐는 작업 부하 분산을 위한 솔루션이며 요청 및 소비자 속도도 제어합니다. 사용 가능한 메시지 큐 옵션은 여러 가지가 있으며, 일부는 오픈소스이고 일부는 독점적입니다. 이 중 상당수는 다양한 언어로 작동할 수 있습니다.
메시지 큐를 사용할 때는 여러 프로듀서가 메시지를 큐에 푸시하고 여러 소비자가 해당 메시지를 처리할 수 있습니다. 제한은 동시 소비자 수를 제한하거나 생산자 또는 소비자에 대한 비율 제한기 또는 제한기를 구현하여 소비자 측에서 구현할 수 있습니다.
예를 들어 메시지 소비자가 비율 제한 오류를 발견하면 해당 소비자는 표준화된 재시도 지연 (지수 백오프 사용)을 사용하여 요청을 큐에 반환하고 공유 비율 제한기 피드백 루프를 업데이트하여 모든 소비자가 오류에서 복구하는 동안 처리 속도를 자동으로 줄일 수 있습니다.