Kling AI가 Milvus에서 10B+ 규모와 10,000+ QPS로 벡터 검색을 운영하는 방법

10B+
가장 큰 단일 프로덕션 클러스터에서의 벡터
10,000+ QPS
최고 처리량, 쓰기와 쿼리를 동시에
10,000+ 차원
벡터당 차원 수, 이전 엔진의 4,096 한도를 넘어서
무중단
단일 AZ 장애가 발생해도 검색 및 쓰기가 계속 실행됩니다.
Kling AI 소개
Kling AI는 224개 국가 및 지역에서 1억 명 이상의 사용자를 보유한 AI 이미지 및 비디오 생성 모델입니다. Kuaishou의 일부이며, Kuaishou는 일일 활성 사용자 4억 명 이상을 보유한 세계 최대 규모의 숏폼 비디오 및 라이브 스트리밍 플랫폼 중 하나를 운영하고 있습니다.
Kling AI로 생성된 이미지
Kling AI와 그 모회사의 다른 제품들은 Milvus를 기반으로 구축된 하나의 공유 플랫폼에서 벡터 검색을 실행합니다. 이 플랫폼은 키워드뿐만 아니라 의미로 콘텐츠를 매칭하고 검색하는 다양한 시스템에 서비스를 제공합니다: 업로드 안전 및 리스크 검사, 게시된 동영상과 중복된 동영상 감지, 멀티모달 및 의미 검색 구동, RAG 및 에이전트 기능의 기반 제공. 가장 큰 단일 클러스터에는 100억 개 이상의 벡터가 저장되어 있습니다.
과제
AI는 제품을 키워드 매칭만으로는 감당할 수 없는 수준으로 끌어올렸고, 벡터 검색은 프로덕션 요구 사항이 되었습니다. 팀은 처음에 Elasticsearch에 근사 최근접 이웃 인덱싱을 추가하여 이 요구를 충족했지만, 특히 워크로드가 수백억 개의 벡터에 가까워지면서 오래 버티지 못했습니다. 그 규모에서 세 가지 한계가 해결하기 어려운 장애물이 되었습니다.
읽기와 쓰기가 동일한 머신을 두고 경쟁했습니다. 리스크 관리와 콘텐츠 안전 시스템은 온라인 쿼리를 동시에 처리하면서 지속적으로 새 벡터를 수집합니다. Elasticsearch에서는 쓰기와 쿼리가 동일한 노드를 공유하므로, 동시 부하가 높을 때 쿼리 지연 시간은 안전 시스템이 안정적인 상태를 필요로 하는 바로 그 시점에 급증하고 출렁였습니다.
스토리지와 컴퓨팅을 분리하여 확장할 수 없었습니다. Elasticsearch는 이 둘을 함께 묶어 두기 때문에, 수백억 개의 벡터 규모로 성장하려면 둘 중 하나만 병목이어도 노드, 메모리, CPU를 모두 동시에 추가해야 했습니다. 비용 곡선과 스케줄링 복잡성 모두 데이터 자체보다 빠르게 증가했습니다.
벡터 차원의 단단한 상한선. Elasticsearch는 벡터를 4,096차원으로 제한했는데, 이는 최신 임베딩 모델이 이미 생성하는 차원 수에 미치지 못했습니다. 결과적으로 이 검색 엔진은 팀이 채택할 수 있는 임베딩 모델을 제한했습니다.
Milvus를 선택한 이유
Kling AI 데이터베이스 팀은 이러한 세 가지 한계를 직접 해결할 수 있는 목적에 맞게 구축된 벡터 엔진이 필요했습니다. 시중의 벡터 검색 공급업체를 내부 평가한 후, 데이터베이스 팀은 다양한 AI 사용 사례를 지원하기 위해 Milvus를 선택했습니다. Milvus가 제공하는 기능은 다음과 같습니다:
벡터 네이티브 분리형 아키텍처. 쿼리, 쓰기, 인덱스 구축, 조정이 각각 별도의 컴포넌트로 실행되며, 스토리지는 컴퓨팅과 분리되어 있습니다.
수십억 개의 벡터에서도 밀리초 단위 검색. 검색이 사용자 또는 안전 결정 앞에 있는 경우, 그 숫자가 중요한 지표입니다.
여러 인덱스 유형을 통한 팀별 트레이드오프 조정. HNSW, IVF, DiskANN은 SQ8, RaBitQ와 같은 양자화 기법과 함께 제공되며, 수만 차원의 벡터를 지원합니다. 10,000 QPS를 서비스하는 팀과 제한된 메모리 예산으로 훨씬 더 큰 코퍼스를 검색하는 팀은 각각 재현율, 지연 시간, 메모리, 비용 곡선에서 자신의 지점을 선택할 수 있습니다.
하나의 엔진 뒤에 완성된 기능 세트. 팀은 top-K 조회 이상의 기능이 필요했습니다: 스칼라 필터링, 전문(full-text) 및 의미 검색, 하이브리드 검색, 집계. Milvus는 이 모든 것을 지원하므로, 그렇지 않았다면 여러 시스템에 걸쳐 있었을 시나리오가 하나의 API 뒤에 구현됩니다.
대기업이 기반으로 삼을 수 있는 커뮤니티를 갖춘 오픈소스. Milvus는 Apache 2.0 라이선스를 따르며 크고 활발한 커뮤니티의 지원을 받고 있습니다: 46,000개 이상의 GitHub 스타, 10,000개 이상의 기업 사용자, 1억 회 이상의 다운로드.
솔루션
Kling AI 및 그룹 내 다른 제품들의 기반이 되는 플랫폼은 Milvus 2.5 및 2.6을 실행하며, 리스크 관리 및 콘텐츠 안전, 비디오 중복 제거, RAG 및 지식 베이스, 에이전트 메모리, 추천 및 사용자 프로파일링, 멀티모달 및 크로스모달 검색 등 다양한 사용 사례를 지원합니다. 임베딩은 64차원부터 10,000차원 이상까지 있으며, 가장 큰 단일 클러스터는 100억 개 이상의 벡터를 보유하고, 최대 트래픽은 10,000 QPS를 초과합니다.
이러한 워크로드들은 매우 다른 요구 사항을 가지고 있습니다. 어떤 것은 초당 가장 많은 검색을 필요로 하고, 어떤 것은 하나의 쿼리에서 벡터, 키워드, 필터 검색을 결합하며, 어떤 것은 엄격한 시간 제한 내에 응답해야 합니다. 많은 경우 실시간 검색을 제공하면서 새 데이터를 쉬지 않고 수집하며, 모두 가동 상태를 유지해야 합니다. 아래의 주요 내용은 Milvus와 팀 자체 엔지니어링이 그러한 요구를 어떻게 충족하는지 보여줍니다.
리스크 관리 및 콘텐츠 안전: 수십억 개 벡터에서 10,000+ QPS 읽기/쓰기 분리
새 콘텐츠는 단일 클러스터에 24시간 기록되며, 검색이 계속 유입되는 동안 거의 도착하자마자 검색 가능해야 합니다. Milvus는 쓰기와 검색을 별도의 노드에서 실행하므로 새 콘텐츠의 급증이 검색을 느려지게 하지 않습니다. 그래프 기반 인덱스인 HNSW는 각 검색을 빠르게 유지하고, SQ8 압축은 각 벡터를 약 1/4 크기로 줄여 수십억 개가 메모리에 저렴하게 들어맞게 하며, 여러 복제본이 쿼리 부하를 분산합니다. 10,000+ QPS를 달성하려면 이 규모에 맞게 Milvus를 튜닝하는 것도 필요했으며, 주로 Milvus의 데이터 청크 크기를 팀의 머신에 맞추고 여러 영역의 복제본 간에 부하를 균형 조정하는 것이었습니다. Milvus 2.6은 이후 그러한 튜닝의 일부를 제품에 내장했습니다.
비디오 중복 제거: 100억+ 벡터에 대한 실시간 HNSW 검색
업로드된 비디오는 프레임으로 샘플링되고 각 프레임은 임베딩되며, 제목과 태그가 놓치는 재업로드 및 조작된 복사본(예: 교체된 워터마크나 반전된 이미지)을 잡아내기 위해 100억 개 이상의 벡터 컬렉션이 실시간으로 검색됩니다. 중복 제거는 플랫폼에서 가장 큰 두 가지 벡터 워크로드 중 하나입니다. 새 비디오가 끊임없이 유입되고, 컬렉션은 초당 5,000~10,000+ 건의 검색에 응답하며, 24시간 가동 상태를 유지해야 합니다. Milvus는 HNSW로 이를 처리하며, 비디오는 업데이트보다는 거의 항상 추가되므로 인덱스는 재작성이 거의 필요 없고 빠른 상태를 유지합니다.
회사 전체 서비스: Milvus Operator로 자동화된 100+ 클러스터
그룹 전반의 팀에 서비스를 제공한다는 것은 Milvus를 단일 클러스터가 아닌 하나의 플릿으로 운영한다는 뜻입니다. 팀은 Milvus Operator를 기반으로 이 플릿을 구축했습니다. Milvus Operator는 프로비저닝, 확장, 롤링 업그레이드, 구성 변경을 자동화하므로 새 프로덕션 클러스터는 몇 분 안에 준비됩니다. 모니터링은 Milvus 자체 오픈소스 Grafana 대시보드를 기반으로 하며, Apache SeaTunnel은 클러스터 간 및 기존 엔진 밖으로 데이터를 이동합니다. 팀은 또한 LLM 기반 용량 계획 에이전트를 추가하여 팀의 벡터 수, QPS, 예산을 권장 클러스터 크기와 인덱스로 변환하며, DBA는 대규모 출시 전에 이를 검토합니다.
데이터센터 장애: Milvus 리소스 그룹에서의 3-AZ 복구
플랫폼은 같은 도시의 세 데이터센터(가용 영역)에 걸쳐 실행되므로, 데이터센터 전체 하나가 손실되어도 검색이나 쓰기는 중단되지 않습니다. Milvus의 아키텍처가 대부분의 작업을 수행합니다. 대부분의 Milvus 서비스는 자체 데이터를 보관하지 않으므로 어떤 복사본이든 다른 복사본의 역할을 대신할 수 있습니다. 팀은 세 데이터센터 모두에 복사본을 실행하며, 하나가 중단되면 나머지가 계속 운영됩니다. 쿼리 노드는 각각 데이터의 일부를 캐시하므로 예외이며, Milvus의 리소스 그룹은 모든 데이터센터에 검색 가능한 데이터의 전체 복제본을 유지하여 이를 처리합니다. 팀은 나머지 두 데이터센터가 핵심 트래픽을 처리할 수 있도록 충분한 예비 용량을 추가했으며, Milvus 뒤에 있는 메타데이터 저장소와 메시지 큐도 세 곳 모두에서 실행합니다.
결과 & 혜택
프로덕션에서 수백억 개의 벡터를 처리합니다. Milvus는 Kling AI와 그 모회사의 가장 큰 워크로드(위험 제어, 콘텐츠 안전, 비디오 중복 제거)를 구동합니다. 가장 큰 단일 클러스터는 400+ 쿼리 노드에 걸쳐 10B+ 벡터를 보유합니다.
수십억 개의 벡터에서 피크 시 10,000+ QPS를 제공하며, 쓰기와 검색이 동시에 실행됩니다. Milvus는 쓰기와 검색을 분리하므로 새로운 콘텐츠가 쏟아져도 검색이 더 이상 느려지지 않습니다 - 이것이 Kling AI가 이전 엔진을 떠나게 된 문제였습니다.
100+ 프로덕션 클러스터, 회사 전체 서비스로 운영, 1년도 안 되어 구축되었습니다. 새 클러스터는 몇 분 안에 준비되며, 플랫폼은 99% 알림 SLA를 유지합니다.
최대 10,000+ 차원의 임베딩, 기존 4,096 상한을 훨씬 넘어섭니다. 팀은 모델이 생성하는 차원을 64부터 상한 없이, 벡터 인프라를 변경하지 않고 사용합니다.
데이터 센터 하나가 장애를 일으켜도 중단이 없습니다. Milvus는 같은 도시의 세 데이터 센터에 각각 검색 가능한 데이터의 전체 복제본을 두고 운영되므로, 하나가 손실되어도 검색이나 쓰기가 중단되지 않습니다.
필요한 곳에서만 용량이 늘어납니다. 스토리지와 컴퓨팅이 별도로 확장되므로, 팀은 실제로 부족한 리소스만 추가합니다. 그리고 압축 또는 디스크 기반 인덱스(SQ8, DiskANN)는 워크로드가 허용하는 곳에서 메모리 비용을 줄여줍니다.
전반적으로 Milvus는 Kling AI와 그 그룹의 다른 제품들을 위한 핵심 벡터 검색 엔진이 되었으며, 위험 제어와 중복 제거부터 RAG와 에이전트까지 다양한 워크로드를 처리합니다. 새 팀이 벡터 검색을 필요로 하면, 단순히 Milvus 클러스터를 요청하기만 하면 됩니다.
다음 단계
Kling AI 팀은 Milvus를 더욱 안정적이고 비용 효율적으로 운영하고, 그룹 내 더 많은 시나리오로 확장하는 것을 목표로 합니다. Milvus 3.0 아키텍처를 추적하고 업그레이드의 이점을 측정하며 프로덕션 도입을 위한 점진적인 경로를 계획하고 있습니다. 또한 3.0과 함께 제공되는 lakebase 기능을 탐색하여 S3 외부 테이블로 콜드 데이터를 계층화하고, 오프라인 데이터를 재사용하며, 벡터의 전체 수명 주기를 관리하고자 합니다. 그리고 Milvus 커뮤니티와의 협력을 심화하여 프로덕션에서 배운 것을 피드백과 기여로 전환할 계획입니다.


