지수 백오프는 클라이언트에서 시간 간격을 늘려 실패한 요청을 주기적으로 다시 시도하는 네트워크 애플리케이션용 표준 오류 처리 전략입니다. 많은 양의 요청 또는 네트워크 트래픽으로 인해 서버에서 오류를 반환하는 경우 지수 백오프는 이러한 오류를 처리하는 데 효과적인 전략일 수 있습니다. 반대로 잘못된 승인 사용자 인증 정보 또는 파일을 찾을 수 없는 오류 등 네트워크 트래픽 양이나 응답 시간과 무관한 오류를 처리할 때는 적절한 전략이 아닙니다.
지수 백오프를 적절하게 사용하면 대역폭 사용량의 효율성을 높이고, 성공적인 응답을 가져오는 데 필요한 요청 수를 줄이며, 동시 환경에서의 요청 처리량을 극대화할 수 있습니다.
간단한 지수 백오프 구현 흐름은 다음과 같습니다.
API에 요청을 전송합니다.
요청을 재시도해야 함을 알리는 HTTP 503 응답을 수신합니다.
1초 + random_number_milliseconds를 대기한 후 요청을 재시도합니다.
요청을 재시도해야 함을 알리는 HTTP 503 응답을 수신합니다.
2초 + random_number_milliseconds를 대기한 후 요청을 재시도합니다.
요청을 재시도해야 함을 알리는 HTTP 503 응답을 수신합니다.
4초 + random_number_milliseconds를 대기한 후 요청을 재시도합니다.
요청을 재시도해야 함을 알리는 HTTP 503 응답을 수신합니다.
8초 + random_number_milliseconds를 대기한 후 요청을 재시도합니다.
요청을 재시도해야 함을 알리는 HTTP 503 응답을 수신합니다.
16초 + random_number_milliseconds를 대기한 후 요청을 재시도합니다.
중지합니다. 오류를 보고하거나 로깅합니다.
위 흐름에서 random_number_milliseconds는 1,000밀리초 이하의 임의 숫자입니다. 보다 균일하게 부하를 분산하고 서버 과부하 가능성을 방지하므로 이와 같은 임의의 작은 지연이 필요합니다. random_number_milliseconds 값은 대기 후 매번 재정의해야 합니다.
참고: 대기 시간은 항상 (2 ^ n) + random_number_milliseconds이며, 여기서 n은 단순 증가 정수로서 처음에는 0으로 정의됩니다. 정수 n은 반복(요청)할 때마다 1씩 증가합니다.
n이 5일 때 종료하도록 알고리즘이 설정되어 있습니다. 이러한 제한은 클라이언트의 무제한 재시도를 방지하고 요청이 '복구 불가능한 오류'로 간주되기 전에 약 32초의 총 지연 시간을 발생시킵니다. 특히 긴 업로드가 진행 중인 경우에는 최대 재시도 횟수를 늘리는 것이 좋습니다. 단, 재시도 지연 시간을 합리적인 시간(1분 미만)으로 제한해야 합니다.
추가 일일 할당량 요청
애플리케이션에 추가 일일 할당량이 필요하다고 생각되면 아래 안내에 따라 추가로 요청할 수 있습니다.
다음 안내는 dailyLimitExceeded 오류가 발생한 프로젝트에만 적용됩니다. 다른 할당량 오류의 권장 조치는 위 표에 나와 있습니다.
[null,null,["최종 업데이트: 2024-08-22(UTC)"],[[["Google Bid Manager API uses quotas to protect its infrastructure and ensure fair usage for all developers."],["Default quota limits include 2,000 requests per project per day and 4 queries per second per project."],["Exceeding quota limits results in specific error codes, requiring actions like reducing requests or using exponential backoff."],["Exponential backoff is a retry strategy for handling temporary errors by gradually increasing wait times between requests."],["Developers can request additional daily quota through the Google API Console if needed."]]],[]]