Cốc Cốc treibt Vietnams landesweite KI-Suche mit Milvus an.
700M
Vektoren in der Produktion, Skalierung in Richtung 1.5B
19.8 ms
P90-Latenz der semantischen Suche bei Spitzenlast
32.1 ms
P90-Hybridsuchlatenz bei Spitzenlast
99–100 %
Recall in der Produktion mit HNSW
Wir antworten in unter 20 Millisekunden über Hunderte Millionen Vektoren, und jedes KI-Produkt, das wir gebaut haben — Suche, Werbung, RAG — läuft auf derselben Milvus-Bereitstellung. Das ermöglicht es uns, weiterhin auszuliefern, ohne Infrastruktur hinzuzufügen.
Nam Doan Ngoc Giang
Über Cốc Cốc
Cốc Cốc ist Vietnams führende einheimische Suchmaschine und Browser. Mehr als 30 Millionen Menschen nutzen es — etwa jeder dritte vietnamesische Internetnutzer — mit über 600 Millionen Suchanfragen pro Monat, was Cốc Cốc zur zweitgrößten Suchmaschine und zum zweitgrößten Browser des Landes macht, direkt hinter Google. Sein Vorteil ist das, was globale Suchmaschinen am schwersten kopieren können: die vietnamesische Sprache selbst, bis hin zu den Sprachmodellen, die Cốc Cốcs eigenes Team dafür feinabgestimmt hat.
Seit 2023 integriert Cốc Cốc KI in dieses Erlebnis, mit AI Chat und AI Search, und erweitert dieselbe Intelligenz auf Cốc Cốc Ads. Dieser Wandel veränderte das darunterliegende Problem: Ergebnisse müssen nun nach Bedeutung abgerufen werden und nicht nur nach Schlüsselwörtern, quer über Hunderte Millionen von Einträgen, in Millisekunden. Milvus ist die semantische Schicht, die Cốc Cốc dafür gewählt hat — heute beherbergt sie 700 Millionen Vektoren in fünf ihrer Produktionssysteme.
Die Herausforderung
Semantisches Retrieval in eine Suchmaschine und Werbeplattform von nationaler Größe zu bringen, bedeutete, drei Probleme gleichzeitig zu lösen.
- Die Stichwortsuche kann die Suchanfragen, die Nutzer tatsächlich eingeben, nicht beantworten. Jeden Tag erscheinen neue Suchanfragen und Trends — ein Telefon, das heute Morgen auf den Markt kam, ein Nachrichtenereignis von vor einer Stunde, eine vietnamesische Formulierung, die keine Webseite verwendet. Die Stichwortsuche gleicht nur die tatsächlichen Wörter der Nutzer ab, also liefert sie für diese wenig Wertvolles.
- Vektorbibliotheken können keine Hunderte Millionen von Vektoren aufnehmen. FAISS und USearch funktionierten gut in Cốc Cốcs kleineren Projekten, aber sie liefern einen Index, kein System — nichts, das Hunderte Millionen von Vektoren über Maschinen verteilt, sie abfragbar hält, während neue Daten geschrieben werden, und zuverlässig in der Produktion läuft. Was auch immer sie ersetzte, musste außerdem auf Cốc Cốcs eigenen Servern laufen, damit Such- und Werbedaten in ihrer Infrastruktur blieben.
- Der Anzeigenabgleich erfordert zwei Abrufpfade, aber das Latenzbudget unterstützt nur einen. Werbetreibende, die auf die exakten Worte eines Käufers bieten, müssen abgeglichen werden, aber ein Käufer, der dasselbe anders beschreibt, sollte sie trotzdem sehen. Beide parallel auszuführen und sie zu einer einzigen Rangliste zu fusionieren — bei Cốc Cốcs volumenstärkstem Vektor-Workload, innerhalb eines gemeinsamen Seitenladebudgets — ist der Punkt, an dem es schwierig wird.
Warum Milvus
Cốc Cốc validierte Milvus mit einem Proof of Concept anhand von etwa 30 Millionen Query-Embeddings, bevor man sich festlegte. Die Ergebnisse übertrafen die Erwartungen des Teams, und seitdem ist Milvus ihre Vektordatenbank. Fünf Dinge hielten es an Ort und Stelle, als die Workload wuchs.
- Geringe Latenz, die auch bei wachsendem Datensatz erhalten blieb. Dies war das primäre Kriterium. Milvus lieferte durchgehend schnelle Vektorsuche, während sich der Korpus von Cốc Cốc von den 30 Millionen Vektoren des Proof of Concept auf 700 Millionen in der Produktion skalierte, und hielt auch dann stand, als das Team auf hybride Suche für die Werbeplattform erweiterte – ein schwereres Abfragemuster bei höherem Volumen.
- Selbst gehostet, sodass Daten und Infrastruktur bei Cốc Cốc bleiben. Milvus ist Open Source und läuft in der eigenen Umgebung von Cốc Cốc. Benutzerdaten verlassen niemals die Infrastruktur, und das Team kontrolliert selbst die Bereitstellungstopologie, die Indexkonfiguration, die Ressourcenzuweisung und das Timing von Upgrades.
- Native Hybridsuche statt eines zweiten Systems, das betrieben werden muss. Milvus erzeugt Sparse-Vektoren mit einer integrierten BM25-Funktion und kombiniert sie in einer einzigen Abfrage mit dichten ANN-Ergebnissen. Die Werbeanzeigen-Engine von Cốc Cốc erhält lexikalische und semantische Suche aus einer Datenbank mit einer einzigen Betriebsoberfläche – statt einen separaten Keyword-Suchcluster zu betreiben und zwei Ergebnismengen im Anwendungscode zusammenzuführen.
- Eine vollständige Index-Toolbox, sodass jede Arbeitslast den richtigen Kompromiss erhält. Die Arbeitslasten von Cốc Cốc wollen nicht dasselbe. Die Online-Suche will die geringste Latenz bei hoher Genauigkeit; Offline-Batch-Pipelines wollen exakte Ergebnisse und es ist ihnen egal, wie lange sie dauern. Milvus unterstützt HNSW, die IVF-Familie, FLAT und viele mehr auf derselben Bereitstellung, sodass das Team pro Arbeitslast wählen konnte, statt bei allen Kompromisse einzugehen.
- Einfach bereitzustellen, zu betreiben und zu erlernen. Milvus war einfach aufzusetzen, zu verwalten und in der Produktion zu skalieren, was den betrieblichen Aufwand für das Entwicklungsteam gering hielt. Die modulare Architektur von Milvus Distributed mit detaillierten Dashboard-Panels für jede Komponente ermöglicht es dem Team, genau zu sehen, welcher Teil des Systems unter Druck steht, und die Hardware auf den tatsächlichen Engpass auszulegen. Und die Dokumentation war umfassend und leicht verständlich, was die anfängliche Implementierung beschleunigte und die Integration in die bestehenden Systeme von Cốc Cốc vereinfachte.
Die Lösung
Milvus sitzt ganz oben in den Pipelines von Cốc Cốc: Es ist der Abrufschritt, vor Filterung und Neubewertung. Die Kern-Websuche-Relevanz von Cốc Cốc folgt einer Retrieve-and-Rerank-Architektur, wobei Milvus die Erstphasen-Wiedererkennung übernimmt und nachgelagerte Modelle die Ergebnisse verfeinern.
Fünf Produktionssysteme laufen auf dieser einen Milvus-Bereitstellung – jedes mit eigener Collection, eigener Definition dessen, was ein Vektor bedeutet, und eigener Indexkonfiguration, aber ohne separate Infrastruktur:
- Kern-Websuche-Relevanz – semantischer Abruf, der relevante Ergebnisse für unbekannte und Long-Tail-Anfragen sichtbar macht.
- KI-gestützte Such- und Shopping-Anzeigen – semantischer und hybrider Abruf, der die Benutzerabsicht mit relevanten Anzeigen abgleicht.
- Ähnliche Suchvorschläge – Vektorähnlichkeit, die kontextuell relevante Folgeabfragen anzeigt.
- Lookalike-Targeting – Browserverlauf, der als Vektoren eingebettet wird, um Nutzer mit ähnlichen Interessen für Display-Werbung zu finden.
- Ein interner RAG-Chatbot – Milvus als Abrufschicht, die LLM-Antworten auf die eigenen Dokumente von Cốc Cốc stützt.
Was ein Vektor darstellt, hängt vom System ab: eine Webseite, eine Suchanfrage, eine Anzeige, ein Benutzerprofil oder eine Textpassage. Die meisten Embeddings stammen von Bi-Encoder-Modellen, die das Team auf Basis von PhoBERT verfeinert hat, optimiert für vietnamesisches Sprachverständnis – die Fachkompetenz, die dafür sorgt, dass die Ergebnisse von Cốc Cốc vietnamesisch sind und nicht nur übersetzt.
Um die Produktionsanforderungen an Latenz und Speicher zu erfüllen, wendet Cốc Cốc Modelloptimierung an, um die Produktions-Embeddings auf 128 Dimensionen zu reduzieren, während die Abrufqualität erhalten bleibt. Schmalere Vektoren bedeuten weniger Speicher pro Vektor und schnellere Abstandsberechnung, was hilft, den Speicher pro Knoten in dieser Größenordnung verwaltbar zu halten. Das gab dem Team einen kompakten, hochwertigen Vektor, auf dem es aufbauen konnte. Die nächste Frage war, welcher Index darauf aufgebaut werden sollte.
Milvus unterstützt mehrere Indextypen mit einem eigenen Index für jede Arbeitslast
Die Arbeitslasten von Cốc Cốc ziehen in entgegengesetzte Richtungen. Die suchorientierte Nutzeroberfläche möchte die geringstmögliche Latenz bei hohem Recall; Offline-Batch-Pipelines möchten exakte Ergebnisse und es ist ihnen egal, wie lange sie dauern. Milvus unterstützt HNSW, die IVF-Familie, FLAT und mehr auf derselben Bereitstellung – so konnte das Team, statt einen Index auszuwählen und überall damit zu leben, die Optionen gegen ihre eigenen Daten benchmarken und dann verschiedene Indizes nebeneinander ausführen.
Für Online-Dienste verglichen sie die Kandidaten hinsichtlich Recall, Indexgröße und Leistung:
- IVF-SQ8 — ein kleiner Speicherbedarf, aber geringerer Recall und höhere Latenz.
- IVF-PQ — ein noch kleinerer Speicherbedarf als IVF-SQ8, mit wiederum geringerem Recall.
- HNSW — der beste Recall, bei 99%–100%, und die geringste Latenz, zu höheren Speicherkosten.
Da die Latenz der bindende Engpass für nutzerorientierte Dienste ist und der Speicher derzeit nicht der limitierende Faktor in ihrer Bereitstellung ist, wählten sie HNSW und akzeptierten den Speicherkompromiss. Für Offline-Batch-Arbeitslasten – tägliche Inferenz- und Datenverarbeitungspipelines – verwenden sie stattdessen den FLAT-Index, der eine exakte Nearest-Neighbor-Suche mit 100% Recall erreicht, sodass nachgelagerte Verarbeitung auf der Ground Truth basiert. Keine der beiden Arbeitslasten begnügt sich mit dem Kompromiss der anderen, und keine benötigt eine eigene Datenbank.
Hybride Abfrage für die Anzeigenzuordnung, integriert in Milvus
Anzeigen sowohl nach exaktem Wortlaut als auch nach Absicht abzugleichen bedeutet normalerweise, einen Keyword-Suchcluster neben einer Vektordatenbank zu betreiben und die beiden Ergebnismengen im Anwendungscode zusammenzuführen. Milvus beseitigt diese Trennung: Lexikalische und semantische Abfrage sind in derselben Query nativ integriert.
Für jede Benutzeranfrage im KI-gestützten Suchanzeigen-System von Cốc Cốc laufen zwei Abfragepfade parallel:
- Eine ANN-semantische Suche über das dichte Embedding-Feld unter Verwendung des HNSW-Index.
- Eine Volltextsuche über ein spärliches Vektorfeld, das Milvus selbst erzeugt, über seine eingebaute BM25-Funktion — es gibt also keinen zweiten lexikalischen Index, den das Team aufbauen, betreiben oder synchron halten müsste.
Milvus führt die beiden Ergebnismengen dann mithilfe von WeightedRanker, seines eingebauten Fusionsprimitivs, zusammen, wobei die Gewichte von Cốc Cốc kontrolliert werden. Das Team entschied sich für 0,6 Richtung dicht und 0,4 Richtung spärlich — mit einer leichten Betonung des semantischen Verständnisses, während das exakte Keyword-Matching reales Gewicht behält. Das führt zu einer höherwertigen Anzeigenabfrage: Die dichte Seite erfasst Absichten, die der Werbetreibende nie formuliert hat, und die spärliche Seite schützt die exakten Trefferfälle, die kommerziell wichtig sind. Wenn sich das Gleichgewicht verschieben muss, ist das eine einzelne einstellbare Zahl und keine Neuarchitektur.
Milvus-Hybridsuche in das Latenzbudget bringen
Als Cốc Cốc den gesamten Produktionsverkehr erstmals durch die Hybridsuche leitete, erreichte die Hybrid-Abfragelatenz bei einer Spitze von etwa 166 Anfragen pro Sekunde ungefähr 120 ms beim P90 — über ihrem Ziel.
Die Antwort des Teams war architektonischer Natur und kein Qualitätsrückzug. Sie führten einen 24-Stunden-TTL-Cache auf Anwendungsebene vor der Abfrageebene ein. Bei einer Cache-Trefferquote von etwa 60% sank die effektive Last auf Milvus während des Spitzenverkehrs auf etwa 67 RPS, und die Latenz kehrte in die Produktionsanforderungen zurück. An der Abfrage selbst änderte sich nichts: Milvus lieferte weiterhin dieselben Hybrid-Ergebnisse in derselben Qualität, und Cốc Cốc änderte lediglich, wie viel Verkehr es bewältigen musste.
Latenz bei kontinuierlicher Datenerfassung stabil halten
Die Kollektionen von Cốc Cốc sind nicht statisch; Einfügungen, Upserts, Indexaufbau und Kompaktierung laufen alle gegen ein Live-System. Milvus behandelt diese als Hintergrundoperationen, sodass Kollektionen durchsuchbar bleiben, während sie beschrieben und neu indiziert werden. Um die Latenz nicht nur verfügbar, sondern vorhersehbar zu machen, plant das Team diese Hintergrundarbeit in ein Nicht-Spitzenzeitfenster — 2 bis 4 Uhr nachts —, sodass Wartung und Benutzerverkehr niemals um dieselben Ressourcen konkurrieren.
Ergebnisse & Vorteile
- 700 Millionen Vektoren in Produktion, mit geplanter Kapazität für ~1,5 Milliarden. Die derzeitige Bereitstellung von Cốc Cốc umfasst rund 700 Millionen Vektoren in mehreren Produktionsanwendungsfällen, und das Team hat seine Infrastruktur so ausgelegt, dass sie problemlos über 1 Milliarde hinaus skaliert – mit einer geplanten Kapazität von etwa 1,5 Milliarden –, ohne die Retrieval-Ebene neu zu strukturieren.
- P90-Semantiksuchlatenz von 19,8 ms bei Spitzenlast. Bei normaler semantischer Suche unter Spitzenlast (34 RPS) hält Cốc Cốc einen P50 von 11,1 ms, P90 von 19,8 ms, P95 von 26,7 ms und P99 von 88,3 ms.
- Hybride Suche: P90 auf 32,1 ms gesenkt, womit ein latenzblockiertes Upgrade der Retrieval-Qualität in Produktion gebracht wurde. Bei Spitzenlast (166 RPS, etwa 67 RPS effektiv bei einer Cache-Trefferquote von 60 %) hält Cốc Cốc einen P50 von 17,1 ms, P90 von 32,1 ms, P95 von 41,6 ms und P99 von 126 ms.
- 99–100 % Recall online, 100 % Recall offline. HNSW liefert nutzerseitigen Diensten bei den getesteten Indizes die niedrigste Latenz bei nahezu vollständigem Recall, während FLAT Offline-Pipelines mit exakten Nächste-Nachbarn-Ergebnissen versorgt, sodass Batch-Ausgaben auf Ground Truth statt auf Näherungen basieren.
- 30 % der Suchanfragen werden inzwischen von der Milvus-gestützten semantischen Suche bedient – das erweitert die Abdeckung der KI-Suche (von 63 % auf 92 %) mit besseren Ergebnissen als die reine Stichwortsuche.
- Vektorsuche über Hunderte Millionen Vektoren bei einer Spitzenlast von 166 RPS ist jetzt eine Workload, gegen die das Team von Cốc Cốc entwickeln kann – eine Anwendungsklasse, die unter strengen Anforderungen an niedrige Latenz und hohen Durchsatz mit dem bisherigen Stack unerreichbar war.
Der strategische Nutzen liegt darin, dass Retrieval nicht länger der Engpass dafür ist, was Cốc Cốc ausliefern kann. Fünf verschiedene Systeme – Websuche, Anzeigen, Vorschläge, Targeting und internes RAG – laufen jetzt auf einer einzigen Retrieval-Grundlage, die das Team Ende-zu-Ende kontrolliert.
Ratschläge von Cốc Cốc für Teams, die KI-Suche in großem Maßstab aufbauen
Das Team von Cốc Cốc hat den gesamten Weg vom Proof of Concept bis zur landesweiten Produktion durchlaufen. Ihr Rat an Kollegen, die denselben Weg einschlagen:
- Klein anfangen, aber in Produktion anfangen. Bauen Sie einen Proof of Concept mit ein paar Millionen Vektoren – sagen wir mit drei Monaten Daten – und stellen Sie diesen Dienst in kleinem Maßstab vor echten Produktionsverkehr, bevor Sie auf ein oder zwei Jahre Daten hochskalieren. Überwachen Sie während des Wachstums kontinuierlich CPU- und RAM-Auslastung und skalieren Sie die Hardware nach dem, was Sie tatsächlich beobachten.
- Vergleichen Sie Indextypen und Konfigurationen mit Ihrer eigenen Workload. Übernehmen Sie keine Standardeinstellung. Bewerten Sie verschiedene Indextypen und verschiedene Konfigurationen innerhalb jedes Typs, führen Sie dann Belastungstests durch und messen Sie die P50-, P90- und P95-Latenz. So finden Sie die Konfiguration, die zu Ihrer Workload passt – und die Antwort ist für Online- und Offline-Pfade selten dieselbe.
- Geben Sie der Vektordatenbank eine eigene Hardware. Investieren Sie in dedizierte Serverknoten für die verteilte Vektordatenbank auf moderner Hardware. Die gemeinsame Nutzung der Infrastruktur mit anderen Diensten erzeugt betriebliche Probleme, die mit dem Wachstum zunehmen; dedizierte Knoten bieten eine besser skalierbare und wartbare Grundlage.
Wie geht es weiter
Die Milvus-Bereitstellung von Cốc Cốc läuft derzeit mit Version 2.5.21, und der nächste Schritt des Teams ist der Wechsel auf eine neuere Version, um die Verbesserungen zu bewerten – insbesondere bei Suchlatenz und Hardwareeffizienz – und neue Funktionen und Konfigurationen auszuprobieren. Über das Upgrade hinaus sucht das Team weiterhin nach Möglichkeiten, Vektorsuche in bestehenden und kommenden Produkten von Cốc Cốc einzusetzen.
Erste Schritte mit Milvus
Milvus ist die weltweit am weitesten verbreitete Open-Source-Vektordatenbank, die speziell für Vektorsuche in großem Maßstab entwickelt wurde – mit nativer Hybridsuche, einer vollständigen Palette an Indextypen und einer verteilten Architektur, die überall läuft, vom Laptop bis zu einem Kubernetes-Cluster in der Produktion. Sie hat über 45.000 GitHub-Sterne und 100 Millionen Docker-Pulls erreicht und unterstützt mehr als 10.000 Unternehmen und KI-native Firmen weltweit. Die neueste Version, Milvus 3.0, fügt eine lake-native Architektur hinzu, die Daten direkt aus dem Objektspeicher indiziert und abruft.
Egal, ob Sie KI-Suche, Anzeigen-Retrieval oder RAG entwickeln – Milvus bietet Ihnen dieselbe Retrieval-Grundlage, die auch Cốc Cốc antreibt. Starten Sie auf Milvus GitHub, lesen Sie die Milvus-Dokumentation oder treten Sie der Community auf Discord bei.
Zilliz Cloud ist eine vollständig verwaltete Vector-Lakebase, die vom Team hinter Milvus entwickelt wurde. Vollständig kompatibel mit der Milvus-API bietet sie bis zu 10× besseres Preis-Leistungs-Verhältnis mit ihrer proprietären Cardinal-Indizierungs-Engine sowie Sicherheit, Zuverlässigkeit, Skalierbarkeit auf Enterprise-Niveau und eine SLA von bis zu 99,99%.


