수평 확장 전략
수평 확장 전략 (Horizontal Scaling)
데이터가 한 머신에 안 들어가거나, 읽기 요청이 몰려서 처리량을 높여야 할 때 Weaviate는 두 가지 확장 수단을 줘요. 샤딩(Sharding) 은 데이터를 여러 노드로 쪼개고, 복제(Replication) 는 데이터 사본을 만들어 고가용성을 확보하죠. 둘은 각자 강점이 있고, 함께 쓰면 확장성과 안정성을 둘 다 잡을 수 있습니다.
샤딩 vs 복제 — 언제 뭘 쓸까
- 복제(Replication) — 데이터의 중복 사본을 만들어 고가용성이 필요할 때 유용.
- 샤딩(Sharding) — 데이터를 노드 간에 나눠, 단일 노드에는 너무 큰 데이터셋을 다룰 때 유용.
전략 선택
| 요구/목표 | 샤딩 | 복제 | 둘 다 | 주요 고려사항 |
|---|---|---|---|---|
| 단일 노드에 너무 큰 데이터셋 처리 | 예 | 아니오 | 예 | 얼마나 많은 데이터를 저장하나? — 벡터 차원·개수가 메모리 요구를 결정, 샤딩이 이를 노드 간 분산 |
| 쿼리 처리량 개선 | 아마도* | 예 | 예 | 읽기 중심 워크로드인가? — 복제가 읽기 쿼리를 노드 간 분산, 샤딩은 특정 쿼리 패턴에 도움될 수 있음 |
| 데이터 가져오기(import) 가속 | 예 | 아니오 | 예 | 가져오기 속도가 우선인가? — 샤딩이 가져오기 병렬 처리 가능, 복제는 가져오기 오버헤드 추가 |
| 고가용성 보장 | 아니오 | 예 | 예 | 다운타임을 견딜 수 있나? — 복제가 노드 실패 시 중복 제공, 복제 없이 샤드 손실 = 데이터 손실 |
| 무중단 업그레이드 | 아니오 | 예 | 예 | 연속 운영이 얼마나 중요한가? — 복제가 롤링 업데이트 허용, 프로덕션 시스템은 보통 필요 |
| 리소스 활용 최적화 | 예 | 아마도* | 아마도* | 리소스 제약이 있나? — 샤딩이 부하를 효율적으로 분산, 복제는 리소스 오버헤드 추가 |
| 지리적 분산 | 아니오 | 예 | 예 | 멀티 리전 지원이 필요한가? — 레플리카를 리전에 걸쳐 배포, 지리적으로 분산된 사용자의 지연 시간 감소 |
* 일부 해법이 될 수 있으며 구성에 따라 다름.
샤딩 구성하기
Configure.sharding로 컬렉션의 샤드 구성을 설정합니다.
from weaviate.classes.config import Configure
client.collections.create(
"Article",
sharding_config=Configure.sharding(
virtual_per_physical=128,
desired_count=1,
desired_virtual_count=128,
),
)
| 파라미터 | 타입 | 설명 |
|---|---|---|
desiredCount |
integer | 불변, 선택. 컬렉션 인덱스의 목표 물리 샤드 수. 기본적으로 클러스터의 노드 수를 쓰지만 더 낮게 명시할 수 있음. 노드 수보다 높게 설정하면 어떤 노드는 여러 샤드를 호스팅 |
virtualPerPhysical |
integer | 불변, 선택. 물리 샤드 하나에 대응하는 가상 샤드 수, 기본 128 |
desiredVirtualCount |
integer | 읽기 전용. desiredCount * virtualPerPhysical로 계산된 목표 가상 샤드 총수 |
복제 구성하기
복제 팩터 변경은 컬렉션 정의를 업데이트하는 것으로는 안 바뀝니다. v1.32부터 레플리카 이동으로 샤드의 복제 팩터를 바꿀 수 있어요. 비동기 복제와 삭제 해결 전략 같은 복제 설정도 구성합니다.
from weaviate.classes.config import Configure, ReplicationDeletionStrategy
client.collections.create(
"Article",
replication_config=Configure.replication(
factor=3,
async_enabled=True,
deletion_strategy=ReplicationDeletionStrategy.TIME_BASED_RESOLUTION,
async_config=Configure.Replication.async_config(
max_workers=5,
hashtree_height=16,
frequency=30,
),
),
)
샤딩 + 복제 함께 쓰기
고가용성 환경에서는 샤딩과 복제를 결합해 두 방식의 힘을 모두 활용합니다. 특히 1.29 릴리스에서 도입된 ASYNC_REPLICATION 환경변수를 쓰면 수평 확장의 진짜 힘을 발휘할 수 있어요.