2026-01-19 (월)
Jan 19, 2026
오늘 배운 것
섹션 제목: “오늘 배운 것”- Milvus는 벡터 유사도 검색용 분산 DB
- 4개 레이어 구조: Client → Proxy → Coordinator → Worker → Storage
- 쓰기/읽기 워크로드가 분리되어 독립 스케일링 가능
핵심 아키텍처
섹션 제목: “핵심 아키텍처”Client SDK (PyMilvus, REST) ↓ Proxy Layer (API 게이트웨이, 요청 라우팅) ↓Coordinator Layer (RootCoord, DataCoord, QueryCoord) ↓ Worker Layer (DataNode: 쓰기, QueryNode: 읽기) ↓ Storage Layer (etcd: 메타, MinIO/S3: 데이터)컴포넌트 역할
섹션 제목: “컴포넌트 역할”| 컴포넌트 | 역할 | 확장성 |
|---|---|---|
| Proxy | API 게이트웨이 | 수평 확장 |
| RootCoord | DDL, 스키마 관리 | Active-Standby |
| DataCoord | 세그먼트 할당/컴팩션 | Active-Standby |
| QueryCoord | 쿼리 로드밸런싱 | Active-Standby |
| DataNode | 데이터 저장, 인덱스 빌드 | 수평 확장 (쓰기) |
| QueryNode | 벡터 검색 실행 | 수평 확장 (읽기) |
데이터 흐름 요약
섹션 제목: “데이터 흐름 요약”Insert: Client → Proxy → DataCoord(세그먼트 할당) → DataNode → MinIO(Binlog)
Search: Client → Proxy → QueryCoord(샤드 리더 조회) → QueryNode(벡터 검색) → Proxy(결과 Reduce)
데이터 저장 구조
섹션 제목: “데이터 저장 구조”Collection → Partition → Segment ├── Growing (쓰기 가능) └── Sealed (읽기 전용, 인덱스됨)세그먼트 상태: Growing → Sealed → Flushed → Indexed
헷갈린 점 / TODO
섹션 제목: “헷갈린 점 / TODO”- MixCoord가 RootCoord, DataCoord, QueryCoord를 통합한다는데, 언제 분리하고 언제 통합하는지?
- Segcore(C++ 검색 엔진)와 Go 코드 간 인터페이스는 어떻게 되는지?
- 컴팩션 정책(L0, Clustering, ForceMerge) 차이 더 알아보기
- 코드: milvus-io/milvus
- 핵심 파일:
internal/proxy/task_*.go,internal/datanode/data_node.go,internal/querynodev2/server.go