멀티 테넌시 전략
ChatGPT가 인기를 얻으면서 더 많은 개발자들이 CVP(ChatGPT, 벡터 데이터베이스, 프롬프트) 스택을 사용하여 자체 SaaS 서비스를 만들고 있습니다. 이 가이드에서는 이러한 추세에 발맞춰 전 세계에서 가장 널리 사용되는 벡터 데이터베이스 중 하나인 Milvus에서 멀티테넌시를 달성하는 방법을 설명합니다.
멀티테넌시는 하나의 Milvus 인스턴스가 여러 테넌트에 서비스를 제공하는 아키텍처입니다. 테넌트를 구분하는 가장 간단한 방법은 테넌트의 데이터와 리소스를 다른 테넌트의 데이터와 리소스로 분리하는 것입니다. 각 테넌트는 데이터베이스, 컬렉션, 파티션과 같은 Milvus 객체를 관리하기 위해 자체 전용 리소스를 보유하거나 다른 테넌트와 리소스를 공유합니다. 이러한 개체를 기반으로 Milvus 멀티테넌시를 달성하기 위한 해당 방법이 있습니다.
데이터베이스 지향 멀티테넌시
Milvus 버전 2.2.9부터 객체 데이터베이스를 사용할 수 있습니다. 단일 Milvus 클러스터에 여러 데이터베이스를 생성할 수 있습니다. 이 새로운 기능을 사용하면 각 테넌트에 데이터베이스를 할당하여 데이터베이스 지향 멀티테넌시를 구현할 수 있으므로, 각 테넌트는 자체 컬렉션과 파티션을 생성하여 데이터를 최대한 활용할 수 있습니다. 하지만 이 전략은 테넌트에 대한 데이터 격리 및 검색 성능을 보장하지만 유휴 테넌트에서 리소스가 낭비될 수 있습니다.
수집 중심의 멀티테넌시
컬렉션 지향 멀티테넌시를 달성하는 방법에는 두 가지가 있습니다.
모든 테넌트를 위한 하나의 컬렉션
테넌트를 구분하기 위해 테넌트 필드를 추가하여 단일 컬렉션을 사용하여 멀티테넌트를 구현하는 것은 간단한 옵션입니다. 특정 테넌트에 대한 ANN 검색을 수행할 때 필터 표현식을 추가하여 다른 테넌트에 속한 모든 엔티티를 걸러내면 됩니다. 이것은 멀티테넌시를 달성하는 가장 간단한 방법입니다. 하지만 필터의 성능이 ANN 검색의 병목 현상이 될 수 있다는 점에 유의하세요.
테넌트당 하나의 컬렉션
또 다른 접근 방식은 모든 테넌트의 데이터를 단일 컬렉션에 저장하는 대신 각 테넌트가 자체 데이터를 저장할 수 있는 컬렉션을 만드는 것입니다. 이렇게 하면 데이터 격리 및 쿼리 성능이 향상됩니다. 그러나 이 접근 방식은 리소스 스케줄링, 운영 기능 및 비용에 더 많은 투자가 필요하며 테넌트 수가 단일 Milvus 클러스터가 지원하는 최대 컬렉션 수를 초과하는 경우에는 적용되지 않을 수 있습니다.
파티션 중심의 멀티테넌시
파티션 지향 멀티테넌시를 달성하는 방법에는 두 가지가 있습니다:
테넌트당 하나의 파티션
단일 컬렉션을 관리하는 것이 여러 컬렉션을 관리하는 것보다 훨씬 쉽습니다. 여러 컬렉션을 만드는 대신 각 테넌트에 파티션을 할당하여 유연한 데이터 격리 및 메모리 관리를 달성하는 것이 좋습니다. 파티션 중심 멀티테넌시의 검색 성능은 컬렉션 중심 멀티테넌시보다 훨씬 우수합니다. 하지만 컬렉션의 테넌트 수가 컬렉션이 보유할 수 있는 최대 파티션 수를 초과해서는 안 된다는 점에 유의하세요.
파티션 키 기반 멀티테넌시
Milvus 2.2.9에는 파티션 키라는 새로운 기능이 도입되었습니다. 컬렉션을 만들 때 테넌트 필드를 지정하고 이를 파티션 키 필드로 지정하세요. Milvus는 파티션 키 필드의 값에 따라 엔티티를 파티션에 저장합니다. ANN 검색을 수행할 때 Milvus는 지정된 파티션 키를 기반으로 파티션으로 변경하고, 파티션 키에 따라 엔티티를 필터링하고, 필터링된 엔티티 중에서 검색을 수행합니다.