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에서는 다중 테넌트를 관리하는 두 가지 기본 방식, 즉 테넌트당 파티션 키 또는 테넌트당 계정을 권장하며 각각 고유한 이점과 장단점이 있습니다.
1. 테넌트당 파티션 키
테넌트 밀도를 높이고 격리 수준을 낮추려면 테넌트당 파티션 키 모델이 효과적입니다. 각 테넌트에는 지정된 컨테이너 내에서 고유한 파티션 키가 할당되어 데이터를 논리적으로 분리할 수 있습니다. 이 전략은 각 테넌트의 워크로드 볼륨이 거의 동일한 경우에 가장 효과적입니다. 상당한 오차가 있는 경우 고객은 해당 테넌트를 자신의 계정에서 격리하는 것을 고려해야 합니다. 또한 단일 테넌트의 데이터가 20GB를 초과하는 경우 HPK(계층적 파티션 키)를 사용해야 합니다. 특히 벡터 검색의 경우, 벡터 검색 쿼리가 특정 파티션이나 파티션 집합에 집중될 수 있으면 QuantizedFlat 인덱스가 매우 잘 작동할 수 있습니다.
이점:
- 비용 효율성: 여러 테넌트에서 단일 Cosmos DB 계정을 공유하면 오버헤드가 줄어듭니다.
- 확장성: 각각 파티션 키 내에 격리된 다수의 테넌트를 관리할 수 있습니다.
- 관리 간소화: 관리할 Cosmos DB 계정 수가 줄어듭니다.
- HPK(계층적 파티션 키): 테넌트 수가 많은 다중 테넌트 앱에서 데이터 구성 및 쿼리 성능을 최적화합니다.
단점:
- 리소스 경합: 공유 리소스는 사용량이 가장 많을 때 경합을 일으킬 수 있습니다.
- 제한적 격리: 실제 격리가 아닌 논리적 격리로 엄격한 격리 요구 사항을 충족하지 못할 수 있습니다.
- 낮은 유연성: 지역 복제, PITR(특정 시점 복원), CMK(고객 관리형 키)와 같은 계정 수준 기능을 사용하도록 설정하기 위한 테넌트당 유연성이 감소합니다.
계층적 분할: 향상된 데이터 구성
계층적 분할은 테넌트당 파티션 키 모델을 기반으로 빌드되어 더 깊은 수준의 데이터 구성을 추가합니다. 이 방법에는 보다 세부적인 데이터 관리를 위해 여러 수준의 파티션 키를 만드는 작업이 포함됩니다. 계층적 분할의 가장 낮은 수준은 높은 카디널리티를 가져야 합니다. 일반적으로 테넌트당 20GB를 초과하는 지속적인 확장성을 보장하려면 이 수준에 ID/GUID를 사용하는 것이 좋습니다.
장점:
- 최적화된 쿼리: 부모 파티션 수준에서 하위 파티션을 더욱 정확하게 대상을 지정하면 쿼리 대기 시간이 줄어듭니다.
- 개선된 확장성: 보다 쉬운 크기 조정을 위해 더 깊은 데이터 세그먼트를 지원합니다.
- 더 나은 리소스 할당: 워크로드를 균등하게 분산하여 테넌트 수가 많아 병목 현상을 최소화합니다.
고려 사항:
- 애플리케이션에 테넌트가 거의 없고 계층적 분할을 사용하는 경우 동일한 첫 번째 수준 키를 가진 모든 문서가 동일한 실제 파티션에 기록되므로 병목 현상이 발생할 수 있습니다.
예: ResearchHub는 "DepartmentId" 및 "ResearcherId"와 같은 다양한 수준에서 데이터를 구성하여 각 테넌트 파티션 내의 데이터를 계층화하여 효율적인 관리 및 쿼리를 용이하게 할 수 있습니다.
2. 테넌트별 계정
격리를 최대화하려면 테넌트당 계정 모델이 바람직합니다. 각 테넌트에는 전용 Cosmos DB 계정이 있어 리소스가 완전히 분리됩니다.
이점:
- 높은 격리: 전용 리소스로 인한 경합이나 방해가 없습니다.
- 사용자 지정 SLA: 리소스와 SLA는 개별 테넌트 요구 사항에 맞게 사용자 지정될 수 있습니다.
- 보안 강화: 실제 데이터 격리로 강력한 보안이 보장됩니다.
- 유연성: 테넌트는 필요에 따라 지역 복제, PITR(특정 시점 복원), CMK(고객 관리형 키)와 같은 계정 수준 기능을 사용하도록 설정할 수 있습니다.
단점:
- 관리 강화: 여러 Cosmos DB 계정을 관리하는 것이 더 복잡해졌습니다.
- 더 높은 비용: 계정이 많을수록 인프라 비용도 높아집니다.
고객 관리형 키를 통한 보안 격리
Azure Cosmos DB는 데이터 암호화를 위한 고객 관리형 키를 지원하여 다중 테넌트 환경에 추가 보안 계층을 추가합니다.
구현 단계:
- Azure Key Vault 설정: 암호화 키를 안전하게 저장합니다.
- Cosmos DB에 연결: Key Vault를 Cosmos DB 계정과 연결합니다.
- 정기적인 키 회전: 키를 정기적으로 업데이트하여 보안을 강화합니다.
고객 관리형 키를 사용하면 각 테넌트의 데이터가 고유하게 암호화되어 강력한 보안과 준수가 보장됩니다.
기타 격리 모델
컨테이너 및 데이터베이스 격리
Azure Cosmos DB는 테넌트당 파티션 키 및 테넌트당 계정 모델 외에도 컨테이너 격리 및 데이터베이스 격리와 같은 다른 격리 방법을 제공합니다. 이러한 방식은 다양한 수준의 성능 격리를 제공하지만 테넌트당 계정 모델과 동일한 수준의 보안 격리를 제공하지는 않습니다.
컨테이너 격리
컨테이너 격리 모델에서는 각 테넌트에 공유 Cosmos DB 계정 내의 별도 컨테이너가 할당됩니다. 이 모델은 성능 및 리소스 할당 측면에서 일정 수준의 격리를 허용합니다.
이점:
- 성능 격리 향상: 컨테이너에 특정 성능 리소스를 할당하여 한 테넌트의 워크로드가 다른 테넌트에 미치는 영향을 최소화할 수 있습니다.
- 관리 용이성: 단일 계정 내에서 여러 컨테이너를 관리하는 것이 일반적으로 여러 계정을 관리하는 것보다 쉽습니다.
- 비용 효율성: 테넌트당 파티션 키 모델과 유사하게 이 방법은 여러 계정의 오버헤드를 줄여줍니다.
단점:
- 보안 격리 제한: 별도의 계정과 달리 동일한 계정 내의 컨테이너는 실제 데이터 격리를 제공하지 않습니다. 따라서 이 모델은 엄격한 보안 요구 사항을 충족하지 못할 수 있습니다.
- 리소스 경합: 한 컨테이너의 워크로드가 많아 리소스 제한을 위반하면 다른 컨테이너에도 영향을 미칠 수 있습니다.
데이터베이스 격리
데이터베이스 격리 모델은 공유 Cosmos DB 계정 내에서 각 테넌트에 별도의 데이터베이스를 할당합니다. 이는 리소스 할당 및 관리 측면에서 향상된 격리를 제공합니다.
이점:
- 성능 향상: 별도의 데이터베이스는 리소스 경합의 위험을 줄여 더 나은 성능 격리를 제공합니다.
- 유연한 리소스 할당: 데이터베이스 수준에서 리소스를 할당하고 관리하여 맞춤형 성능 기능을 제공할 수 있습니다.
- 중앙 집중식 관리: 여러 계정에 비해 관리하기가 쉽지만 컨테이너 수준 격리보다 더 많은 격리 기능을 제공합니다.
단점:
- 보안 격리 제한: 컨테이너 격리와 유사하게 단일 계정 내에 별도의 데이터베이스가 있으면 실제 데이터 격리가 제공되지 않습니다.
- 복잡성: 특히 테넌트 수가 증가함에 따라 여러 데이터베이스를 관리하는 것은 컨테이너 관리보다 더 복잡할 수 있습니다.
컨테이너 및 데이터베이스 격리 모델은 테넌트당 계정 모델과 동일한 수준의 보안 격리를 제공하지 않지만 성능 격리 및 유연한 리소스 관리를 달성하는 데 여전히 유용할 수 있습니다. 이러한 방법은 비용 효율성과 간소화된 관리가 우선시되고 엄격한 보안 격리가 중요한 요구 사항이 아닌 시나리오에 유용합니다.
다중 테넌트 애플리케이션의 특정 요구 사항과 제약 조건을 신중하게 평가하면 Azure Cosmos DB에서 가장 적합한 격리 모델을 선택하고 성능, 보안 및 비용 고려 사항의 균형을 유지하여 테넌트에 대한 최상의 결과를 얻을 수 있습니다.
실제 구현 고려 사항
Cosmos DB를 사용하여 다중 테넌트 시스템을 설계할 때 다음 요소를 고려합니다.
- 테넌트 워크로드: 데이터 크기와 작업을 평가하여 적절한 격리 모델을 선택합니다.
- 성능 요구 사항: 정의된 SLA 및 성능 메트릭에 맞게 아키텍처를 조정합니다.
- 비용 관리: 격리 및 성능 요구 사항과 인프라 비용의 균형을 유지합니다.
- 확장성: 확장성 있는 모델을 선택하여 성장을 계획합니다.
Azure Cosmos DB의 실제 구현
테넌트당 파티션 키:
- 파티션 키 할당: 각 테넌트의 고유 키는 논리적 분리를 보장합니다.
- 데이터 저장: 테넌트 데이터는 해당 파티션 키로 제한됩니다.
- 쿼리 최적화: 효율적인 대상 쿼리를 위해 파티션 키를 사용합니다.
계층적 분할:
- 다단계 키 만들기: 테넌트 파티션 내에서 데이터를 추가로 구성합니다.
- 쿼리 대상 지정: 정확한 하위 파티션 대상 지정으로 성능을 향상합니다.
- 리소스 관리: 워크로드를 균등하게 분산하여 병목 현상을 방지합니다.
테넌트별 계정:
- 별도의 계정 제공: 각 테넌트는 전용 Cosmos DB 계정을 가져옵니다.
- 리소스 사용자 지정: 테넌트 요구 사항에 맞게 성능과 SLA를 조정합니다.
- 보안 보장: 실제 데이터 격리는 강력한 보안과 준수를 제공합니다.
벡터 검색과 함께 Azure Cosmos DB를 사용하기 위한 모범 사례
Azure Cosmos DB는 DiskANN 벡터 인덱스 기능을 지원하므로 ResearchHub와 같은 AI 지원 연구 플랫폼과 같이 빠른 고차원 검색이 필요한 애플리케이션에 탁월한 선택입니다. 이러한 기능을 활용하는 방법은 다음과 같습니다.
효율적인 스토리지 및 검색:
- 벡터 인덱싱: DiskANN 벡터 인덱스를 사용하여 고차원 벡터를 효율적으로 저장하고 검색합니다. 이는 이미지 인식이나 문서 유사성과 같은 대규모 데이터 세트의 유사성 검색과 관련된 애플리케이션에 유용합니다.
- 성능 최적화: DiskANN의 벡터 검색 기능을 사용하면 빠르고 정확한 검색이 가능하며, 우수한 사용자 환경을 유지하는 데 중요한 낮은 대기 시간과 고성능을 보장합니다.
테넌트 간 크기 조정:
- 테넌트별 파티션 키: 파티션 키를 활용하여 Cosmos DB의 확장성 있는 인프라를 활용하는 동시에 테넌트 데이터를 논리적으로 격리합니다.
- 계층적 분할: 계층적 분할을 구현하여 각 테넌트의 파티션 내에서 데이터를 추가로 분할하여 쿼리 성능과 리소스 배포를 개선합니다.
보안 및 규정 준수:
- 고객 관리형 키: 미사용 데이터 암호화를 위한 고객 관리형 키를 구현하여 각 테넌트의 데이터가 안전하게 격리되도록 합니다.
- 정기적인 키 회전: Azure Key Vault에 저장된 암호화 키를 정기적으로 회전하여 보안을 강화합니다.
실제 사례: ResearchHub 구현
테넌트당 파티션 키:
- 파티션 키 할당: 각 조직(테넌트)에는 고유한 파티션 키가 할당됩니다.
- 데이터 스토리지: 테넌트에 대한 모든 연구원의 데이터는 해당 파티션 내에 저장되어 논리적 분리가 보장됩니다.
- 쿼리 최적화: 테넌트의 파티션 키를 사용하여 쿼리가 실행되므로 데이터 액세스를 격리하여 성능이 향상됩니다.
계층적 분할:
- 다단계 파티션 키: 테넌트 파티션 내의 데이터는 "DepartmentId", "ResearcherId" 또는 기타 관련 특성을 기준으로 더 세분화됩니다.
- 세부적인 데이터 관리: 이 계층적 방식을 통해 ResearchHub는 데이터를 보다 효율적으로 관리하고 쿼리하여 대기 시간을 줄이고 응답 시간을 개선할 수 있습니다.
테넌트별 계정:
- 별도의 Cosmos DB 계정: 유명 고객이나 중요한 데이터를 보유한 고객에게는 개별 Cosmos DB 계정이 제공됩니다.
- 사용자 지정 구성: 리소스와 SLA는 각 테넌트의 특정 요구 사항을 충족하도록 사용자 지정되어 최적의 성능과 보안을 보장합니다.
- 데이터 보안 향상: 고객 관리 암호화 키를 사용하여 데이터를 실제로 분리하면 강력한 보안 규정 준수가 보장됩니다.
결론
특히 DiskANN 벡터 인덱스 기능을 갖춘 Azure Cosmos DB의 다중 테넌트는 확장성 있는 고성능 AI 애플리케이션을 빌드하기 위한 강력한 솔루션을 제공합니다. 테넌트별 파티션 키, 계층적 분할 또는 테넌트별 계정 모델 중 무엇을 선택하든 비용, 보안 및 성능의 균형을 효과적으로 맞출 수 있습니다. 이러한 모델과 모범 사례를 사용하면 다중 테넌트 애플리케이션이 고객의 다양한 요구 사항을 충족하고 탁월한 사용자 환경을 제공할 수 있습니다.
Azure Cosmos DB는 강력하고 안전하며 확장성 있는 다중 테넌트 환경을 빌드하는 데 필요한 도구를 제공합니다. DiskANN 벡터 인덱싱 기능을 사용하면 AI 애플리케이션을 구동하는 빠르고 고차원적인 검색을 제공할 수 있습니다.