비율 한도

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

현재 재생목록

메시지 큐는 작업 부하 분산을 위한 솔루션이며 요청 및 소비자 요금도 제어합니다. 사용할 수 있는 메시지 큐 옵션은 오픈소스, 독점적 등 여러 가지가 있으며 그 중 다수가 다양한 언어로 작동할 수 있습니다.

메시지 큐를 사용하는 경우 여러 생산자 메시지를 큐로 푸시하고 여러 소비자가 이러한 메시지를 처리하도록 할 수 있습니다. 제한은 동시 소비자 수를 제한하여 소비자 측에서 구현하거나 생산자 또는 소비자에 대한 비율 제한기 또는 제한기를 구현할 수 있습니다.

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