🚀 완전 관리형 Milvus인 Zilliz Cloud를 무료로 체험해보세요—10배 더 빠른 성능을 경험하세요! 지금 체험하기>>

milvus-logo
LFAI
  • Home
  • Blog
  • Milvus는 노드 간 쿼리 부하를 어떻게 분산하나요?

Milvus는 노드 간 쿼리 부하를 어떻게 분산하나요?

  • Engineering
February 28, 2022
Xi Ge

Binlog Cover Image 빈로그 표지 이미지

By Xi Ge.

이전 블로그 글에서 Milvus 2.0의 삭제, 비트셋, 압축 기능을 연속적으로 소개해 드렸습니다. 이 시리즈의 마지막을 장식하기 위해 Milvus의 분산 클러스터에서 핵심적인 기능인 로드 밸런스의 설계를 공유하고자 합니다.

구현

쿼리 노드에서 버퍼링되는 세그먼트의 수와 크기가 다르면 쿼리 노드 전체의 검색 성능도 달라질 수 있습니다. 최악의 경우 몇 개의 쿼리 노드가 대량의 데이터를 검색하다가 모두 소진되었지만 새로 생성된 쿼리 노드는 세그먼트가 분배되지 않아 유휴 상태로 남아있어 CPU 리소스가 대량으로 낭비되고 검색 성능이 크게 저하되는 경우가 발생할 수 있습니다.

이러한 상황을 방지하기 위해 쿼리 코디네이터(쿼리 코디)는 노드의 RAM 사용량에 따라 각 쿼리 노드에 세그먼트를 균등하게 분배하도록 프로그래밍되어 있습니다. 따라서 CPU 리소스가 노드 전체에서 균등하게 사용되므로 검색 성능이 크게 향상됩니다.

자동 부하 분산 트리거

구성의 기본값 queryCoord.balanceIntervalSeconds 에 따르면 쿼리 코드는 60초마다 모든 쿼리 노드의 RAM 사용량(백분율)을 확인합니다. 다음 조건 중 하나가 충족되면 쿼리 코드는 쿼리 노드 전체에 걸쳐 쿼리 부하를 분산하기 시작합니다:

  1. 클러스터에 있는 쿼리 노드의 RAM 사용량이 queryCoord.overloadedMemoryThresholdPercentage (기본값: 90)보다 큰 경우;
  2. 또는 두 쿼리 노드의 RAM 사용량 차이의 절대값이 queryCoord.memoryUsageMaxDifferencePercentage (기본값: 30)보다 큰 경우.

세그먼트가 소스 쿼리 노드에서 대상 쿼리 노드로 전송된 후에는 다음 조건도 모두 충족해야 합니다:

  1. 대상 쿼리 노드의 RAM 사용량이 queryCoord.overloadedMemoryThresholdPercentage (기본값: 90)보다 크지 않아야 합니다;
  2. 로드 밸런싱 후 원본 및 대상 쿼리 노드의 RAM 사용량 차이의 절대값이 로드 밸런싱 전보다 작을 것.

위의 조건이 충족되면 쿼리 코드는 노드 간 쿼리 부하를 분산하기 위해 작업을 진행합니다.

로드 밸런스

부하 분산이 트리거되면 쿼리 코드는 먼저 대상 세그먼트를 대상 쿼리 노드에 로드합니다. 이 시점에서 두 쿼리 노드는 결과의 완전성을 보장하기 위해 검색 요청이 있을 때마다 대상 세그먼트의 검색 결과를 반환합니다.

대상 쿼리 노드가 대상 세그먼트를 성공적으로 로드한 후 쿼리 코드는 sealedSegmentChangeInfo 을 쿼리 채널에 게시합니다. 아래 그림과 같이 onlineNodeIDonlineSegmentIDs 는 각각 세그먼트를 로드하는 쿼리 노드와 로드된 세그먼트를, offlineNodeIDofflineSegmentIDs 는 세그먼트를 해제해야 하는 쿼리 노드와 해제할 세그먼트를 각각 나타냅니다.

sealedSegmentChangeInfo sealedSegmentChangeInfo

sealedSegmentChangeInfo 을 수신한 소스 쿼리 노드는 대상 세그먼트를 릴리스합니다.

Load Balance Workflow 부하 분산 워크플로우

소스 쿼리 노드가 대상 세그먼트를 릴리스하면 전체 프로세스가 성공합니다. 이 작업이 완료되면 쿼리 노드 간에 쿼리 부하가 분산되어 모든 쿼리 노드의 RAM 사용량이 queryCoord.overloadedMemoryThresholdPercentage 보다 크지 않으며, 부하 분산 후 원본 및 대상 쿼리 노드의 RAM 사용량 차이의 절대값이 부하 분산 전보다 작아집니다.

다음 단계는 무엇인가요?

2.0의 새로운 기능 시리즈 블로그에서는 새로운 기능의 설계에 대해 설명하고자 합니다. 이 블로그 시리즈에서 자세히 읽어보세요!

밀버스 2.0의 새로운 기능 블로그 시리즈의 피날레입니다. 이 시리즈에 이어 Milvus 2.0의 기본 아키텍처를 소개하는 새로운 Milvus 심층 분석 시리즈를 계획하고 있습니다. 기대해 주세요.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

계속 읽기