Milvus 참조 아키텍처
이 블로그는 특정 사용 사례를 기반으로 한 Milvus 리소스 할당과 관련하여 자주 묻는 몇 가지 질문을 다룹니다. 이러한 질문에는 다음이 포함됩니다:
특정 사용자 수 또는 초당 요청 수(RPS)를 기준으로 Milvus에 얼마나 많은 CPU 및 메모리 리소스가 필요한가요?
READ와 WRITE의 다양한 조합을 기준으로 Milvus에 얼마나 많은 CPU 및 메모리 리소스가 필요한가요?
워크로드 특성 이해하기
Milvus에 리소스를 할당하는 첫 번째 단계는 워크로드 특성을 이해하는 것입니다. 이러한 요소는 Milvus의 컴퓨팅 성능 및 메모리 요구 사항을 결정하는 데 중요한 역할을 합니다.
아래는 Linux 패키지 기반 참조 아키텍처의 예시 목록이며, 여기서 RPS는 초당 요청 수(Requests Per Second)를 의미합니다:
최대 20 RPS 또는 1,000명 사용자 API: 20 RPS, Web: 2 RPS, Git (Pull): 2 RPS, Git (Push): 1 RPS
최대 40 RPS 또는 2,000명 사용자 API: 40 RPS, Web: 4 RPS, Git (Pull): 4 RPS, Git (Push): 1 RPS
최대 60 RPS 또는 3,000명 사용자 API: 60 RPS, Web: 6 RPS, Git (Pull): 6 RPS, Git (Push): 1 RPS
최대 100 RPS 또는 5,000명 사용자 API: 100 RPS, Web: 10 RPS, Git (Pull): 10 RPS, Git (Push): 2 RPS
최대 200 RPS 또는 10,000명 사용자 API: 200 RPS, Web: 20 RPS, Git (Pull): 20 RPS, Git (Push): 4 RPS
최대 500 RPS 또는 25,000명 사용자 API: 500 RPS, Web: 50 RPS, Git (Pull): 50 RPS, Git (Push): 10 RPS
최대 1000 RPS 또는 50,000명 사용자 API: 1000 RPS, Web: 100 RPS, Git (Pull): 100 RPS, Git (Push): 20 RPS
리소스 요구 사항 추정하기
Milvus의 리소스 요구 사항을 추정하려면 몇 가지 가정을 해야 합니다:
읽기: 각 웹 요청과 Git pull은 READ 작업입니다.
쓰기: 각 Git push는 WRITE 작업으로 간주됩니다.
읽기/쓰기의 볼륨과 비율: Milvus는 사용자 수당 API 호출의 읽기/쓰기 비율과 동일하다고 가정합니다.
초당 쿼리 수(QPS): 사용자 수당 API RPS(초당 요청 수) 요구 사항과 일치해야 합니다.
또한 읽기/쓰기 요청당 데이터 크기도 추정해야 합니다. 일반적인 GenAI 사용 사례를 가정하겠습니다:
벡터 차원: 1024개의 부동 소수점 숫자
부동 소수점 숫자당 바이트 크기: 4 KB
Top_k(반환되는 벡터 수): 검색 요청당 10개 벡터
컬렉션(데이터베이스 테이블)의 크기: 쓰기 요청당 100만 개 벡터
데이터베이스 인덱스 유형: HNSW
이러한 가정을 바탕으로, 읽기 또는 쓰기당 데이터 크기를 대략적으로 계산할 수 있습니다. 벡터 차원이 1024이고, 각 벡터가 1024 * 4 bytes = 4 KB를 차지한다고 가정합니다. 일반적인 top_k = 읽기당 10개 벡터라고 가정합니다. 이러한 가정하에서:
각 Milvus 읽기 작업은 약 40 KB의 데이터를 처리합니다.
각 Milvus 쓰기 작업은 40 MB의 데이터가 관련되는 것으로 추정됩니다.
Milvus는 insert(완전히 새로운 컬렉션 생성)와 upsert(몇 개 행 수정) 기능을 모두 제공합니다(자세한 내용은 Milvus insert, upsert, delete 블로그 참조). 각 WRITE 작업을 단지 몇 개 행의 upsert가 아니라 전체 컬렉션 insert로 과대 추정하겠습니다.
데이터베이스는 데이터 크기뿐만 아니라 검색 및 삽입 속도도 고려해야 합니다. 컬렉션은 Big-O 표기법으로 O(log n)의 검색 시간을 갖는 인기 있는 HNSW index를 사용해 인덱싱된다고 가정하겠습니다.
이러한 가정하에, Web 기반 사용자/RPS/읽기/쓰기를 Vector Database QPS/데이터 크기 아키텍처 티어로 변환하면 다음과 같습니다:
최대 1,000 users = 1 million vectors에서 20 QPS
최대 2,000 users = 1 million vectors에서 40 QPS
최대 3,000 users = 1 million vectors에서 60 QPS
최대 5,000 users = 2 million vectors에서 100 QPS
최대 10,000 users = 4 million vectors에서 200 QPS
최대 25,000 users = 10 million vectors에서 500 QPS
최대 50,000 users = 20 million vectors에서 1000 QPS
로드 테스트 및 벤치마킹
리소스 추정의 정확성을 보장하기 위해, VectorDBBench에서 아키텍처 티어를 로드 테스트하고 벤치마킹했습니다. Milvus architecture 자체에 대해 기본 Segment, Partition, Shard, Data node, Query node 및 Index node 크기를 가정했습니다.
Milvus의 autoscaling 기능 덕분에 성능은 데이터 크기 및 클러스터 리소스에 대해 선형적입니다! 아래는 다양한 데이터 용량 및 QPS 요구 사항에 대해 권장되는 Milvus 및 Zilliz Cloud(완전 관리형 Milvus) 리소스 크기를 보여주는 표입니다.
아래 표는 1024_dimension vectors 수백만 단위의 데이터 용량을 보여줍니다. Milvus 리소스는 CPU 수와 메모리 GB로 제공됩니다. 비용 비교를 위해, 성능 또는 용량 유형의 Compute Units (cu)로 제공되는 Zilliz Cloud resource sizes를 보여줍니다.
User/RPS 티어별 권장 Milvus 및 Zilliz 리소스 크기 표
| Users | 데이터 용량 | 벤치마킹된 QPS | 필요한 RPS | Milvus 리소스 | Zilliz 리소스 |
| 3,000 | 1m_1024d vectors | 1200 | 60 | 8CPU, 32G | 1cu-perf |
| 3,000 | 1m_1024d vectors | 2400 | 60 | 16CPU, 64G | 2cu-perf |
| 3,000 | 1m_1024d vectors | 3600 | 60 | 24CPU, 96G | 4cu-perf |
| 10,000 | 3.7m_1024d vectors | 360 | 200 | 16CPU, 64G | 2cu-cap |
| 10,000 | 3.7m_1024d vectors | 700 | 200 | 64CPU, 256G | 4cu-cap |
| 25,000 | 10m_1024d vectors | 600 | 500 | 196CPU, 768G | 12cu- cap |
| 250,000 | 100m_1024d vectors | 6000 | 5000 | 19200CPU, 76800G | 1200cu- cap |
Users/RPS 티어 수별 권장 Milvus 및 Zilliz 리소스 크기 표. Milvus 확장은 데이터 크기 및 필요한 QPS에 대해 선형적입니다.
위 표에서 볼 수 있듯이, 데이터 크기와 QPS가 특정 임계값에 도달해야 하는 경우 온프레미스 대신 Zilliz Cloud에서 Milvus를 실행하는 것이 더 비용 효율적일 수 있습니다.
결론
워크로드 특성을 이해하고, 가정에 기반해 리소스 요구 사항을 추정하며, VectorDBBench와 같은 로드 테스트 및 벤치마킹 도구를 활용하면 Milvus 배포에 필요한 리소스를 자신 있게 프로비저닝할 수 있습니다.
더 자세히 알아보려면 저희 클러스터 사이징 가이드를 참조하세요. 워크로드가 변화함에 따라 최고의 성능을 유지하려면 리소스 할당을 정기적으로 검토하고 조정하는 것이 필수적이라는 점을 기억하세요.
참고 자료
HNSW: https://github.com/nmslib/hnswlib/blob/master/ALGO_PARAMS.md
Milvus 아키텍처: https://docs.gitlab.com/ee/administration/reference_architectures/
Milvus Packaging Dependencies 블로그: https://zilliz.com/blog/Milvus-server-docker-installation-and-packaging-dependencies
Milvus Sizing Tool 블로그: https://medium.com/@zilliz_learn/demystifying-the-milvus-sizing-tool-2c0afe7fe963
Shards, Partitions, Segments: https://zilliz.com/blog/sharding-partitioning-segments-get-most-from-your-database
Zilliz Cloud CU 유형: https://docs.zilliz.com/docs/cu-types-explained#evaluate-performance
Milvus, Zilliz Cloud 및 기타 여러 주요 벡터 데이터베이스 벤치마킹을 위한 VectorDBBench Tool
계속 읽기

From Vector Database to Vector Lakebase
Zilliz offers a fully managed Vector Lakebase powered by Milvus, unifying real-time vector search, lake-scale discovery, and Al data operations.

Build for the Boom: Why AI Agent Startups Should Build Scalable Infrastructure Early
Explore strategies for developing AI agents that can handle rapid growth. Don't let inadequate systems undermine your success during critical breakthrough moments.

1 Table = 1000 Words? Foundation Models for Tabular Data
TableGPT2 automates tabular data insights, overcoming schema variability, while Milvus accelerates vector search for efficient, scalable decision-making.



