벡터 집합 확장성
벡터 집합 확장성 (Scalability) (scalability-2)
Redis 벡터 집합(vector sets)을 확장해 더 큰 데이터셋과 워크로드를 처리하는 방법을 배워볼게요.
다중 인스턴스 확장
벡터 집합은 데이터를 여러 Redis 인스턴스에 샤딩(sharding)해 수평적으로 확장할 수 있어요. 이는 데이터셋을 키와 노드에 걸쳐 수동으로 파티셔닝하는 방식으로 이루어집니다.
예시 전략
일관성 해시(consistent hash)를 사용해 데이터를 샤딩할 수 있어요.
key_index = crc32 ( item ) % 3 key = f "vset: { key_index } "
그런 다음 서로 다른 키에 원소를 추가합니다.
VADD vset:0 VALUES 3 0.1 0.2 0.3 item1 VADD vset:1 VALUES 3 0.4 0.5 0.6 item2
모든 샤드에 걸쳐 유사도 검색을 실행하려면 각 키에 VSIM 명령을 보낸 다음 결과를 클라이언트 쪽에서 병합하면 되어요.
VSIM vset:0 VALUES ... WITHSCORES VSIM vset:1 VALUES ... WITHSCORES VSIM vset:2 VALUES ... WITHSCORES
그런 다음 결과를 점수(score)별로 결합하고 정렬합니다.
핵심 속성
- 쓰기 작업(
VADD,VREM)은 선형적으로 확장됩니다. 인스턴스 간에 병렬로 삽입할 수 있어요. - 읽기 작업(
VSIM)은 선형적으로 확장되지 않습니다. 전체 결과 집합을 얻으려면 모든 샤드를 쿼리해야 해요. - 작은 벡터 집합일수록 쿼리가 더 빨라지므로, 분산하면 노드당 쿼리 시간을 줄이는 데 도움이 됩니다.
- 결과를 클라이언트 쪽에서 병합하면 로직이 단순해지고 서버 쪽 오버헤드가 추가되지 않아요.
가용성 이점
이 샤딩 모델은 내결함성(fault tolerance)도 개선합니다.
- 한 인스턴스가 다운되어도 다른 인스턴스에서 부분 결과를 가져올 수 있어요.
- 타임아웃과 부분 폴백(partial fallback)을 사용해 복원력을 높일 수 있습니다.
지연 시간 고려사항
N개 인스턴스에 걸친 지연 시간이 더해지는 것을 피하려면:
- 모든 샤드에 쿼리를 병렬로 보내세요.
- 가장 느린 응답을 기다리세요.
이렇게 하면 총 지연 시간은 모든 시간의 합이 아니라 최악의 샤드 시간에 가까워집니다.
요약
요약
| 목표 | 방법 |
|---|---|
| 삽입 확장 | 데이터를 키와 인스턴스에 걸쳐 분할 |
| 읽기 확장 | 모든 샤드를 쿼리하고 결과 병합 |
| 고가용성 | 일부 샤드가 실패하면 부분 결과 수용 |
| 성능 유지 | 더 작은 샤드를 사용해 노드당 탐색 속도 향상 |
더 알아보기 (Learn more)
출처: 공식문서