다음을 통해 공유


NoSQL용 Azure Cosmos DB에 대한 아키텍처 모범 사례

Azure Cosmos DB는 NoSQL, 관계형, 벡터 및 테이블 데이터베이스와 같은 여러 데이터베이스 형식을 호스트할 수 있는 완전 관리형 데이터베이스 솔루션입니다. 워크로드에 대한 대부분의 사용 사례를 수용할 수 있습니다. 이 가이드의 권장 사항은 NoSQL용 Azure Cosmos DB 변형에 초점을 맞춥니다. 다른 변형에 몇 가지 기본 권장 사항을 적용할 수도 있습니다.

이 문서에서는 설계자로서 Azure 데이터 옵션을 검토하고 Azure Cosmos DB for NoSQL을 워크로드의 데이터 저장소로 선택했다고 가정합니다. 이 문서의 지침은 Well-Architected Framework 핵심 요소의 원칙에 매핑되는 아키텍처 권장 사항을 제공합니다.

기술 범위

이 검토는 다음 Azure 리소스에 대한 상호 연결된 결정에 중점을 둡니다.

  • NoSQL용 Azure Cosmos DB

Reliability

안정성 핵심 요소의 목적은 충분한 복원력을 구축하고 오류로부터 빠르게 복구할 수 있는 능력을 개발하여 지속적인 운영을 제공하는 것입니다.

안정성 디자인 원칙은 개별 구성 요소, 시스템 흐름 및 시스템 전체에 적용되는 고급 디자인 전략을 제공합니다.

워크로드 디자인 검사 목록

안정성에 대한 디자인 검토 검사 목록을 기반으로 디자인 전략을 시작합니다. 일관성 수준, 지역 간 복제 및 프로비전된 처리량을 염두에 두고 비즈니스 요구 사항과 관련성을 확인합니다. 필요에 따라 더 많은 접근 방식을 포함하도록 전략을 확장합니다.

  • 간단한 디자인을 선택하고 불필요한 기능을 방지합니다. 여러 기본 쓰기 및 사용자 지정 인덱싱과 같이 워크로드에 불필요하게 복잡성을 더하는 기능을 채택하지 마세요. Azure Cosmos DB는 이러한 기능을 지원하지만 상당한 복잡성과 운영 부담을 더할 수 있습니다. 워크로드에 고급 기능이 필요한지 신중하게 평가합니다.

    인증 및 권한 부여를 위한 Microsoft Entra ID 또는 모니터링을 위한 Azure Monitor 및 Application Insights와 같은 다른 서비스에 워크로드 책임 및 횡단 관심사를 전가합니다.

  • 워크로드 흐름을 식별하고 우선 순위를 지정합니다. 애플리케이션의 모든 흐름이 똑같이 중요한 것은 아닙니다. 중요한 경로를 식별하고 각 흐름에 우선 순위를 할당하여 디자인 결정을 안내합니다. 사용자 흐름 디자인은 Azure Cosmos DB 데이터베이스에 할당하는 서비스 계층, 기능 및 용량에 영향을 줄 수 있습니다.

    특별한 처리가 필요할 수 있는 중요한 흐름을 식별하려면 데이터 처리 기능 측면에서 구분되는 처리 요구 사항을 캡처합니다. 예를 들어 일부 흐름에는 더 높은 처리량이 필요하거나 대기 시간 문제에 더 민감할 수 있습니다. 또한 일부 솔루션 흐름에는 서로 다른 트랜잭션 일관성 수준이 필요할 수 있습니다.

  • 오류 모드 분석을 사용하여 워크로드의 잠재적 오류를 식별합니다. 잠재적인 오류에 대한 완화 전략을 계획합니다. 다음 표에서는 오류 모드 분석의 예를 보여 줍니다.

    Failure Mitigation
    새로운 지리적 지역의 사용자들에게 롤아웃한 후 높은 대기 시간 및 타임아웃 발생 새 사용자에게 더 가까운 Azure 지역에 다중 지역 복제를 사용하도록 설정합니다.
    RU(요청 단위) 초과로 인한 제한 다시 시도 논리를 구현합니다. RU 사용량을 모니터링하고 필요에 따라 처리량 설정을 조정합니다.
    단일 Azure 지역의 단일 영역에서 Azure Cosmos DB 서비스 실패 데이터베이스를 만들 때 가용성 영역 지원을 구성합니다.

    자세한 내용은 Azure 애플리케이션 대한오류 모드 분석을 참조하세요.

  • 복원력을 개선하고 안정성 목표를 충족하는 데 도움이 되도록 중복성을 구축합니다. Azure에서 두 개 이상의 지역에 걸쳐 있도록 데이터베이스 계정 배포를 디자인합니다. Azure 지역에서 지원하는 경우 여러 가용성 영역에 계정을 배포합니다.

    워크로드에 대한 다중 지역 및 단일 지역 쓰기 전략을 평가합니다. 단일 지역 쓰기의 경우 장애 조치(failover)를 위해 적어도 두 번째 읽기 지역이 있도록 워크로드를 디자인합니다. 단일 지역 쓰기 및 다중 지역 읽기 시나리오에 대해 자동 장애 조치(failover)를 사용하도록 설정합니다. 다중 지역 쓰기의 경우 복잡성 및 일관성의 장단점을 여러 지역에 쓰는 이점과 비교합니다. 자세한 내용은 단일 지역 및 다중 지역 쓰기 계정에 대한 지역 가동 중단 시의 기대치를 참조하세요.

    일관성 수준 및 복제 모드가 지역 전체 중단에서 RPO(복구 지점 목표)에 미치는 영향을 고려합니다.

    데이터베이스 장애 조치(failover) 및 장애 복구(failback) 테스트를 포함하는 애플리케이션에 대한 고가용성의 엔드 투 엔드 테스트를 디자인합니다.

  • 네이티브 재해 복구 및 백업 기능을 사용합니다. 요구 사항에 맞게 데이터베이스 및 컨테이너 백업 및 복원 을 구현합니다. 복원 시나리오에는 특정 시점 복원, 우발적인 파괴적인 작업에서 복구, 삭제된 리소스 복원 및 특정 시점에 다른 지역으로 복원이 포함됩니다. 연속 백업을 사용하여 계정을 구성합니다. 비즈니스 요구 사항에 따라 적절한 보존 기간을 선택합니다.

  • Azure Cosmos DB 디자인을 업계 표준 애플리케이션 디자인 지침 및 패턴에 맞춥니다. 복원력 있는 애플리케이션을 디자인하고, SDK에 대한 기본 재시도 정책을 검토하고, 특정 일시적 오류에 대한 사용자 지정 처리를 계획하는 가이드를 살펴보세요. 이러한 가이드는 일시적 오류에 대한 복원력 있는 애플리케이션 코드를 만드는 모범 사례를 제공합니다.

구성 권장 사항

Recommendation Benefit
사용 가능한 경우 가용성 영역에 Azure Cosmos DB 계정을 배포합니다. 가용성 영역은 분리된 전원, 네트워킹 및 냉각 기능을 제공하여 하드웨어 오류를 복제본의 하위 집합으로 격리하는 데 도움이 됩니다. 가용성 영역 기능을 사용하지 않는 경우, Azure Cosmos DB는 임의로 선택된 단일 가용성 영역 내에서 여러 복제본에 걸쳐 운영됩니다.
두 개 이상의 지역에 걸쳐 Azure Cosmos DB 계정을 구성 합니다. 여러 지역에 걸쳐 있으면 워크로드가 지역 가동 중단에 탄력적일 수 있습니다. 쓰기 지역에 오류가 있는 경우 다른 복제본에서 읽을 수 있습니다. 쓰기 지역을 다른 지역으로 장애 조치(failover)할 수도 있습니다. 클라이언트 SDK를 사용하면 이러한 장애 조치(failover)의 메커니즘에서 클라이언트를 격리할 수 있습니다.
계정에 대해 서비스 관리 장애 조치(failover) 를 사용하도록 설정합니다. 서비스 관리 장애 조치(failover)의 장단기를 이해하고 필요한 경우 강제 장애 조치(failover)를 계획합니다.

애플리케이션의 엔드 투 엔드 고가용성을 확인하기 위해 서비스 관리 장애 조치를 잠시 동안 사용하지 않도록 설정합니다. 스크립트 또는 Azure Portal을 사용하여 수동 장애 조치를 시작할 수 있습니다.
서비스 관리 장애 조치(failover)를 사용하면 Azure Cosmos DB가 가용성을 유지하기 위해 다중 지역 계정의 쓰기 지역을 자동으로 변경할 수 있습니다. 이 변경은 사용자 상호 작용 없이 발생합니다.

Security

보안 핵심 요소의 목적은 워크로드에 기밀성, 무결성 및 가용성 보장을 제공하는 것입니다.

보안 디자인 원칙은 NoSQL용 Azure Cosmos DB의 기술 설계에 접근 방식을 적용하여 이러한 목표를 달성하기 위한 높은 수준의 디자인 전략을 제공합니다.

워크로드 디자인 검사 목록

보안에 대한 디자인 검토 검사 목록을 기반으로 디자인 전략을 시작하고 취약성 및 컨트롤을 식별하여 보안 상태를 개선합니다. 필요에 따라 더 많은 접근 방식을 포함하도록 전략을 확장합니다.

  • 보안 기준을 검토합니다. 워크로드의 보안 상태를 향상하려면 Azure 데이터베이스에 대한 보안 검사 목록과 Azure CosmosDB의 보안 기준을 검토합니다. 최소한 데이터 보호ID 관리 보안 기준을 구현하여 Azure Cosmos DB 계정을 보호합니다.

    현재 글로벌 개인 데이터 요구 사항의 컨텍스트에서 서비스 수준 규정 준수인증 을 평가합니다.

  • 엄격하고 조건부이며 감사 가능한 ID 및 액세스 관리를 구현합니다. 워크로드의 인증 및 권한 부여 요구 사항에 Microsoft Entra ID를 사용합니다. Microsoft Entra ID는 중앙 집중식 권한 부여 및 액세스 관리를 제공합니다.

    계정에 대한 제어 평면 및 데이터 평면 액세스의 경우 최소 권한 액세스 원칙에 따라 역할, 그룹 및 할당을 만듭니다. 키 기반 인증을 사용하지 않도록 설정하는 것이 좋습니다.

  • 데이터를 암호화합니다.서비스 관리형 키 또는 고객 관리형 키를 사용하여 미사용 데이터 또는 이동 중인 데이터를 암호화합니다.

  • 네트워크 세분화 및 보안 컨트롤을 적용합니다. 네트워크 디자인에서 의도적인 세분화 및 경계를 만들고 모든 네트워크 경계에서 지역화된 네트워크 컨트롤을 사용하여 심층 방어 원칙을 적용합니다.

    Azure Cosmos DB의 보안 기준에 따라 프라이빗 엔드포인트를 사용하여 표면 공격 영역을 줄입니다.

  • 전체적인 보안 모니터링 전략을 구현합니다. 컨트롤 플레인 로그를 사용하여 사용자 액세스, 보안 위반 및 리소스 작업을 감사하세요.

    데이터 평면 메트릭을 사용하여 데이터 송신, 데이터 변경, 사용량 및 대기 시간을 모니터링합니다.

  • 보안 개발 및 테스트 사례를 사용합니다. 데이터에 안전하게 액세스하려면 최상의 소프트웨어 개발 방법을 따르세요. Azure Cosmos DB와 상호 작용하는 애플리케이션을 개발할 때 보안 코딩 사례를 따르고 보안 코드 검토를 수행합니다.

구성 권장 사항

Recommendation Benefit
퍼블릭 엔드포인트를 사용하지 않도록 설정하고 가능하면 프라이빗 엔드포인트를 사용합니다. 프라이빗 엔드포인트를 통해 프라이빗 네트워킹을 사용하면 계정에 대한 공격에 취약한 노출 영역을 줄일 수 있습니다.
RBAC(역할 기반 액세스 제어)를 사용하여 제어 평면 액세스를 잘 정의된 할당 내의 특정 ID 및 그룹으로 제한합니다. RBAC를 사용하면 계정에 대한 무단 액세스를 방지할 수 있습니다. 최소 권한 원칙에 따라 Azure Cosmos DB에 액세스하는 사용자 또는 애플리케이션에 적절한 역할 및 권한을 할당합니다.
계정에 대한 액세스를 제한하는 가상 네트워크 엔드포인트 및 규칙을 만듭니다. NSG(네트워크 보안 그룹)를 사용하여 Azure Cosmos DB 리소스 간의 트래픽을 제어합니다. 가상 네트워크 서비스 엔드포인트, NSG 및 방화벽 규칙은 Azure Cosmos DB 계정에 대한 액세스를 제한하고 무단 액세스로부터 데이터를 보호하는 데 도움이 됩니다.
삽입 공격, 사이트 간 스크립팅 또는 안전하지 않은 직접 개체 참조와 같은 일반적인 보안 취약성으로부터 보호합니다. 보안 위험을 방지하기 위해 일반적인 HTTP 상태 코드에 대한 입력 유효성 검사, 매개 변수가 있는 쿼리 및 적절한 오류 처리를 구현합니다. 입력 유효성 검사를 통해 애플리케이션에서 악의적인 데이터가 처리되지 않도록 방지할 수 있습니다. 이 방법은 보안 위반 또는 데이터 손상으로 이어질 수 있는 잠재적으로 유해한 데이터를 차단합니다.

적절한 오류 처리를 사용하면 애플리케이션이 제어된 방식으로 오류에 응답하고 중요한 정보의 노출을 방지할 수 있습니다.
컨트롤 플레인 로그를 모니터링 하여 Azure Cosmos DB 계정에 대한 무단 수정을 검색합니다. 모니터링을 사용하면 액세스 패턴 및 감사 로그를 추적하여 데이터베이스가 안전하게 유지되고 관련 데이터 보호 규정을 준수하는지 확인할 수 있습니다. 또한 데이터 평면 메트릭을 모니터링하면 보안 위반을 나타낼 수 있는 익숙하지 않은 패턴을 식별하는 데 도움이 될 수 있습니다.
비정상적인 활동이 발생할 때 보안 경고를 트리거하도록 Azure Cosmos DB용 Microsoft Defender 를 사용하도록 설정합니다. Microsoft Defender는 계정의 데이터베이스를 악용하려는 시도를 감지합니다. Defender는 잠재적인 SQL 삽입, 의심스러운 액세스 패턴 및 기타 잠재적 악용 활동을 검색합니다.

비용 최적화

비용 최적화는 비즈니스 요구 사항을 충족 하면서 지출 패턴을 감지하고, 중요한 영역에 대한 투자의 우선 순위를 지정하고, 조직의 예산을 충족하도록 다른 영역에서 최적화하는 데 중점을 둡니다.

비용 최적화 디자인 원칙은 Cosmos DB for No SQL 및 해당 환경과 관련된 기술 설계에서 필요에 따라 이러한 목표를 달성하고 절충하기 위한 높은 수준의 디자인 전략을 제공합니다.

워크로드 디자인 검사 목록

투자 비용 최적화 을 위한 디자인 검토 체크리스트를 기반으로 디자인 전략을 시작하세요. 워크로드가 워크로드에 할당된 예산에 맞게 조정되도록 디자인을 미세 조정합니다. 디자인은 적절한 Azure 기능을 사용하고, 투자를 모니터링하고, 시간이 지남에 따라 최적화할 기회를 찾아야 합니다.

  • Azure Cosmos DB 크기 조정 전략을 최적화합니다. Azure Cosmos DB가 스토리지 및 처리량 크기 조정을 처리하는 방법을 이해합니다. 요구 사항을 충족하기 위해 성능과 비용의 적절한 균형을 결정합니다.

    워크로드에 적합한 처리량 할당 스키마를 선택합니다. 데이터베이스 또는 컨테이너 수준에서 분산된 표준 및 자동 크기 조정 처리량의 이점을 검토합니다. 또한 적절한 경우 서버리스 옵션을 고려합니다. 워크로드의 트래픽 패턴을 분석 하여 가장 적합한 처리량 할당 체계를 선택합니다.

    카디널리티가 높고 변경되지 않은 파티션 키 또는 파티션 키 집합을 결정합니다. 기존 지침 및 모범 사례를 사용하여 적절한 파티션 키를 선택할 수 있습니다. 또한 파티션 키를 결정할 때 인덱싱 정책을 고려합니다.

  • Azure Cosmos DB 데이터 비용을 최적화합니다. 데이터 인벤토리를 가져와 워크로드에 대해 예상되는 전체 데이터 스토리지를 계산합니다. 항목과 인덱스의 크기는 데이터 스토리지 비용에 영향을 줍니다. 복제 및 백업이 스토리지 비용에 미치는 영향을 계산합니다.

    더 이상 사용되지 않거나 필요하지 않은 이전 항목을 자동으로 제거하는 전략을 만듭니다. 필요한 경우 이러한 항목을 제거하기 전에 저렴한 스토리지 솔루션으로 내보냅니다.

  • 비용을 위해 쿼리를 최적화합니다. 파티션 간 조회를 최소화하는 가장 일반적인 쿼리를 평가합니다. 이 정보를 사용하여 파티션 키를 선택하거나 인덱싱 정책을 사용자 지정하는 프로세스를 알릴 수 있습니다.

    프로젝션을 사용하여 큰 쿼리 결과 집합의 처리량 비용을 줄입니다. 결과 집합에서 필요한 최소 필드 수만 프로젝터하도록 쿼리를 작성합니다. 필드에 대한 계산이 필요한 경우 해당 계산 서버 쪽과 클라이언트 쪽을 수행하는 처리량 비용을 평가합니다.

    바인딩되지 않은 파티션 간 쿼리를 사용하지 않습니다. 쿼리를 평가하고 작성하여 가능하면 단일 논리 파티션 내에서 검색하는지 확인합니다. 쿼리 필터를 사용하여 쿼리 대상의 논리 파티션을 제어합니다. 쿼리가 논리 파티션을 검색해야 하는 경우 전체 검색 대신 논리 파티션의 하위 집합만 검색하도록 쿼리를 바인딩합니다.

    워크로드의 일반적인 작업 및 쿼리를 고려하는 인덱싱 정책을 디자인합니다.

구성 권장 사항

Recommendation Benefit
초당 RU 사용량 및 패턴을 모니터링합니다. 쿼리 및 기타 데이터 연구 기술을 사용하여 애플리케이션 코드에서 안티패턴을 찾습니다. 메트릭을 사용하여 Azure Cosmos DB 배포 초기부터 RU 사용량을 모니터링하면 과도한 RU를 사용하는 비효율적인 쿼리 및 작업을 식별할 수 있습니다. 쿼리를 최적화하여 비용을 절감할 수 있습니다.
워크로드에 맞게 인덱싱 정책을 사용자 지정합니다. 일반적인 쿼리에 대해 인덱싱해야 하는 경로만 기반으로 인덱싱 정책을 사용합니다.

쓰기가 많은 워크로드의 경우 쿼리에 사용되지 않는 열의 자동 인덱싱을 사용하지 않도록 설정합니다.
기본 인덱싱 정책은 항목의 모든 경로를 인덱싱하며 RU 사용량 및 비용에 큰 영향을 줄 수 있습니다. 인덱싱 정책을 사용자 지정하면 인덱싱 전략을 특정 요구 사항에 맞게 조정할 수 있습니다. 이 방법은 최적의 성능 및 리소스 사용을 보장하는 데 도움이 됩니다.
논리 파티션 간에 처리량 소비 및 데이터 스토리지를 균등하게 분산하는 워크로드에 대한 파티션 키를 선택합니다. 불균형한 양의 트래픽을 수신하는 핫 파티션을 방지합니다. 불균형 파티션은 처리량 비용과 일시적인 오류를 증가시킬 수 있습니다.

또한 선택 영역은 바인딩되지 않은 파티션 간 쿼리 수를 최소화해야 합니다. 가장 일반적인 검색 쿼리를 사용하여 단일 파티션 또는 제한된 파티션 간 쿼리만 실행할 가능성이 있는 잠재적 파티션 키를 확인합니다.
올바른 파티션 키를 선택하면 데이터가 균등하게 분산되어 핫 파티션의 가능성이 줄어들고 처리량 소비가 최적화됩니다. 이 방법은 효율성을 크게 향상시키고 비용을 절감할 수 있습니다.
Azure Cosmos DB 인스턴스에 대해 올바른 프로비전된 처리량 옵션을 선택합니다. 서버리스 또는 프로비전된 처리량과 수동 프로비저닝 또는 자동 크기 조정 중에서 선택합니다. 워크로드의 특정 요구 사항에 따라 데이터베이스 또는 컨테이너 수준에서 이러한 옵션을 적용합니다.

일반적으로 작은 워크로드 및 개발/테스트 워크로드는 데이터베이스 수준에서 서버리스 처리량 또는 수동 공유 처리량의 이점을 누릴 수 있습니다. 중요 업무용 워크로드가 클수록 컨테이너 수준에서 프로비전된 처리량을 활용할 수 있습니다.
올바른 프로비전된 처리량 옵션을 선택하면 과도하게 프로비저닝되거나 과소 프로비저닝되지 않도록 하여 비용을 최적화할 수 있습니다. 또한 애플리케이션이 다양한 트래픽 패턴을 효과적으로 처리할 수 있도록 하면서 운영 비용을 절감합니다.
애플리케이션의 기본 일관성 수준을 구성합니다. 적절한 경우 클라이언트 세션에서 기본 일관성 수준을 다운그레이드 합니다.

더 강력한 일관성 수준에서 읽기와 관련된 비용이 더 높음을 고려합니다. 항상 표준 기본 일관성 수준을 변경하거나 클라이언트 세션에서 재정의할 필요는 없습니다.
애플리케이션에 적합한 일관성 수준을 선택하면 데이터 일관성, 가용성, 성능 및 비용 간에 원하는 균형을 유지할 수 있습니다.
개발/테스트 워크로드의 경우 Docker 컨테이너 이미지로도 사용할 수 있는 Azure Cosmos DB 에뮬레이터를 사용합니다. 에뮬레이터는 개발/테스트 및 지속적인 통합 사용 사례에 대한 비용을 절감합니다.
트랜잭션 일괄 처리 작업을 사용합니다. 데이터를 삽입하기 위해 논리 파티션 키 내에서 트랜잭션 일괄 처리 작업을 활용하도록 파티션을 디자인합니다.

클라이언트 쪽 SDK의 일괄 처리 작업을 사용하여 단일 트랜잭션 요청에서 여러 문서를 삽입, 업데이트 또는 삭제합니다.
Azure Cosmos DB에서 트랜잭션 일괄 처리 작업을 사용하면 개별 요청 수를 줄일 수 있습니다. 이 방법은 대기 시간을 줄이고 처리량 효율성을 개선하는 데 도움이 됩니다.
TTL(Time to Live)을 구현하여 불필요한 데이터를 자동으로 삭제합니다. 필요한 경우 만료된 데이터를 저렴한 스토리지 솔루션으로 내보냅니다. TTL을 사용하면 데이터베이스가 깔끔하게 유지되어 스토리지 비용이 최적화됩니다. 만료된 데이터를 저비용 스토리지 솔루션으로 내보내면 규정 준수를 위해 기록 데이터를 유지하면서 비용을 추가로 줄일 수 있습니다.
집계가 많은 분석 저장소 를 고려합니다. Azure Cosmos DB 분석 저장소는 데이터를 별도의 열 저장소에 자동으로 동기화하여 대규모 집계, 보고 및 분석 쿼리를 최적화합니다.

운영 효율성

운영 우수성은 주로 개발 관행, 관찰성 및 릴리스 관리를 위한 절차에 중점을 둡니다.

운영 우수성 디자인 원칙은 워크로드의 운영 요구 사항에 대한 이러한 목표를 달성하기 위한 높은 수준의 디자인 전략을 제공합니다.

워크로드 디자인 검사 목록

NoSQL용 Azure Cosmos DB와 관련된 준수성, 테스트 및 배포 프로세스를 정의하기 위한 운영 우수성에 대한 디자인 검토 검사 목록을 기반으로 디자인 전략을 시작합니다.

  • Azure Cosmos DB 인스턴스를 모니터링합니다. 워크로드 모니터링 솔루션에 여러 지역에 걸쳐 Azure Cosmos DB 인스턴스를 포함합니다.

    워크로드를 구분하기 위해 클라이언트 애플리케이션에서 식별자를 만듭니다. 사용자 에이전트 접미사와 같은 플래그를 고려하여 각 로그 항목 또는 메트릭이 연결되어야 하는 워크로드를 식별합니다.

    다양한 워크로드를 구분하고, 예외 시나리오에 플래그를 지정하고, 예외 및 오류의 패턴을 추적하고, 호스트 컴퓨터 성능을 추적하기 위한 로그 및 메트릭 모니터링 전략 초안을 작성합니다.

    제한을 모니터링하고, 처리량 할당을 분석하고, 데이터의 크기를 추적하는 여러 경고를 정의합니다.

    파티션 및 인덱스 디자인을 기반으로 예상 메트릭 임계값을 계획합니다. 이러한 메트릭을 모니터링하여 계획된 임계값에 얼마나 근접한지 확인하는 계획을 만듭니다.

  • IaC(Infrastructure as Code)를 통해 배포를 자동화합니다. 코드 배포 사례에 인프라 배포 및 구성 변경을 비롯한 모든 Azure Cosmos DB 변경 내용을 통합합니다.

    NoSQL 계정 및 리소스에 대한 Azure Cosmos DB 배포를 자동화하는 모범 사례를 만들고 적용합니다.

    팀에서 동일한 템플릿을 사용하여 다른 비프로덕션 환경에 배포해야 합니다.

구성 권장 사항

Recommendation Benefit
애플리케이션 개발자가 최신 버전의 개발자 SDK를 사용하는지 확인합니다. 자세한 내용은 .NET SDKJava SDK를 참조하세요. NoSQL SDK용 각 Azure Cosmos DB에는 최소 권장 버전이 있습니다. 최신 버전의 개발자 SDK를 사용하면 애플리케이션의 성능, 보안 및 호환성을 유지할 수 있습니다.
각 SDK 에 대한 진단 주입 기술을 사용하여 추가 진단을 캡처합니다. 이러한 기술은 기본 메트릭 및 로그와 함께 워크로드에 대한 추가 정보를 추가합니다. 자세한 내용은 .NET SDKJava SDK를 참조하세요. 진단을 삽입하면 사용자 지정 메트릭, 추적 및 로그를 캡처하여 문제 해결을 개선하고 애플리케이션을 최적화할 수 있습니다. 기본 메트릭 및 로그가 다루지 않는 워크로드의 특정 측면을 모니터링할 수 있습니다.
호스트 컴퓨터 리소스 에 대한 경고를 만듭니다. 클라이언트 쪽 호스트 컴퓨터 문제로 인해 연결 및 가용성 문제가 발생할 수 있습니다. NoSQL SDK용 Azure Cosmos DB를 사용하는 클라이언트 애플리케이션을 사용하여 호스트 머신에서 CPU, 메모리 및 스토리지와 같은 리소스를 모니터링합니다.
정규화된 RU 사용량과 같은 메트릭을 사용하여 처리량 제한에 대한 경고를 만듭니다. 이 메트릭은 데이터베이스 또는 컨테이너에서 프로비전된 처리량의 사용률을 측정합니다.

경고를 사용하여 이 메트릭이 예상 임계값을 초과하는 시기를 추적합니다. 시간이 지남에 따라 워크로드에 대해 자세히 알아보면서 경고를 검토하고 조정합니다.
처리량 제한이 지속적으로 100%경우 요청은 일시적인 오류를 반환할 수 있습니다. 이 메트릭을 기반으로 경고를 만들면 사용량이 정의된 임계값을 초과하면 알림을 받을 수 있습니다. 애플리케이션의 성능에 영향을 미치기 전에 수정 작업을 수행할 수 있습니다.
쿼리 성능 메트릭을 사용하여 시간에 따른 상위 쿼리의 성능을 추적합니다. 쿼리 성능이 좋지 않으면 성능 문제를 해결하고 쿼리 모범 사례를 적용합니다. 성능 메트릭을 사용하면 쿼리 실행 방법과 잠재적인 병목 현상이 존재하는 위치를 더 잘 이해할 수 있습니다. 이 정보는 인덱싱 정책 및 쿼리 최적화에 대한 정보에 입각한 결정을 내리는 데 도움이 됩니다.
템플릿을 사용하여 계정 리소스를 자동으로 배포합니다. Azure Resource Manager, Bicep 또는 Terraform 템플릿을 사용하여 계정 및 후속 리소스의 배포를 자동화하는 것이 좋습니다. IaC 템플릿은 설명이 포함된 모델에서 인프라를 정의하는 데 도움이 됩니다. 반복성 및 일관성을 용이하게 하고 균일하고 예측 가능한 워크로드 환경을 유지하는 데 도움이 됩니다.
키 메트릭을 추적하여 파티션별 RU 사용량, 제한 및 형식별 요청 볼륨과 같은 워크로드의 일반적인 문제를 식별합니다. 이러한 주요 메트릭을 모니터링하면 데이터베이스가 다양한 조건에서 수행하는 방식을 이해하는 데 도움이 됩니다. 모니터링은 또한 일반적인 문제를 식별하여 정정 작업을 수행할 수 있도록 합니다.

성능 효율성

성능 효율성은 용량 을 관리하여 부하가 증가하는 경우에도 사용자 환경을 유지하는 것입니다. 이 전략에는 리소스 크기 조정, 잠재적인 병목 현상 식별 및 최적화, 최고 성능 최적화가 포함됩니다.

성능 효율성 디자인 원칙은 예상된 사용량에 대해 이러한 용량 목표를 달성하기 위한 높은 수준의 디자인 전략을 제공합니다.

워크로드 디자인 검사 목록

NoSQL용 Azure Cosmos DB의 주요 성능 지표를 기반으로 기준을 정의하기 위한 성능 효율성에 대한 디자인 검토 검사 목록을 기반으로 디자인 전략을 시작합니다.

  • Azure Cosmos DB 용량을 계획하고 사전에 관리합니다. 애플리케이션의 성능 기준을 정의합니다. 처리해야 할 수 있는 동시 사용자 및 트랜잭션 수를 측정합니다. 평균 사용자 흐름, 일반적인 작업 및 사용량 급증과 같은 워크로드 특성을 고려합니다.

    대상 사용자를 조사합니다. 가장 가까운 Azure 지역을 결정합니다.

  • 데이터 디자인을 최적화합니다. 해당 JSON 문서가 가능한 한 작도록 항목을 디자인합니다. 필요한 경우 여러 항목 간에 데이터를 분할하는 것이 좋습니다.

    항목 크기를 100KB 미만으로 유지합니다. 더 큰 항목은 일반적인 읽기 및 쓰기 작업에 더 많은 처리량을 사용합니다. 모든 필드를 프로젝션하는 더 큰 항목에 대한 쿼리는 상당한 처리량 비용을 추가할 수도 있습니다.

  • 올바른 계층, 기능 및 청구 모델을 선택합니다. 워크로드에 분석 저장소가 필요한지 확인합니다. 복잡한 쿼리를 위해 Azure Synapse Link 와 같은 분석 저장소 및 서비스를 고려합니다.

  • 배포 모델을 최적화합니다. 최종 사용자에게 가장 가까운 지역에 NoSQL용 Azure Cosmos DB를 배포합니다. | 최종 사용자에게 가장 가까운 지역에 NoSQL용 Azure Cosmos DB를 최대한 많이 배포하여 대기 시간을 줄입니다.

  • 성능을 위해 쿼리를 최적화합니다. 쿼리 성능 팁을 검토하고 사용 사례에 적용되는 전략을 적용합니다.

    하나 이상의 순서 지정 필드를 사용하는 쿼리를 식별합니다. 또한 여러 필드에 영향을 주는 작업을 식별합니다. 이러한 필드를 인덱싱 정책 디자인에 명시적으로 포함합니다.

    가능하면 대량 작업을 사용하도록 대규모 워크로드를 디자인합니다.

    자식 배열에 대한 쿼리를 식별하고 보다 효율적인 하위 쿼리의 후보인지 확인합니다.

    가장 일반적이고 복잡한 쿼리를 조사합니다. 여러 조회, 조인 또는 집계를 사용하는 쿼리를 식별합니다. 파티션 키 또는 인덱싱 정책에 대한 디자인 고려 사항에서 이러한 쿼리를 고려합니다.

    가장 일반적인 쿼리의 경우 각 페이지에 대해 예상되는 결과 수를 결정합니다. 이 숫자는 프리페치된 결과에 대해 버퍼링된 항목 수를 공식화하는 데 도움이 됩니다.

  • 코드 논리를 최적화합니다. 대부분의 SDK에서 클래스에 CosmosClient 싱글톤 패턴을 사용합니다. 대부분의 SDK에서 클라이언트 클래스를 싱글톤으로 사용합니다. 클라이언트 클래스는 자체 수명 주기를 관리하며 삭제되지 않도록 설계되었습니다. 인스턴스를 지속적으로 만들고 삭제하면 성능이 저하될 수 있습니다.

구성 권장 사항

Recommendation Benefit
용량 계산기와 같은 도구를 사용하여 성능 기준에 필요한 처리량의 양을 결정합니다. 자동 크기 조정과 같은 기능을 사용하여 실제 워크로드와 보다 밀접하게 일치하도록 실제 처리량의 크기를 조정합니다. 나중에 실제 처리량 소비량을 모니터링하고 조정합니다. 용량 계산기를 사용하면 처음에 리소스 프로비저닝에 대한 정보에 입각한 결정을 내릴 수 있습니다. 데이터베이스가 불필요한 비용 없이 예상 부하를 처리할 수 있는지 확인할 수 있습니다. 자동 크기 조정 처리량은 프로비전된 처리량을 실제 워크로드 요구 사항에 맞게 자동으로 조정합니다.
적절한 경우 클라이언트 및 서버 쪽에서 최적화 기술을 사용합니다. 기본 제공 통합 캐시를 활용합니다. 프리페치되거나 버퍼링되고 각 페이지에 대해 반환되는 항목 수를 관리하도록 SDK를 구성합니다. 코드 최적화 기술은 반복 읽기 및 쿼리에 대한 RU 요금을 줄여 사용자 환경을 개선하고 클라이언트 및 서버 쪽 애플리케이션을 보다 효율적으로 만들 수 있습니다. 이러한 이점은 비용을 줄일 수 있습니다.
전역 배포를 사용하고 최종 사용자에게 가장 가까운 모든 지역에 Azure Cosmos DB 인스턴스를 배포합니다. 최종 사용자에게 가장 가까운 지역에 데이터베이스를 배포하면 읽기 대기 시간을 줄여 사용자 환경을 향상시킬 수 있습니다. 읽기 복제를 사용하면 쓰기 작업이 구성된 방식에 관계없이 수행 가능한 읽기 작업을 수행할 수 있습니다.
클라이언트가 지리적으로 분산된 경우 다중 지역 쓰기 를 사용합니다. 클라이언트가 가장 가까운 지역에 쓸 수 있도록 하여 쓰기 대기 시간을 줄입니다. 워크로드는 충돌 해결 논리를 지원해야 하며 애플리케이션은 최종 일관성 동작을 예상해야 합니다.
최상의 성능을 위해 직접 모드 용 SDK를 구성합니다. 이 모드를 사용하면 클라이언트가 TCP(Transmission Control Protocol) 연결을 서비스의 파티션에 직접 열고 중간 게이트웨이 없이 직접 요청을 보낼 수 있습니다. 직접 모드는 네트워크 홉 수가 적기 때문에 더 나은 성능을 제공합니다.
높은 처리량이 필요한 시나리오에서 클라이언트 SDK의 대량 기능을 사용합니다. 대량 기능은 자동으로 작업을 관리하고 일괄 처리하여 처리량을 최대화합니다. 대량 기능을 사용하면 백 엔드 요청 수가 줄어들고 파티션 간에 작업을 효율적으로 분산할 수 있습니다. 이 방법은 성능 및 리소스 사용량을 향상시킵니다.
대량 작업에 대해 인덱싱을 사용하지 않도록 설정합니다. 삽입, 바꾸기 또는 upsert 작업이 여러 개 있는 경우 인덱싱을 사용하지 않도록 설정하여 해당 SDK의 대량 지원을 사용하는 동안 작업 속도를 향상시킵니다. 나중에 인덱싱을 즉시 다시 활성화할 수 있습니다. 대량 작업 중에 인덱싱을 사용하지 않도록 설정하면 인덱스 유지 관리와 관련된 오버헤드가 줄어듭니다. 대량 작업에 리소스를 더 잘 활용하여 데이터 삽입 및 업데이트를 가속화할 수 있습니다.
복잡한 작업에서 필드에 대한 복합 인덱스를 만듭니다. 여러 필드가 있는 문에 ORDER BY 복합 인덱스를 사용하는 것이 좋습니다. 복합 인덱스는 여러 필드에 대한 작업의 효율성을 높일 수 있으므로 데이터를 빠르고 효율적으로 검색할 수 있습니다.
SDK에 대한 호스트 클라이언트 머신을 최적화합니다. 대부분의 일반적인 경우 .NET 또는 Java용 SDK를 사용하는 64비트 호스트 머신에서 4개 이상의 코어와 8GB의 메모리를 사용합니다.

호스트 컴퓨터 에서 가속화된 네트워킹을 사용하도록 설정합니다.
사양이 더 높은 컴퓨터를 사용하면 SDK에서 더 많은 작업을 동시에 처리할 수 있습니다. 가속화된 네트워킹은 대기 시간을 줄여 응답 시간을 늘릴 수 있습니다.
하위 쿼리를 전략적으로 사용하여 큰 데이터 집합을 조인하는 쿼리를 최적화합니다. 항목 내에서 배열을 조인하기 전에 하위 쿼리를 사용하여 배열을 필터링하여 자체 조인 식을 최적화합니다.

파티션 간 쿼리의 경우 파티션 키에 필터를 포함하도록 쿼리를 최적화하여 쿼리 라우팅을 가능한 최소 파티션으로 최적화합니다.
여러 배열이 관련되고 필터링되지 않은 경우 자식 배열을 조인하는 쿼리의 복잡성이 증가할 수 있습니다. 하위 쿼리를 사용하면 배열을 조인하기 전에 필터링하여 자체 조인 식의 효율성을 높일 수 있습니다.
가장 복잡한 쿼리 에 분석 워크로드 를 사용합니다.

대규모 컨테이너를 통해 자주 집계를 실행하거나 쿼리를 조인하는 경우 분석 저장소를 사용하도록 설정하고 Azure Synapse Analytics에서 쿼리를 수행하는 것이 좋습니다.
분석 워크로드는 트랜잭션 워크로드에서 격리되고 복잡한 쿼리를 처리하도록 최적화되어 성능 저하를 방지하고 더 빠른 결과를 보장합니다.

Azure 정책

Azure는 NoSQL용 Azure Cosmos DB 및 해당 종속성과 관련된 광범위한 기본 제공 정책 집합을 제공합니다. 이전 권장 사항 중 일부는 Azure Policy를 통해 감사할 수 있습니다. 예를 들어 다음을 확인할 수 있습니다.

  • Azure Cosmos DB 계정은 두 개 이상의 지역에 배포됩니다.

  • Azure Cosmos DB 데이터베이스 계정은 영역 중복성을 위해 적절하게 구성됩니다.

  • Azure Cosmos DB 데이터베이스 계정에는 인증에 Microsoft Entra ID가 필요하므로 로컬 인증 방법을 사용하지 않도록 설정해야 합니다.

  • 공용 네트워크 액세스는 Azure Cosmos DB 계정이 공용 인터넷에 노출되지 않도록 비활성화됩니다.

  • 리소스 공급자를 통해 Azure Cosmos DB 데이터베이스 및 컨테이너를 만들 때는 최대 처리량을 제한해야 합니다.

포괄적인 거버넌스를 위해 Azure Cosmos DB for NoSQL에 대한 Azure Policy 기본 제공 정의 및 데이터 스토리지의 보안에 영향을 줄 수 있는 기타 정책을 검토합니다.

Azure Advisor 권장 사항

Azure Advisor는 모범 사례를 따라 Azure 배포를 최적화하는 데 도움이 되는 개인 설정된 클라우드 컨설턴트입니다.

자세한 내용은 Azure Advisor를 참조하세요.