테넌트 상태와 온도 관리

테넌트 상태와 온도 관리 (Manage tenant states & temperature)

멀티테넌트 서비스에서 모든 테넌트의 데이터를 항상 최고 속도로 메모리에 올려두면 비용이 눈덩이처럼 불어나요. Weaviate는 테넌트 상태라는 개념으로 비용과 성능, 가용성 사이의 균형을 조절합니다. 자주 쓰는 테넌트는 뜨겁게, 드물게 쓰는 테넌트는 식혀두는 식이죠.

출처: 공식문서 - Manage tenant states & temperature

스토리지 계층(Tier)

스토리지 리소스는 계층별로 나뉘고, 각 계층은 성능과 비용이 다릅니다.

계층 위치 속도 비용
Hot RAM 가장 빠른 접근 가장 비쌈
Warm 디스크 중간 속도 중간 가격
Cold Cloud Storage 가장 느린 접근 가장 저렴

Hot과 Cold 계층의 가격 차이는 상당해요. 클라우드 스토리지는 RAM보다 몇 자릿수 저렴합니다. 멀티테넌트 컬렉션에서는 테넌트 상태(Active, Inactive, Offloaded)를 바꿔 데이터를 계층 간에 이동할 수 있고, 이를 통해 비용·리소스 가용성·준비도의 세밀한 트레이드오프를 만들 수 있어요.

벡터 인덱스의 리소스 온도 — 벡터 인덱스 타입이 기본 리소스 종류를 결정합니다.

  • HNSW 인덱스(기본) — 벡터 인덱스를 RAM에 두는 Hot 리소스 사용.
  • Flat 인덱스 — 벡터 인덱스를 디스크에 두는 Warm 리소스 사용.
  • Dynamic 인덱스Warm 리소스를 쓰는 flat 인덱스로 시작해, 정해진 임계값이 되면 Hot 리소스를 쓰는 HNSW 인덱스로 전환.

테넌트 상태 개요

세 가지 테넌트 상태가 있습니다: Active, Inactive, Offloaded.

테넌트 상태 CRUD & 쿼리 벡터 인덱스 역색인 객체 데이터 활성화 시간 설명
Active (기본) 가능 Hot/Warm Warm Warm 없음 테넌트 사용 가능
Inactive 불가 Warm Warm Warm 빠름 로컬에 저장됐지만 사용 불가
Offloaded 불가 Cold Cold Cold 느림 클라우드 스토리지에 저장되어 사용 불가

테넌트 상태와 일관성 — 테넌트 상태는 최종적으로 일관됩니다(eventually consistent). 자세한 내용은 일관성 문서를 참고하세요.

Active

Active 테넌트는 쿼리와 CRUD 작업에 사용할 수 있어요. 벡터 인덱스 타입에 따라 hot 또는 warm 리소스를 씁니다. 테넌트의 객체 데이터와 역색인은 디스크에 저장되어 warm 리소스를 사용합니다.

Inactive

Inactive 테넌트는 쿼리에도 CRUD에도 사용할 수 없습니다. 객체 데이터·벡터 인덱스·역색인이 디스크에 저장되어 warm 리소스를 써요. hot 리소스를 쓰는 active 테넌트보다 Weaviate의 메모리 요구량을 낮출 수 있습니다. 로컬에 저장되어 있으므로 inactive 테넌트는 빠르게 활성화할 수 있어요.

Offloaded

Offloaded 테넌트는 쿼리나 CRUD에 사용할 수 없습니다. 객체 데이터·벡터 인덱스·역색인이 클라우드에 저장되어 cold 리소스를 씁니다. 원격에 저장되어 있으므로 활성화할 때 지연이 있습니다.

테넌트 활성화

디스크에 있는 INACTIVE 테넌트를 활성화하거나, 클라우드에 있는 OFFLOADED 테넌트를 로드해 활성화하려면:

from weaviate.classes.tenants import Tenant, TenantActivityStatus

multi_collection = client.collections.use("MultiTenancyCollection")
multi_collection.tenants.update(tenants=[
    Tenant(
        name="tenantA",
        activity_status=TenantActivityStatus.ACTIVE
    )
])

테넌트 비활성화

ACTIVE 테넌트를 비활성화하거나, OFFLOADED 테넌트를 (활성화 없이) 클라우드에서 로드하려면:

from weaviate.classes.tenants import Tenant, TenantActivityStatus

multi_collection = client.collections.use("MultiTenancyCollection")
multi_collection.tenants.update(tenants=[
    Tenant(
        name="tenantA",
        activity_status=TenantActivityStatus.INACTIVE
    )
])

테넌트 오프로드

ACTIVE 또는 INACTIVE 테넌트를 클라우드로 오프로드하려면:

from weaviate.classes.tenants import Tenant, TenantActivityStatus

multi_collection = client.collections.use("MultiTenancyCollection")
multi_collection.tenants.update(tenants=[
    Tenant(
        name="tenantA",
        activity_status=TenantActivityStatus.OFFLOADED
    )
])

주의 — 오프로드 모듈 필요 — 테넌트 오프로딩에는 Offload 모듈이 필요합니다. 활성화 방법은 모듈 페이지를 참고하세요.

테넌트 자동 활성화

검색·읽기·업데이트·삭제 작업이 INACTIVE 또는 OFFLOADED 테넌트에 수행되면 자동으로 활성화하도록 켤 수 있습니다.

from weaviate.classes.config import Configure

multi_collection = client.collections.create(
    name="CollectionWithAutoTenantActivation",
    multi_tenancy_config=Configure.multi_tenancy(
        enabled=True,
        auto_tenant_activation=True  # 자동 테넌트 활성화
    )
)

더 알아보기 (Learn more)