테넌트 상태와 온도 관리
테넌트 상태와 온도 관리 (Manage tenant states & temperature)
멀티테넌트 서비스에서 모든 테넌트의 데이터를 항상 최고 속도로 메모리에 올려두면 비용이 눈덩이처럼 불어나요. Weaviate는 테넌트 상태라는 개념으로 비용과 성능, 가용성 사이의 균형을 조절합니다. 자주 쓰는 테넌트는 뜨겁게, 드물게 쓰는 테넌트는 식혀두는 식이죠.
스토리지 계층(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)
- How-to: Multi-tenancy operations
- Guide: Manage resources — hot·warm·cold 스토리지 계층 전략