데이터 통신 최적화: Milvus, NATS 메시징 도입
데이터 처리의 복잡한 태피스트리에서 원활한 커뮤니케이션은 작업을 하나로 묶는 실타래입니다. 선구적인 오픈 소스 벡터 데이터베이스인 Milvus가 최신 기능으로 혁신적인 여정을 시작했습니다: 바로 NATS 메시징 통합입니다. 이 포괄적인 블로그 게시물에서는 이 통합의 핵심 기능, 설정 프로세스, 마이그레이션의 이점, 이전 버전인 RocksMQ와의 비교를 통해 이 통합의 복잡성을 풀어보겠습니다.
Milvus에서 메시지 큐의 역할 이해하기
Milvus의 클라우드 네이티브 아키텍처에서 메시지 큐 또는 로그 브로커는 매우 중요한 역할을 합니다. 이는 지속적인 데이터 스트림, 동기화, 이벤트 알림, 시스템 복구 중 데이터 무결성을 보장하는 백본입니다. 기존에는 Milvus 독립형 모드에서 특히 Pulsar 및 Kafka와 비교할 때 RocksMQ가 가장 간단한 선택이었지만, 방대한 데이터와 복잡한 시나리오로 인해 그 한계가 분명해졌습니다.
Milvus 2.3은 단일 노드 MQ 구현인 NATS를 도입하여 데이터 스트림 관리 방법을 재정의합니다. 이전 버전과 달리 NATS는 Milvus 사용자에게 성능 제약으로부터 자유로워져 상당한 양의 데이터를 원활하게 처리할 수 있는 환경을 제공합니다.
NATS란 무엇인가요?
NATS는 Go에서 구현된 분산 시스템 연결 기술입니다. 시스템 간 요청-응답 및 게시-구독과 같은 다양한 통신 모드를 지원하고, JetStream을 통해 데이터 지속성을 제공하며, 내장된 RAFT를 통해 분산 기능을 제공합니다. NATS에 대한 자세한 내용은 NATS 공식 홈페이지를 참조하세요.
Milvus 2.3 독립 실행형 모드에서 NATS, JetStream, PubSub는 Milvus에 강력한 MQ 기능을 제공합니다.
NATS 활성화
Milvus 2.3은 새로운 제어 옵션인 mq.type
을 제공하여 사용자가 사용하고자 하는 MQ 유형을 지정할 수 있습니다. NATS를 활성화하려면 mq.type=natsmq
을 설정하세요. Milvus 인스턴스를 시작한 후 아래와 유사한 로그가 표시되면 메시지 큐로 NATS를 성공적으로 활성화한 것입니다.
[INFO] [dependency/factory.go:83] ["try to init mq"] [standalone=true] [mqType=natsmq]
Milvus용 NATS 구성하기
NATS 사용자 지정 옵션에는 수신 포트, JetStream 스토리지 디렉터리, 최대 페이로드 크기 및 초기화 시간 초과 지정이 포함됩니다. 이러한 설정을 미세 조정하면 최적의 성능과 안정성을 보장할 수 있습니다.
natsmq:
server: # server side configuration for natsmq.
port: 4222 # 4222 by default, Port for nats server listening.
storeDir: /var/lib/milvus/nats # /var/lib/milvus/nats by default, directory to use for JetStream storage of nats.
maxFileStore: 17179869184 # (B) 16GB by default, Maximum size of the 'file' storage.
maxPayload: 8388608 # (B) 8MB by default, Maximum number of bytes in a message payload.
maxPending: 67108864 # (B) 64MB by default, Maximum number of bytes buffered for a connection Applies to client connections.
initializeTimeout: 4000 # (ms) 4s by default, waiting for initialization of natsmq finished.
monitor:
trace: false # false by default, If true enable protocol trace log messages.
debug: false # false by default, If true enable debug log messages.
logTime: true # true by default, If set to false, log without timestamps.
logFile: /tmp/milvus/logs/nats.log # /tmp/milvus/logs/nats.log by default, Log file path relative to .. of milvus binary if use relative path.
logSizeLimit: 536870912 # (B) 512MB by default, Size in bytes after the log file rolls over to a new one.
retention:
maxAge: 4320 # (min) 3 days by default, Maximum age of any message in the P-channel.
maxBytes: # (B) None by default, How many bytes the single P-channel may contain. Removing oldest messages if the P-channel exceeds this size.
maxMsgs: # None by default, How many message the single P-channel may contain. Removing oldest messages if the P-channel exceeds this limit.
참고:
NATS 서버 수신에는
server.port
을 지정해야 합니다. 포트 충돌이 발생하면 Milvus를 시작할 수 없습니다.server.port=-1
을 설정하여 포트를 임의로 선택합니다.storeDir
JetStream 스토리지의 디렉터리를 지정합니다. Milvus의 읽기/쓰기 처리량을 높이려면 고성능 SSD(솔리드 스테이트 드라이브)에 디렉터리를 저장하는 것이 좋습니다.maxFileStore
JetStream 스토리지 크기의 상한을 설정합니다. 이 제한을 초과하면 더 이상의 데이터 쓰기가 불가능합니다.maxPayload
개별 메시지 크기를 제한합니다. 쓰기 거부를 방지하려면 5MB 이상으로 유지해야 합니다.initializeTimeout
NATS 서버 시작 시간 제한을 제어합니다.monitor
NATS의 독립 로그를 구성합니다.retention
NATS 메시지의 보존 메커니즘을 제어합니다.
자세한 내용은 NATS 공식 문서를 참조하세요.
RocksMQ에서 NATS로 마이그레이션하기
RocksMQ에서 NATS로 마이그레이션하는 것은 쓰기 작업 중지, 데이터 플러시, 구성 수정, Milvus 로그를 통한 마이그레이션 확인 등의 단계를 포함하는 원활한 프로세스입니다.
마이그레이션을 시작하기 전에 Milvus에서 모든 쓰기 작업을 중지하세요.
Milvus에서
FlushALL
작업을 실행하고 완료될 때까지 기다립니다. 이 단계를 통해 보류 중인 모든 데이터가 플러시되고 시스템이 종료될 준비가 됩니다.mq.type=natsmq
을 설정하고natsmq
섹션에서 관련 옵션을 조정하여 Milvus 구성 파일을 수정합니다.Milvus 2.3을 시작합니다.
rocksmq.path
디렉터리에 저장된 원본 데이터를 백업하고 정리합니다. (선택 사항)
NATS 대 RocksMQ: 성능 대결
게시/서브 성능 테스트
테스트 플랫폼: M1 Pro 칩/메모리: 16GB
테스트 시나리오: 마지막으로 게시된 결과가 수신될 때까지 임의의 데이터 패킷을 주제에 반복적으로 구독 및 게시.
결과:
더 작은 데이터 패킷(64KB 미만)의 경우, 메모리, CPU, 응답 속도 면에서 RocksMQ가 NATS보다 우수한 성능을 보였습니다.
더 큰 데이터 패킷(64KB 초과)의 경우, 응답 시간이 훨씬 빠른 NATS가 RocksMQ를 앞섰습니다.
테스트 유형 | MQ | 연산 횟수 | 연산당 비용 | 메모리 비용 | CPU 총 시간 | 스토리지 비용 |
---|---|---|---|---|---|---|
5MB*100 Pub/Sub | NATS | 50 | 1.650328186 s/op | 4.29 GB | 85.58 | 25G |
5MB*100 Pub/Sub | RocksMQ | 50 | 2.475595131 s/op | 1.18 GB | 81.42 | 19G |
1MB*500 Pub/Sub | NATS | 50 | 2.248722593 s/op | 2.60 GB | 96.50 | 25G |
1MB*500 Pub/Sub | RocksMQ | 50 | 2.554614279 s/op | 614.9 MB | 80.19 | 19G |
64KB*10000 Pub/Sub | NATS | 50 | 2.133345262 s/op | 3.29 GB | 97.59 | 31G |
64KB*10000 Pub/Sub | RocksMQ | 50 | 3.253778195 s/op | 331.2 MB | 134.6 | 24G |
1KB*50000 Pub/Sub | NATS | 50 | 2.629391004 s/op | 635.1 MB | 179.67 | 2.6G |
1KB*50000 Pub/Sub | RocksMQ | 50 | 0.897638581 s/op | 232.3 MB | 60.42 | 521M |
표 1: Pub/Sub 성능 테스트 결과
Milvus 통합 테스트
데이터 크기: 100M
결과: 1억 개의 벡터 데이터 세트를 사용한 광범위한 테스트에서 NATS는 더 낮은 벡터 검색 및 쿼리 지연 시간을 보여주었습니다.
메트릭 | RocksMQ(ms) | NATS(ms) |
---|---|---|
평균 벡터 검색 지연 시간 | 23.55 | 20.17 |
초당 벡터 검색 요청 수(RPS) | 2.95 | 3.07 |
평균 쿼리 지연 시간 | 7.2 | 6.74 |
초당 쿼리 요청 수(RPS) | 1.47 | 1.54 |
표 2: 100m 데이터 세트를 사용한 Milvus 통합 테스트 결과
데이터 세트: <100M
결과 100M보다 작은 데이터 세트의 경우, NATS와 RocksMQ는 비슷한 성능을 보였습니다.
결론: NATS 메시징을 통한 Milvus의 역량 강화
Milvus에 NATS를 통합함으로써 데이터 처리에 있어 상당한 진전을 이루었습니다. 실시간 분석, 머신 러닝 애플리케이션, 데이터 집약적인 벤처 등 어떤 프로젝트든 NATS는 효율성, 안정성, 속도를 통해 프로젝트의 역량을 강화합니다. 데이터 환경이 진화함에 따라 Milvus 내에 NATS와 같은 강력한 메시징 시스템을 갖추면 원활하고 안정적인 고성능 데이터 통신을 보장할 수 있습니다.
- Milvus에서 메시지 큐의 역할 이해하기
- NATS란 무엇인가요?
- NATS 활성화
- Milvus용 NATS 구성하기
- RocksMQ에서 NATS로 마이그레이션하기
- NATS 대 RocksMQ: 성능 대결
- 결론: NATS 메시징을 통한 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