Milvus는 노드 간 쿼리 부하를 어떻게 분산하나요?
빈로그 표지 이미지
By Xi Ge.
이전 블로그 글에서 Milvus 2.0의 삭제, 비트셋, 압축 기능을 연속적으로 소개해 드렸습니다. 이 시리즈의 마지막을 장식하기 위해 Milvus의 분산 클러스터에서 핵심적인 기능인 로드 밸런스의 설계를 공유하고자 합니다.
구현
쿼리 노드에서 버퍼링되는 세그먼트의 수와 크기가 다르면 쿼리 노드 전체의 검색 성능도 달라질 수 있습니다. 최악의 경우 몇 개의 쿼리 노드가 대량의 데이터를 검색하다가 모두 소진되었지만 새로 생성된 쿼리 노드는 세그먼트가 분배되지 않아 유휴 상태로 남아있어 CPU 리소스가 대량으로 낭비되고 검색 성능이 크게 저하되는 경우가 발생할 수 있습니다.
이러한 상황을 방지하기 위해 쿼리 코디네이터(쿼리 코디)는 노드의 RAM 사용량에 따라 각 쿼리 노드에 세그먼트를 균등하게 분배하도록 프로그래밍되어 있습니다. 따라서 CPU 리소스가 노드 전체에서 균등하게 사용되므로 검색 성능이 크게 향상됩니다.
자동 부하 분산 트리거
구성의 기본값 queryCoord.balanceIntervalSeconds
에 따르면 쿼리 코드는 60초마다 모든 쿼리 노드의 RAM 사용량(백분율)을 확인합니다. 다음 조건 중 하나가 충족되면 쿼리 코드는 쿼리 노드 전체에 걸쳐 쿼리 부하를 분산하기 시작합니다:
- 클러스터에 있는 쿼리 노드의 RAM 사용량이
queryCoord.overloadedMemoryThresholdPercentage
(기본값: 90)보다 큰 경우; - 또는 두 쿼리 노드의 RAM 사용량 차이의 절대값이
queryCoord.memoryUsageMaxDifferencePercentage
(기본값: 30)보다 큰 경우.
세그먼트가 소스 쿼리 노드에서 대상 쿼리 노드로 전송된 후에는 다음 조건도 모두 충족해야 합니다:
- 대상 쿼리 노드의 RAM 사용량이
queryCoord.overloadedMemoryThresholdPercentage
(기본값: 90)보다 크지 않아야 합니다; - 로드 밸런싱 후 원본 및 대상 쿼리 노드의 RAM 사용량 차이의 절대값이 로드 밸런싱 전보다 작을 것.
위의 조건이 충족되면 쿼리 코드는 노드 간 쿼리 부하를 분산하기 위해 작업을 진행합니다.
로드 밸런스
부하 분산이 트리거되면 쿼리 코드는 먼저 대상 세그먼트를 대상 쿼리 노드에 로드합니다. 이 시점에서 두 쿼리 노드는 결과의 완전성을 보장하기 위해 검색 요청이 있을 때마다 대상 세그먼트의 검색 결과를 반환합니다.
대상 쿼리 노드가 대상 세그먼트를 성공적으로 로드한 후 쿼리 코드는 sealedSegmentChangeInfo
을 쿼리 채널에 게시합니다. 아래 그림과 같이 onlineNodeID
와 onlineSegmentIDs
는 각각 세그먼트를 로드하는 쿼리 노드와 로드된 세그먼트를, offlineNodeID
와 offlineSegmentIDs
는 세그먼트를 해제해야 하는 쿼리 노드와 해제할 세그먼트를 각각 나타냅니다.
sealedSegmentChangeInfo
sealedSegmentChangeInfo
을 수신한 소스 쿼리 노드는 대상 세그먼트를 릴리스합니다.
부하 분산 워크플로우
소스 쿼리 노드가 대상 세그먼트를 릴리스하면 전체 프로세스가 성공합니다. 이 작업이 완료되면 쿼리 노드 간에 쿼리 부하가 분산되어 모든 쿼리 노드의 RAM 사용량이 queryCoord.overloadedMemoryThresholdPercentage
보다 크지 않으며, 부하 분산 후 원본 및 대상 쿼리 노드의 RAM 사용량 차이의 절대값이 부하 분산 전보다 작아집니다.
다음 단계는 무엇인가요?
2.0의 새로운 기능 시리즈 블로그에서는 새로운 기능의 설계에 대해 설명하고자 합니다. 이 블로그 시리즈에서 자세히 읽어보세요!
- Milvus가 분산 클러스터에서 스트리밍 데이터를 삭제하는 방법
- Milvus에서 데이터를 압축하는 방법은 무엇인가요?
- Milvus는 노드 간 쿼리 부하를 어떻게 분산하나요?
- 비트셋으로 벡터 유사도 검색의 다양성을 구현하는 방법
밀버스 2.0의 새로운 기능 블로그 시리즈의 피날레입니다. 이 시리즈에 이어 Milvus 2.0의 기본 아키텍처를 소개하는 새로운 Milvus 심층 분석 시리즈를 계획하고 있습니다. 기대해 주세요.
- 구현
- 로드 밸런스
- 다음 단계는 무엇인가요?
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word