비율 한도

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 속도 제한기를 확인하거나 클러스터링된 환경에 자체 토큰 버킷 기반 알고리즘을 구현할 수 있습니다. 예를 들어 토큰을 생성하여 데이터베이스와 같은 공유 트랜잭션 저장소에 저장할 수 있으며 각 클라이언트는 요청을 처리하기 전에 토큰을 획득하고 사용해야 합니다. 토큰이 소진되면 클라이언트는 다음 토큰 배치가 생성될 때까지 기다려야 합니다.

큐에 추가

메시지 큐는 작업 부하 분산을 위한 솔루션이며, 요청과 소비자 요율도 제어합니다. 사용할 수 있는 메시지 대기열 옵션에는 여러 가지가 있으며(오픈소스, 독점 등) 대부분이 다양한 언어로 작동할 수 있습니다.

메시지 큐를 사용할 때는 여러 생산자가 큐로 메시지를 푸시하고 여러 소비자가 해당 메시지를 처리하게 할 수 있습니다. 동시 소비자 수를 제한하여 소비자 측에서 제한을 구현하거나 생산자 또는 소비자를 위한 비율 제한기 또는 스로틀러를 구현할 수 있습니다.

예를 들어 메시지 소비자에게 비율 제한 오류가 발생하면 이 소비자는 요청을 큐로 반환하여 재시도할 수 있습니다. 동시에 이 소비자는 오류에서 복구하기 위해 다른 모든 소비자에게 몇 초 동안 처리를 일시중지하라고 알릴 수도 있습니다.