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