다음을 통해 공유


Azure Cosmos DB의 벡터 검색을 위한 다중 테넌트

"OpenAI는 Cosmos DB를 사용하여 가장 빠르게 성장하는 소비자 앱 중 하나인 ChatGPT 서비스를 동적으로 확장하여 높은 안정성과 낮은 유지 관리를 지원합니다." — Satya Nadella

Azure Cosmos DB는 벡터 검색 기능을 갖춘 세계 최초의 모든 기능을 갖춘 서버리스 운영 데이터베이스로 탁월한 확장성과 성능을 제공합니다. Azure Cosmos DB를 사용하면 사용자는 벡터 검색 기능을 향상하여 다중 테넌트 애플리케이션에 대한 높은 안정성과 낮은 유지 관리를 보장할 수 있습니다.

다중 테넌트를 사용하면 데이터베이스의 단일 인스턴스가 여러 고객 또는 테넌트에 동시에 서비스를 제공할 수 있습니다. 이 방식은 인프라와 운영 오버헤드를 효율적으로 공유하여 비용을 절약하고 관리를 간소화합니다. 이는 SaaS 애플리케이션 및 일부 내부 엔터프라이즈 솔루션에 대한 중요한 디자인 고려 사항입니다.

멀티테넌시 도입은 복잡성을 초래합니다. 고유한 워크로드, 요구 사항 및 SLA(서비스 수준 계약)가 있을 수 있는 모든 테넌트에서 고성능을 유지하려면 시스템을 효율적으로 확장해야 합니다.

ResearchHub라는 가상의 AI 지원 연구 플랫폼을 상상해 보세요. 수천 개의 회사와 개인 연구원에게 서비스를 제공하는 ResearchHub는 다양한 사용자 기반, 데이터 규모 및 SLA를 관리합니다. 우수한 사용자 환경을 유지하려면 낮은 쿼리 대기 시간과 고성능을 보장해야 합니다.

DiskANN 벡터 인덱스 기능을 갖춘 Azure Cosmos DB는 다중 테넌트 디자인을 간소화하여 고성능 애플리케이션을 위한 효율적인 데이터 스토리지 및 액세스 메커니즘을 제공합니다.

Azure Cosmos DB의 다중 테넌트 모델

Azure Cosmos DB에서는 다중 테넌트 관리에 대한 두 가지 기본 방법, 즉 테넌트당 파티션 키 또는 테넌트당계정으로 각각 고유한 혜택 및 장단점 집합을 사용하는 것이 좋습니다.

테넌트당 파티션 키

테넌트 밀도를 높이고 격리 수준을 낮추려면 테넌트당 파티션 키 모델이 효과적입니다. 각 테넌트에는 지정된 컨테이너 내에서 고유한 파티션 키가 할당되어 데이터를 논리적으로 분리할 수 있습니다. 이 전략은 각 테넌트의 워크로드 볼륨이 거의 동일한 경우에 가장 효과적입니다. 상당한 오차가 있는 경우 고객은 해당 테넌트를 자신의 계정에서 격리하는 것을 고려해야 합니다. 또한 단일 테넌트의 데이터가 20GB를 초과하는 경우 HPK(계층적 파티션 키)를 사용해야 합니다. 특히 벡터 검색의 경우 벡터 검색 쿼리가 특정 파티션 또는 파티션 집합에 초점을 맞출 수 있는 경우 quantizedFlat 인덱스가 잘 수행될 수 있습니다.

이점:

  • 비용 효율성: 여러 테넌트에서 단일 Cosmos DB 계정을 공유하면 오버헤드가 줄어듭니다.
  • 확장성: 각각 파티션 키 내에 격리된 다수의 테넌트를 관리할 수 있습니다.
  • 간소화된 관리: 관리할 Cosmos DB 계정 수가 줄어듭니다.
  • HPK(계층적 파티션 키): 테넌트가 많은 다중 테넌트 앱에서 데이터 조직 및 쿼리 성능을 최적화합니다.

단점:

  • 리소스 경합: 공유 리소스는 사용량이 많은 동안 경합이 발생할 수 있습니다.
  • 제한된 격리: 논리적이지만 물리적 격리가 아니어 엄격한 격리 요구 사항을 충족하지 못할 수 있습니다.
  • 유연성 감소: 지역 복제, 지정 시간 복원 및 고객 관리형 키와 같은 계정 수준 기능을 사용하도록 설정하기 위해 테넌트당 유연성이 감소했습니다.

계층적 분할: 향상된 데이터 구성

계층적 분할은 테넌트당 파티션 키 모델을 기반으로 빌드되어 더 깊은 수준의 데이터 구성을 추가합니다. 이 방법에는 보다 세부적인 데이터 관리를 위해 여러 수준의 파티션 키를 만드는 작업이 포함됩니다. 계층적 분할의 가장 낮은 수준은 높은 카디널리티를 가져야 합니다. 일반적으로 이 수준에 ID/GUID를 사용하여 테넌트당 20GB를 초과하는 지속적인 확장성을 보장하는 것이 좋습니다.

장점:

  • 최적화된 쿼리: 부모 파티션 수준에서 하위 파트를 보다 정확하게 대상으로 지정하면 쿼리 대기 시간이 줄어듭니다.
  • 향상된 확장성: 보다 쉽게 크기를 조정하기 위해 더 심층적인 데이터 구분을 용이하게 합니다.
  • 더 나은 리소스 할당: 워크로드를 균등하게 분산하여 높은 테넌트 수에 대한 병목 상태를 최소화합니다.

고려 사항:

  • 애플리케이션에 테넌트가 거의 없으며 계층적 분할을 사용하는 경우 동일한 첫 번째 수준 키를 가진 모든 문서가 동일한 실제 파티션에 쓰기 때문에 병목 현상이 발생할 수 있습니다.

본보기: ResearchHub는 DepartmentIdResearcherId와 같은 다양한 수준으로 구성하여 각 테넌트의 파티션 내에서 데이터를 계층화하여 효율적인 관리 및 쿼리를 용이하게 할 수 있습니다.

AI 데이터 계층화를 보여 주는 다이어그램

테넌트별 계정

격리를 최대화하려면 테넌트당 계정 모델이 바람직합니다. 각 테넌트에는 전용 Cosmos DB 계정이 있어 리소스가 완전히 분리됩니다.

이점:

  • 높은 격리: 전용 리소스로 인한 경합 또는 간섭이 없습니다.
  • 사용자 지정 SLA: 리소스와 SLA는 개별 테넌트 요구 사항에 맞게 사용자 지정될 수 있습니다.
  • 향상된 보안: 물리적 데이터 격리는 강력한 보안을 보장합니다.
  • 유연성: 테넌트는 필요에 따라 지역 복제, 지정 시간 복원 및 고객 관리형 키와 같은 계정 수준 기능을 사용하도록 설정할 수 있습니다.

단점:

  • 향상된 관리: 여러 Cosmos DB 계정을 관리하는 복잡성이 더 높습니다.
  • 더 높은 비용: 계정이 많을수록 인프라 비용이 높아질 수 있습니다.

고객 관리형 키를 통한 보안 격리

Azure Cosmos DB는 데이터 암호화를 위한 고객 관리형 키를 지원하여 다중 테넌트 환경에 추가 보안 계층을 추가합니다.

구현 단계:

  • Azure Key Vault 설정: 암호화 키를 안전하게 저장합니다.
  • Cosmos DB에 연결: Key Vault를 Cosmos DB 계정과 연결합니다.
  • 키를 정기적으로 회전합니다. 키를 정기적으로 업데이트하여 보안을 강화합니다.

고객 관리형 키를 사용하면 각 테넌트의 데이터가 고유하게 암호화되어 강력한 보안과 준수가 보장됩니다.

테넌트당 AI 계정 예제를 보여 주는 다이어그램

기타 격리 모델

컨테이너 및 데이터베이스 격리

Azure Cosmos DB는 테넌트당 파티션 키 및 테넌트별 계정 모델 외에도 컨테이너 격리데이터베이스 격리와 같은 다른 격리 방법을 제공합니다. 이러한 방식은 다양한 수준의 성능 격리를 제공하지만 테넌트당 계정 모델과 동일한 수준의 보안 격리를 제공하지는 않습니다.

컨테이너 격리

컨테이너 격리 모델에서는 각 테넌트에 공유 Cosmos DB 계정 내의 별도 컨테이너가 할당됩니다. 이 모델은 성능 및 리소스 할당 측면에서 일정 수준의 격리를 허용합니다.

이점:

  • 향상된 성능 격리: 컨테이너는 특정 성능 리소스를 할당하여 한 테넌트의 워크로드가 다른 테넌트에 미치는 영향을 최소화할 수 있습니다.
  • 보다 간편한 관리: 단일 계정 내에서 여러 컨테이너를 관리하는 것은 일반적으로 여러 계정을 관리하는 것보다 쉽습니다.
  • 비용 효율성: 테넌트당 파티션 키 모델과 마찬가지로 이 메서드는 여러 계정의 오버헤드를 줄입니다.

단점:

  • 제한된 보안 격리: 별도의 계정과 달리 동일한 계정 내의 컨테이너는 물리적 데이터 격리를 제공하지 않습니다. 따라서 이 모델은 엄격한 보안 요구 사항을 충족하지 못할 수 있습니다.
  • 리소스 경합: 리소스 제한을 위반하는 경우 한 컨테이너의 많은 워크로드가 다른 컨테이너에도 영향을 줄 수 있습니다.

데이터베이스 격리

데이터베이스 격리 모델은 공유 Cosmos DB 계정 내에서 각 테넌트에 별도의 데이터베이스를 할당합니다. 이는 리소스 할당 및 관리 측면에서 향상된 격리를 제공합니다.

이점:

  • 향상된 성능: 별도의 데이터베이스는 리소스 경합의 위험을 줄여 성능 격리를 향상시킵니다.
  • 유연한 리소스 할당: 데이터베이스 수준에서 리소스를 할당하고 관리할 수 있으므로 맞춤형 성능 기능을 제공합니다.
  • 중앙 집중식 관리: 여러 계정에 비해 관리가 더 쉬우면서도 컨테이너 수준 분리보다 격리가 더 큽니다.

단점:

  • 제한된 보안 격리: 컨테이너 격리와 마찬가지로 단일 계정 내에 별도의 데이터베이스를 두는 것은 물리적 데이터 격리를 제공하지 않습니다.
  • 복잡성: 특히 테넌트 수가 증가함에 따라 여러 데이터베이스를 관리하는 것은 컨테이너 관리보다 더 복잡할 수 있습니다.

컨테이너 및 데이터베이스 격리 모델은 테넌트당 계정 모델과 동일한 수준의 보안 격리를 제공하지 않지만 성능 격리 및 유연한 리소스 관리를 달성하는 데 여전히 유용할 수 있습니다. 이러한 방법은 비용 효율성과 간소화된 관리가 우선 순위이며 엄격한 보안 격리가 중요한 요구 사항이 아닌 시나리오에 유용합니다.

다중 테넌트 애플리케이션의 특정 요구 사항과 제약 조건을 신중하게 평가하면 Azure Cosmos DB에서 가장 적합한 격리 모델을 선택하고 성능, 보안 및 비용 고려 사항의 균형을 유지하여 테넌트에 대한 최상의 결과를 얻을 수 있습니다.

실제 구현 고려 사항

Cosmos DB를 사용하여 다중 테넌트 시스템을 설계할 때 다음 요소를 고려합니다.

  • 테넌트 워크로드: 데이터 크기 및 활동을 평가하여 적절한 격리 모델을 선택합니다.
  • 성능 요구 사항: 아키텍처를 정의된 SLA 및 성능 메트릭에 맞춥니다.
  • 비용 관리: 격리 및 성능의 필요성과 인프라 비용의 균형을 조정합니다.
  • 확장성: 확장성 있는 모델을 선택하여 성장을 계획합니다.

Azure Cosmos DB의 실제 구현

테넌트당 파티션 키:

  • 파티션 키 할당: 각 테넌트의 고유 키는 논리적 분리를 보장합니다.
  • 데이터 저장: 테넌트 데이터는 각 파티션 키로 제한됩니다.
  • 쿼리 최적화: 효율적인 대상 쿼리를 위해 파티션 키를 사용합니다.

계층적 분할:

  • 다중 수준 키를 만듭니다. 테넌트 파티션 내에서 데이터를 추가로 구성합니다.
  • 대상 쿼리: 정확한 하위 부분 대상 지정을 사용하여 성능을 향상시킵니다.
  • 리소스 관리: 병목 현상을 방지하기 위해 워크로드를 균등하게 분산합니다.

테넌트당 계정:

  • 별도의 계정을 제공합니다. 각 테넌트는 전용 Cosmos DB 계정을 가져옵니다.
  • 리소스 사용자 지정: 테넌트 요구 사항에 맞게 성능 및 SLA를 조정합니다.
  • 보안 보장: 물리적 데이터 격리는 강력한 보안 및 규정 준수를 제공합니다.

Azure Cosmos DB는 DiskANN 벡터 인덱스 기능을 지원하므로 ResearchHub와 같은 AI 지원 연구 플랫폼과 같이 빠른 고차원 검색이 필요한 애플리케이션에 탁월한 선택입니다. 이러한 기능을 적용하는 방법은 다음과 같습니다.

효율적인 스토리지 및 검색:

  • 벡터 인덱싱: DiskANN 벡터 인덱스를 사용하여 고차원 벡터를 효율적으로 저장하고 검색합니다. 이는 이미지 인식이나 문서 유사성과 같은 대규모 데이터 세트의 유사성 검색과 관련된 애플리케이션에 유용합니다.
  • 성능 최적화: DiskANN의 벡터 검색 기능은 빠르고 정확한 검색을 가능하게 하여 대기 시간이 짧고 성능이 높으며, 이는 좋은 사용자 환경을 유지하는 데 매우 중요합니다.

테넌트 간 크기 조정:

  • 테넌트당 파티션 키: 파티션 키를 활용하여 Cosmos DB의 확장 가능한 인프라를 활용하면서 테넌트 데이터를 논리적으로 격리합니다.
  • 계층적 분할: 계층적 분할을 구현하여 각 테넌트의 파티션 내에서 데이터를 추가로 분할하여 쿼리 성능 및 리소스 배포를 개선합니다.

보안 및 규정 준수:

  • 고객 관리형 키: 미사용 데이터 암호화를 위해 고객 관리형 키를 구현하여 각 테넌트의 데이터가 안전하게 격리되도록 합니다.
  • 일반 키 회전: Azure Key Vault에 저장된 암호화 키를 정기적으로 회전하여 보안을 강화합니다.

실제 예제: ResearchHub 구현

테넌트당 파티션 키:

  • 파티션 키 할당: 각 조직(테넌트)에는 고유한 파티션 키가 할당됩니다.
  • 데이터 스토리지: 테넌트에 대한 모든 연구원의 데이터는 파티션 내에 저장되어 논리적 분리를 보장합니다.
  • 쿼리 최적화: 쿼리는 테넌트의 파티션 키를 사용하여 실행되어 데이터 액세스를 격리하여 성능을 향상합니다.

계층적 분할:

  • 다중 수준 파티션 키: 테넌트 파티션 내의 데이터는 DepartmentIdResearcherId 또는 기타 관련 특성에 따라 더 세분화됩니다.
  • 세부적인 데이터 관리: 이 계층적 방식을 통해 ResearchHub는 데이터를 보다 효율적으로 관리하고 쿼리하여 대기 시간을 줄이고 응답 시간을 개선할 수 있습니다.

테넌트당 계정:

  • Cosmos DB 계정을 구분합니다. 유명 클라이언트 또는 중요한 데이터가 있는 클라이언트는 개별 Cosmos DB 계정을 제공합니다.
  • 사용자 지정 구성: 리소스 및 SLA는 각 테넌트의 특정 요구 사항을 충족하도록 조정되어 최적의 성능과 보안을 보장합니다.
  • 향상된 데이터 보안: 데이터를 고객 관리형 암호화 키와 물리적으로 분리하면 강력한 보안 규정 준수가 보장됩니다.

결론

특히 DiskANN 벡터 인덱스 기능을 갖춘 Azure Cosmos DB의 다중 테넌트는 확장성 있는 고성능 AI 애플리케이션을 빌드하기 위한 강력한 솔루션을 제공합니다. 테넌트별 파티션 키, 계층적 분할 또는 테넌트별 계정 모델 중 무엇을 선택하든 비용, 보안 및 성능의 균형을 효과적으로 맞출 수 있습니다. 이러한 모델과 모범 사례를 사용하면 다중 테넌트 애플리케이션이 고객의 다양한 요구 사항을 충족하고 탁월한 사용자 환경을 제공할 수 있습니다.

Azure Cosmos DB는 강력하고 안전하며 확장성 있는 다중 테넌트 환경을 빌드하는 데 필요한 도구를 제공합니다. DiskANN 벡터 인덱싱 기능을 사용하면 AI 애플리케이션을 구동하는 빠르고 고차원적인 검색을 제공할 수 있습니다.