벡터 집합 확장성

벡터 집합 확장성 (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)

출처: 공식문서