수평 확장 전략

수평 확장 전략 (Horizontal Scaling)

데이터가 한 머신에 안 들어가거나, 읽기 요청이 몰려서 처리량을 높여야 할 때 Weaviate는 두 가지 확장 수단을 줘요. 샤딩(Sharding) 은 데이터를 여러 노드로 쪼개고, 복제(Replication) 는 데이터 사본을 만들어 고가용성을 확보하죠. 둘은 각자 강점이 있고, 함께 쓰면 확장성과 안정성을 둘 다 잡을 수 있습니다.

출처: 공식문서 — Horizontal Scaling Deployment Strategies

샤딩 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 환경변수를 쓰면 수평 확장의 진짜 힘을 발휘할 수 있어요.

더 알아보기 (Learn more)