스케일링 & 탄력성
스케일링 & 탄력성 (scaling)
Qdrant를 처음 시작할 때는 보통 단일 노드를 배포해요. 벡터를 저장하고 질의를 처리하는 서버 하나죠. 초기 단계 워크로드에는 이런 구성으로 충분한 경우가 많지만, 데이터셋과 트래픽이 커지면 스케일링이 필요해집니다. Qdrant는 두 가지 선택지를 줘요. 노드에 더 많은 리소스를 주는 수직 스케일링(vertical scaling), 그리고 클러스터에 노드를 더 추가하는 수평 스케일링(horizontal scaling) 이에요.
> 출처: [Qdrant 공식 문서 — scaling](https://qdrant.tech/documentation/scaling)
수평 스케일링은 탄력성(resilience) 도 제공해요. 노드와 복제본이 여러 개인 배포는 개별 노드가 실패해도 읽기와 쓰기를 계속 제공할 수 있습니다. 각 개념을 하나씩 살펴볼게요.
수직 vs 수평 스케일링 (Vertical vs. Horizontal Scaling)
수직 스케일링은 기존 노드에 CPU, RAM, 디스크를 더 추가하는 것을 의미해요. 단일 노드는 차원 수와 양자화 여부에 따라 보통 약 1억 개 벡터까지 담을 수 있어요. RAM 사용량이 80%에 근접하는 것이 크기를 키울 시점이라는 주요 신호입니다. RAM 크기 산정 지침과 Qdrant Cloud·셀프 호스팅 배포의 리사이즈 절차는 수직 스케일링 문서를 참고하세요.
Qdrant는 분산 모드로 실행될 수 있는데, 이때 여러 노드가 클러스터라는 단일 개체로 함께 동작해요. 수평 스케일링은 기존 노드 크기를 키우는 대신 클러스터에 노드를 추가하는 것이에요. 양자화를 써도 데이터가 더 이상 단일 노드에 맞지 않을 때, 또는 디스크 I/O에 병목이 걸렸을 때 필요합니다. 분산 모드가 어떻게 동작하는지는 수평 스케일링 문서를, 설정 단계는 분산 배포 문서를 참고하세요.
먼저 수직으로 스케일링하세요. 클러스터에 데이터를 분산하는 것보다 단순하고, 네트워크 오버헤드를 피하며, 되돌리기도 쉬워요. 수직 스케일링으로 충분하지 않을 때 수평 스케일링으로 넘어가세요. Qdrant Cloud를 쓰고 있다면 'Scale Clusters' 문서가 양방향 절차를 다룹니다.
탄력성 (Resilience)
탄력성은 여러 노드에 데이터를 복제해서 얻어져요. 단일 노드, 즉 데이터의 단일 사본은 실패에 대한 보호가 전혀 없어요. 잃어버리면 데이터와 제공 능력 둘 다 잃는 거죠. 최소한의 내결함 클러스터는 노드 3개와 복제 인자 2 이상이 필요해요. 노드 3개는 Qdrant의 Raft 합의를 위한 과반수를 이루는 최소치이고, 복제본이 2개 이상이면 단일 노드 실패가 데이터나 가용성을 함께 무너뜨리지 않게 합니다.
복제 인자와 노드 수가 내결함성과 장애 조치(failover) 모범 사례를 어떻게 결정하는지는 탄력성 문서를 참고하세요.
노드가 실패했을 때의 복구 경로는 잃어버린 샤드가 살아있는 노드에 복제본을 갖고 있느냐에 따라 달라져요. 재시작한 노드는 합의에 다시 합류하고 자동으로 따라잡습니다. 영구적으로 잃어버린 노드는 새 노드를 프로비저닝하고 샤드를 리밸런싱해 교체할 수 있어요. 단계별 절차는 'Node Failure Recovery' 문서를 참고하세요.
어디로 갈까 (Where to Go Next)
- Vertical Scaling: 기존 노드 리사이즈.
- Horizontal Scaling: Qdrant의 분산 모델이 어떻게 규모를 달성하는지.
- Resilience: 내결함성, 다중 가용영역, 장애 조치 모범 사례.
- Consistency Guarantees: 쓰기 일관성 인자, 읽기 일관성, 쓰기 순서.
- Node Failure Recovery: 실패한 노드에서 복구하는 단계별 절차.