Azure Cosmos DB for Apache Cassandra 작업의 속도 제한 오류 방지

적용 대상: Cassandra

모든 데이터베이스 작업 비용은 Azure Cosmos DB에서 정규화되고 RU(요청 단위)를 기준으로 표시됩니다. 요청 단위는 Azure Cosmos DB에서 지원하는 데이터베이스 작업을 수행하는 데 필요한 CPU, IOPS, 메모리와 같은 시스템 리소스를 추상화하는 성능 통화입니다.

Azure Cosmos DB for Apache Cassandra 작업은 테이블의 처리량 제한(RU)을 초과하면 속도 제한(OverloadedException/429) 오류로 인해 실패할 수 있습니다. 이 문제는 여기에 설명된 것처럼 클라이언트 쪽에서 해결할 수 있습니다. 속도 제한 오류로 인한 오류를 처리하는 클라이언트 재시도 정책을 구현할 수 없는 경우 테이블의 처리량 제한을 초과하는 작업이 짧은 지연 후에 자동으로 다시 시도되는 SSR(서버 쪽 재시도) 기능을 사용하면 됩니다. 이는 계정 수준 설정이며 계정의 모든 키 공간 및 테이블에 적용됩니다.

Azure Portal 사용

  1. Azure Portal에 로그인합니다.

  2. Azure Cosmos DB for Apache Cassandra 계정으로 이동합니다.

  3. 설정 섹션 아래의 기능 창으로 이동합니다.

  4. 서버 쪽 다시 시도를 선택합니다.

  5. 계정의 모든 컬렉션에 대해 이 기능을 사용하려면 사용을 클릭합니다.

Screenshot of the server-side retry feature for Azure Cosmos DB for Apache Cassandra

Azure CLI 사용

  1. 계정에 대해 SSR을 이미 사용하도록 설정되었는지 확인합니다.

    az cosmosdb show --name accountname --resource-group resourcegroupname
    
  2. 데이터베이스 계정의 모든 테이블에 SSR을 사용합니다. 이 변경 사항이 적용되려면 최대 15분이 소요될 수 있습니다.

    az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra DisableRateLimitingResponses
    
  3. 다음 명령은 기능 목록에서 DisableRateLimitingResponses를 제거하여 데이터베이스 계정의 모든 테이블에 대해 서버 쪽 다시 시도를 사용하지 않도록 설정합니다. 이 변경 사항이 적용되려면 최대 15분이 소요될 수 있습니다.

    az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra
    

자주 묻는 질문

요청을 다시 시도하는 방법

60초의 시간 제한에 도달할 때까지 요청은 계속해서 다시 시도됩니다. 시간 제한에 도달하면 클라이언트는 이에 따라 읽기 또는 쓰기 시간 제한 오류를 수신합니다.

SSR은 언제 가장 유용한가요?

제한 오류를 방지할 수 있는 1분 미만의 짧은 기간 동안 사용량이 급증하는 경우 SSR(서버 쪽 다시 시도)이 가장 유용합니다. 작업 부하가 증가하고 지정된 RU보다 지속적으로 높은 경우에는 SSR이 큰 도움이 되지 않습니다. RU를 적절하게 늘릴 것을 권장합니다.

권장하는 클라이언트 쪽 설정은 무엇인가요?

SSR을 사용하면 클라이언트 앱은 서버 다시 시도 60초 설정을 초과하여 읽기 시간 제한을 높일 수 있습니다. 더 안전한 쪽에 90초를 설정하는 것이 좋습니다.

코드 샘플 드라이버3

SocketOptions socketOptions = new SocketOptions()
	.setReadTimeoutMillis(90000); 

코드 샘플 드라이버4

ProgrammaticDriverConfigLoaderBuilder configBuilder = DriverConfigLoader.programmaticBuilder()
	.withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(90)); 

서버 쪽 다시 시도의 영향을 모니터링하려면 어떻게 해야 하나요?

Azure Cosmos DB 메트릭 창에서 서버 쪽에서 다시 시도된 속도 제한 오류(429)를 볼 수 있습니다. SSR을 사용하도록 설정하면 이러한 오류는 서버 쪽에서 처리되고 다시 시도되므로 클라이언트로 이동하지 않습니다.

Azure Cosmos DB 리소스 로그에서 estimatedDelayFromRateLimitingInMilliseconds가 포함된 로그 항목을 검색할 수 있습니다.

서버 쪽 다시 시도가 일관성 수준에 영향을 주나요?

서버 쪽 다시 시도는 일관성 수준에 영향을 주지 않습니다. 요청 속도가 제한되면(429 오류) 서버 쪽에서 요청이 다시 시도됩니다.

서버 쪽 다시 시도는 클라이언트가 받을 수 있는 오류 형식에 영향을 주나요?

아니요, 서버 쪽 다시 시도는 서버 쪽에서 다시 시도하여 속도 제한 오류(429)에만 영향을 미칩니다. 이 기능을 통해 클라이언트 애플리케이션에서 속도 제한 오류를 처리할 필요가 없습니다. 모든 기타 오류는 클라이언트로 이동합니다.

다음 단계

일반적인 오류 문제 해결에 대해 자세히 알아보려면 다음 문서를 참조하세요.

다음 문서를 참조하여 Azure Cosmos DB에서 처리량을 프로비저닝하는 방법을 알아보세요.