Google Cloud의 Python 라이브러리는 복원력을 고려하여 설계되었습니다. 일시적인 오류를 효과적으로 처리하기 위해 강력한 재시도 메커니즘을 추가합니다. 그러나 기본 재시도 동작이 적합하지 않은 상황이 있을 수 있습니다. 예를 들어 재시도를 트리거해서는 안 되는 특정 오류가 발생하거나 재시도 논리에 대한 더 많은 제어가 필요할 수 있습니다.
이 블로그 게시물에서는 Google Cloud의 Python 라이브러리가 커스텀 재시도 조건자와 상호작용하는 방식을 살펴보고 특정 요구사항을 더 잘 충족하도록 재시도 동작을 맞춤설정할 수 있습니다.
이 블로그 게시물에서는 Google Cloud 라이브러리 내 서비스 계정 가장 사용과 관련된 구체적인 예를 강조하고 싶습니다. 제가 설계하고 현재 작업 중인 아키텍처에서는 사용자 환경을 별도의 Google Cloud 프로젝트로 분리합니다. 우리는 일부 서비스가 특정 사용자 흐름에서 성능 저하를 경험하고 있음을 확인했습니다. 조사 결과 앞서 언급한 라이브러리의 기본 재시도 동작에서 문제가 발생하는 것으로 추적되었습니다.
맞춤설정을 시작하기 전에 Google Cloud Python 라이브러리의 기본 재시도 동작을 이해하는 것이 중요합니다. 이러한 라이브러리에는 일반적으로 재시도에 대한 지터가 추가된 지수 백오프 전략이 있습니다. 즉, 일시적인 오류가 발생하면 라이브러리는 잠시 지연된 후 작업을 다시 시도하며, 이후 시도할 때마다 지연이 기하급수적으로 증가합니다. 지터가 포함되면 지연에 무작위성이 발생하여 여러 클라이언트에서 재시도 동기화를 방지하는 데 도움이 됩니다.
이 전략은 많은 상황에서 효과적이지만 모든 시나리오에 이상적인 것은 아닙니다. 예를 들어 서비스 계정 가장을 사용하는 중에 인증 오류가 발생한 경우 작업을 다시 시도하는 것은 도움이 되지 않을 수 있습니다. 이러한 경우 재시도가 성공하려면 기본 인증 문제를 해결해야 할 수 있습니다.
Google Cloud 라이브러리에서는 커스텀 재시도 조건자를 사용하여 재시도를 수행해야 하는 정확한 조건을 지정할 수 있습니다. 예외를 입력으로 받아들이고 작업을 재시도해야 하면 True를 반환하고 그렇지 않으면 False를 반환하는 함수를 생성할 수 있습니다.
예를 들어 서비스 계정 가장 중에 발생하는 특정 인증 오류에 대한 재시도를 방지하는 사용자 정의 재시도 조건자는 다음과 같습니다.
from google.api_core.exceptions import GoogleAPICallError from google.api_core.retry import Retry, if_transient_error def custom_retry_predicate(exception: Exception) -> bool: if if_transient_error(exception): # exceptions which should be retried if isinstance(exception, GoogleAPICallError): if "Unable to acquire impersonated credentials" in exception.message: # look for specific impersonation error return False return True return False
이 조건자는 예외가 GoogleAPICallError인지 확인하고 구체적으로 "가장 자격 증명을 얻을 수 없습니다"라는 메시지를 찾습니다. 이 조건이 충족되면 False를 반환하여 재시도를 방지합니다.
Firestore:
from google.api_core.exceptions import GoogleAPICallError from google.api_core.retry import Retry, if_transient_error def custom_retry_predicate(exception: Exception) -> bool: if if_transient_error(exception): # exceptions which should be retried if isinstance(exception, GoogleAPICallError): if "Unable to acquire impersonated credentials" in exception.message: # look for specific impersonation error return False return True return False
BigQuery:
from google.cloud import firestore # ... your Firestore setup ... retry = Retry(predicate=custom_retry_predicate, timeout=10) # example of an arbitrary firestore api call, works with all stream = collection.stream(retry=retry)
두 예 모두에서 사용자 정의 조건자와 시간 초과 값을 사용하여 Retry 객체를 생성합니다. 그런 다음 이 Retry 개체는 해당 API 호출에 인수로 전달됩니다.
커스텀 재시도 조건자는 Google Cloud 애플리케이션의 복원력을 향상시키는 효과적인 방법을 제공합니다. 특정 요구 사항에 맞게 재시도 동작을 사용자 지정하면 애플리케이션이 강력하고 효율적이며 확장 가능하다는 것을 확인할 수 있습니다. 오류 처리를 담당하고 재시도 프로세스를 마스터하세요!
위 내용은 Google Cloud Python 라이브러리에서 재시도 조건자 맞춤설정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!