Azure Cosmos DB 가용성을 극대화하는 방법

대부분의 전자 상거래 애플리케이션은 다운타임을 제로 허용하지 않습니다. 애플리케이션 리소스에 대한 어떠한 영향도 사이트 전체의 가용성 지표에 영향을 줄 수 있습니다. Azure Cosmos 데이터베이스는 산업 전반에서 사용되는 주요 NoSQL 데이터베이스 중 하나입니다. Azure Cosmos 자체는 가용 영역 없이 단일 지역에 대해 최소 99.99%의 가용성을 제공하지만, Azure Cosmos에서 제공하는 옵션을 통해 데이터베이스 가용성을 어떻게 더 향상시킬 수 있는지 알아보겠습니다.

다중 지역 읽기 및 쓰기

단일 지역에서의 읽기는 가용성에 영향을 미치며 단일 장애 지점이 될 수 있습니다. 따라서 읽기 중심 애플리케이션은 적어도 다중 지역 읽기를 활성화해야 하지만 다중 지역 쓰기는 애플리케이션의 옵션은 아닙니다. 그러나 다중 지역 쓰기는 읽기 및 쓰기 중심 애플리케이션에서 더 큰 가용성을 제공합니다.

다중 지역 쓰기 기능을 사용하면 모든 구성된 지역이 쓰기 엔드포인트로 작동할 수 있는 다중 마스터 복제를 활성화할 수 있습니다.

최상의 실행 방법

  • 애플리케이션이 배포된 지역과 가까운 지역을 기반으로 지역을 선택합니다.
  • 가용성을 향상시키기 위해 애플리케이션 요구에 따라 여러 선호 지역을 구성합니다.
  • 가용성을 향상시키고 지연 시간을 줄이기 위해 읽기 및 쓰기를 위해 애플리케이션에 여러 선호 지역을 설정합니다.
  • 설정된 선호 지역을 목록에서 애플리케이션의 현재 지역 또는 가장 가까운 지역 순으로 설정합니다.

West US 2에 배포된 애플리케이션

Java

 

//아래와 같이 West US 2에 배포된 애플리케이션을 구성

import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosClient;

// ...

CosmosClientBuilder clientBuilder = new CosmosClientBuilder()
    .setEndpoint(accountEndpoint)
    .setKey(accountKey)
    .setPreferredRegions(Arrays.asList("West US 2", "East US"));

CosmosClient client = clientBuilder.buildClient();

// 

East US에 배포된 애플리케이션

Java

 

//동부 미국에 배포된 애플리케이션 구성
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosClient;

// ...

CosmosClientBuilder clientBuilder = new CosmosClientBuilder()
    .setEndpoint(accountEndpoint)
    .setKey(accountKey)
    .setPreferredRegions(Arrays.asList( "East US","West US 2"));

CosmosClient client = clientBuilder.buildClient();

// 

결론

여러 지역 읽기 및 쓰기를 활성화하는 것은 더 큰 가용성을 제공할 수 있지만, 애플리케이션을 배포되는 지역에 더 가깝게 읽기 및 쓰기를 구성하고 하나 이상의 기본 지역을 제공하면 수동 개입 없이 즉시 사용 가능한 지역으로 애플리케이션이 대체될 수 있습니다.

일관성 수준

애플리케이션 요구에 따라 일관성 수준을 선택하십시오. 높은 일관성 요구는 일반적으로 가용성이 감소합니다. 애플리케이션이 강력한 데이터 일관성을 요구하는 경우 잠재적인 높은 지연을 견딜 수 있는지 확인하십시오. 반대로 더 약한 일관성이 허용되는 경우 애플리케이션이 향상된 처리량과 가용성을 누릴 수 있습니다.

결론

적절한 일관성 수준을 선택하는 것은 순전히 애플리케이션의 요구에 달려 있으며, 더 강력한 일관성이 가용성에 영향을 미칠 수 있지만, 더 강력한 일관성 수준을 선택함으로써 애플리케이션의 전체 가용성에는 영향을 미치지 않습니다.

장애 조치

수동 장애 조치

개발자 또는 관련자는 포털에 로그인하여 현재 연결된 지역에 장애가 발생한 경우 다음 사용 가능한 지역으로 수동으로 장애 조치할 수 있습니다. 이 옵션은 일부 가용성을 제공하지만, 수동 개입이 필요하므로 전체 사이트 가용성 지표에 영향을 줄 수 있습니다. 

서비스 관리 장애 조치

서비스 관리 페일오버를 활성화하면 Cosmos가 포털에서 구성된 우선 순위에 따라 자동으로 다음 이용 가능한 지역으로 전환됩니다. 이 옵션을 사용하면 페일오버 프로세스 중에 응용 프로그램 변경이 필요하지 않습니다.

결론

두 가지 모두 가용성을 향상시키지만, 서비스 관리 페일오버 처리량은 응용 프로그램 배포에 대해 걱정할 필요 없이 다음 이용 가능한 지역으로 페일오버할 수 있는 유연성을 제공합니다.

파티션 키 및 인덱스

  • Azure Cosmos DB에서 응용 프로그램을 실행하기 전에 파티션 키를 정의하는 것이 중요합니다. Cosmos DB는 읽기 중심 애플리케이션에 매우 효율적이므로 데이터베이스에서 레코드를 읽기 위한 조회 기준을 고려하고 Cosmos DB를 응용 프로그램에 통합하기 전에 쿼리를 정의하는 것이 중요합니다.
  • 기본적으로 Cosmos DB 컨테이너의 모든 항목은 자동으로 인덱싱됩니다. 그러나 특정 항목이나 필드를 인덱싱에서 제외하면 요청 유닛(RUs)의 소비를 줄일 수 있습니다. 인덱싱할 필드를 추가하는 것만큼 필요 없는 필드에 대한 인덱스를 제거하는 것도 중요합니다.
  • Azure Cosmos DB에 과도하게 큰 항목을 저장하는 것을 피하세요.
  • 가능한 경우 교차 파티션 쿼리를 최소화하세요.
  • 효율성을 향상시키기 위해 쿼리에 필터를 포함하세요.
  • 동일한 파티션 키를 반복해서 쿼리하지 마세요. 대신 해당 사용 사례에 캐싱 레이어를 구현하세요.

처리량 자동 조정

Azure Cosmos DB는 컨테이너 수준에서 표준(수동) 및 자동 조정 처리량을 지원합니다.

수동 처리량

애플리케이션은 허용되는 RU/s를 결정하며, RU/s 요청이 최대치에 도달하면 구성된 시간 동안 제한됩니다. 처리량을 증가시키려면 수동 개입이 필요합니다.

자동 확장 처리량

애플리케이션은 지원하는 최대 처리량을 구성할 수 있으며, Cosmos는 수신한 트래픽에 따라 자동으로 확장됩니다. 자동 확장 처리량을 초과하면 구성된 시간 동안 요청이 제한됩니다. 

결론

둘 다 가용성을 높이지만, 자동 확장 처리량은 제한 없이 다양한 트래픽을 처리하는 유연성을 제공합니다.

백업 및 복원

Azure Cosmos DB는 모든 계정에 대해 기본적으로 주기적인 백업을 지원합니다.

주기적인 백업

백업은 구성된 분마다 주기적으로 수행되며, 최소값은 1시간, 최대값은 24시간입니다. 백업 저장소를 지리적, 존 또는 로컬 수준으로 중복 설정하는 옵션도 제공합니다. 백업을 검색하려면 애플리케이션 팀이 지원팀에 문의해야 합니다.

연속적인 백업

연속적인 백업 옵션은 백업 저장소를 구성된 지역의 Cosmos 데이터베이스에 유지하며, 마지막 7일 또는 마지막 30일 동안의 데이터 보존을 허용합니다. 또한 시점 복원을 제공합니다.

결론

연속적인 백업을 선택하면 데이터베이스의 복원이 빨라집니다. 이로써 데이터베이스를 복원하기 위해 지원팀과의 번갈아가며 상호작용할 필요가 없어지며, 애플리케이션은 특정 시점에서 어느 지역(백업이 존재하는 곳)으로든 데이터베이스를 복원할 수 있습니다.

결론적으로, 가용성 지표는 모든 애플리케이션에 중요하지만, 그에는 비용이 따릅니다. 표준 구성보다 더 높은 가용성을 제공하는 옵션은 추가 비용이 발생합니다. 또한 위에서 언급한 옵션들이 Cosmos를 사용하는 모든 애플리케이션에 필요하거나 적합하지 않을 수 있습니다. 그러나 Azure Cosmos에서 가용성을 효과적으로 최적화하기 위해 최선의 방법을 도입하고 실행하는 것이 중요합니다.

Source:
https://dzone.com/articles/how-to-maximize-the-azure-cosmos-db-availability