🚀 Testen Sie Zilliz Cloud, die vollständig verwaltete Milvus, kostenlos – erleben Sie 10x schnellere Leistung! Jetzt testen>>

milvus-logo
LFAI
  • Home
  • Blog
  • Milvus 2.0 definiert die Vektordatenbank neu

Milvus 2.0 definiert die Vektordatenbank neu

  • Engineering
August 01, 2021
Xiaofan Luan

Es ist erst gestern gewesen, als wir im Oktober 2018 die erste Codezeile für Milvus niederschrieben. Im März 2021, nach 19 Iterationen, die von mehr als 1.000 Nutzern auf der ganzen Welt getestet wurden, brachten wir Milvus 1.0 auf den Markt, unser erstes offizielles Release mit langfristigem Support. Als die weltweit beliebteste Open-Source-Vektordatenbank konnte Milvus 1.0 einige grundlegende Probleme bei der Vektorverwaltung lösen, wie CRUD-Operationen und Datenpersistenz. Mit dem Auftauchen neuer Szenarien und Anforderungen wurde uns jedoch klar, dass es noch viele weitere Probleme zu lösen gibt. Dieser Artikel bietet eine Zusammenfassung der Beobachtungen, die wir in den letzten drei Jahren gemacht haben, die Herausforderungen, die Milvus 2.0 angehen soll, und warum Milvus 2.0 als bessere Lösung für diese Herausforderungen angesehen wird. Um mehr darüber zu erfahren, was Milvus 2.0 zu bieten hat, lesen Sie die Milvus 2.0 Release Notes.

Herausforderungen, mit denen Milvus 1.x konfrontiert ist

Datensilos: Milvus 1.0 ist nur in der Lage, Vektoreinbettungen zu verarbeiten, die aus unstrukturierten Daten generiert wurden, und bietet kaum Unterstützung für skalare Abfragen. Die disaggregierte Datenspeicherung in seinem Design führt zu doppelten Daten und erhöht die Komplexität der Anwendungsentwicklung, und die hybride Suche zwischen Vektor- und Skalardaten ist aufgrund des Fehlens eines einheitlichen Optimierers unbefriedigend.

Dilemma zwischen Aktualität und Effizienz: Milvus 1.0 ist ein echtzeitnahes System, das sich auf regelmäßige oder erzwungene Flushs verlässt, um die Sichtbarkeit der Daten zu gewährleisten. Dieser Ansatz erhöht die Komplexität und Ungewissheit bei der Verarbeitung von Datenströmen auf einer Reihe von Ebenen. Außerdem verbraucht dieser Stapelverarbeitungsansatz, obwohl er die Verarbeitungseffizienz verbessern soll, immer noch viele Ressourcen. Daher ist ein Bulkload-Ansatz erforderlich.

Mangelnde Skalierbarkeit und Elastizität: Milvus 1.0 stützt sich auf Mishards, eine Sharding-Middleware-Lösung, um Skalierbarkeit zu erreichen, und auf Network-Attached Storage (NAS) für die Datenpersistenz. Diese klassische Architektur, die auf gemeinsamem Speicher aufbaut, trägt aus folgenden Gründen nicht viel zur Gesamtskalierbarkeit bei:

  1. In Mishards wird nur ein Schreibknoten unterstützt, der nicht skaliert werden kann.
  2. Die Skalierung der Leseknoten in Mishards wird durch konsistentes Hash-basiertes Routing realisiert. Obwohl konsistentes Hashing einfach zu implementieren ist und hilft, das Problem der Gleichmäßigkeit der Datenverteilung zu lösen, ist es bei der Datenplanung nicht flexibel genug und kann das Missverhältnis zwischen Datengröße und Rechenleistung nicht ausgleichen.
  3. Milvus 1.0 stützt sich auf MySQL, um Metadaten zu verwalten, aber die Abfragen und die Größe der Datensätze, die ein eigenständiger MySQL-Server verarbeiten kann, sind ziemlich begrenzt.

Fehlende Hochverfügbarkeit: Eine Beobachtung, die wir gemacht haben, ist, dass die meisten Milvus-Benutzer der Verfügbarkeit den Vorzug vor der Konsistenz geben, während Milvus 1.x Kapazitäten wie In-Memory-Replikate und Disaster-Recovery vermissen lässt und in Bezug auf Hochverfügbarkeit nicht ganz auf der Höhe ist. Daher untersuchen wir die Möglichkeit, ein gewisses Maß an Genauigkeit zu opfern, um eine höhere Verfügbarkeit zu erreichen.

Unverhältnismäßig hohe Kosten: Milvus 1.0 ist für die Datenpersistenz auf NAS angewiesen, deren Kosten in der Regel das Zehnfache eines lokalen oder Objektspeichers betragen. Da die Vektorsuche sehr rechen- und speicherintensiv ist, könnten die hohen Kosten ein Hindernis für die weitere Erforschung großer Datenmengen oder komplexer Geschäftsszenarien darstellen.

Unintuitive Benutzererfahrung:

  1. Die komplizierte verteilte Bereitstellung verursacht hohe Betriebskosten.
  2. Eine gut gestaltete grafische Benutzeroberfläche (GUI) ist nicht verfügbar.
  3. Unintuitive APIs haben sich zu einem Hemmschuh bei der Entwicklung von Anwendungen entwickelt.

Die Frage, ob man mit Patch weitermachen oder ganz von vorne anfangen soll, ist eine große Herausforderung. Charles Xie, der Vater von Milvus, ist der Meinung, dass Milvus, so wie viele traditionelle Autohersteller niemals Tesla weiterentwickeln könnten, zu einem "Game Changer" im Bereich der Verarbeitung und Analyse unstrukturierter Daten werden muss, um erfolgreich zu sein. Diese Überzeugung hat uns dazu bewogen, Milvus 2.0, eine überarbeitete Cloud-native Vektordatenbank, auf den Weg zu bringen.

Die Entstehung von Milvus 2.0

Gestaltungsprinzipien

Als unsere Cloud-native Vektordatenbank der nächsten Generation basiert Milvus 2.0 auf den folgenden drei Grundsätzen:

Cloud-nativ zuerst: Wir sind der Meinung, dass nur Architekturen, die eine Trennung von Speicherung und Berechnung unterstützen, bei Bedarf skalieren und die Elastizität der Cloud voll ausschöpfen können. Wir möchten Ihre Aufmerksamkeit auch auf das Microservice-Design von Milvus 2.0 lenken, das eine Trennung von Lese- und Schreibvorgängen, inkrementellen und historischen Daten sowie eine Trennung von CPU-, speicher- und IO-intensiven Aufgaben vorsieht. Microservices helfen bei der Optimierung der Ressourcenzuweisung für die sich ständig ändernde heterogene Arbeitslast.

Protokolle als Daten: In Milvus 2.0 dient der Log-Broker als Backbone des Systems: Alle Einfüge- und Aktualisierungsvorgänge von Daten müssen über den Log-Broker laufen, und Arbeitsknoten führen CRUD-Vorgänge aus, indem sie Protokolle abonnieren und konsumieren. Dieses Design reduziert die Systemkomplexität, indem Kernfunktionen wie Datenpersistenz und Flashback auf die Speicherebene verlagert werden, und Log-Pub-Sub macht das System noch flexibler und besser für zukünftige Skalierungen gerüstet.

Vereinheitlichte Batch- und Stream-Verarbeitung: Milvus 2.0 implementiert die einheitliche Lambda-Architektur, die die Verarbeitung der inkrementellen und historischen Daten integriert. Im Vergleich zur Kappa-Architektur führt Milvus 2.0 das Log-Backfill ein, das Log-Snapshots und Indizes im Objektspeicher speichert, um die Effizienz der Fehlerbehebung und die Abfrageleistung zu verbessern. Um unbegrenzte (Stream-)Daten in begrenzte Fenster aufzuteilen, setzt Milvus einen neuen Wasserzeichen-Mechanismus ein, der die Stream-Daten je nach Schreib- oder Ereigniszeit in mehrere Nachrichtenpakete aufteilt und eine Zeitleiste für zeitliche Abfragen bereithält.

2.0 image 1.png 2.0 Bild 1.png

Systemarchitektur

Wie bereits erwähnt, folgt das Design von Milvus 2.0 strikt den Prinzipien der Trennung von Speicherung und Verarbeitung sowie der Trennung von Kontroll- und Datenebene. Das System gliedert sich in vier Schichten: Zugriffsebene, Koordinatorendienst, Arbeitsknoten und Speicher.

Zugriffsschicht: Die Schnittstelle: Die Zugriffsschicht ist die Frontschicht des Systems und der Endpunkt für die Benutzer. Sie ist für die Weiterleitung von Anfragen und das Sammeln von Ergebnissen zuständig.

Koordinator-Dienst: Der Koordinatordienst weist den Arbeitsknoten Aufgaben zu und fungiert als Gehirn des Systems. Es gibt vier Koordinatorentypen: Stammkoordinator (Root Coord), Datenkoordinator (Data Coord), Abfragekoordinator (Query Coord) und Indexkoordinator (Index Coord).

Arbeiterknoten: Die Arme und Beine. Worker-Knoten sind stumme Ausführungsknoten, die den Anweisungen des Koordinationsdienstes folgen und auf die Lese-/Schreibanforderungen der Zugriffsschicht reagieren. Es gibt drei Arten von Worker-Knoten: Datenknoten, Abfrageknoten und Indexknoten.

Speicherung: Die Knochen. Es gibt drei Arten von Speicher: Metaspeicher, Log-Broker und Objektspeicher.

  • Der von etcd implementierte Metaspeicher dient zum Speichern von Metadaten wie z. B. Sammlungen und Prüfpunkten für den Koordinator-Dienst.
  • Der von Pulsar implementierte Log-Broker wird hauptsächlich zur Speicherung inkrementeller Protokolle und zur Implementierung zuverlässiger asynchroner Benachrichtigungen verwendet.
  • Der von MinIO oder S3 implementierte Objektspeicher wird hauptsächlich zum Speichern von Protokoll-Snapshots und Indexdateien verwendet.

Das folgende Diagramm zeigt die Systemarchitektur von Milvus 2.0: 2.0 image 2.png2.0 image 2.png

Wesentliche Merkmale

Die Kosten für den Betrieb einer Datenbank umfassen nicht nur den Ressourcenverbrauch zur Laufzeit, sondern auch die potenziellen Lernkosten sowie die Betriebs- und Wartungskosten. Je benutzerfreundlicher eine Datenbank ist, desto wahrscheinlicher ist es, dass sie solche potenziellen Kosten einspart. Seit dem ersten Tag des Milvus-Kalenders steht die Benutzerfreundlichkeit immer ganz oben auf unserer Liste, und das neueste Milvus 2.0 hat einiges zu bieten, um solche Kosten zu reduzieren.

Immer online

Datenzuverlässigkeit und Service-Nachhaltigkeit sind die Grundvoraussetzungen für eine Datenbank, und unsere Strategie lautet "Fail cheap, fail small, and fail often".

  • "Fail cheap" bezieht sich auf die Trennung von Speicherung und Datenverarbeitung, wodurch die Wiederherstellung bei einem Knotenausfall einfach und kostengünstig ist.
  • "Fail small" bezieht sich auf die "divide and conquer"-Strategie, die die Komplexität des Entwurfs dadurch vereinfacht, dass jeder Koordinatordienst nur einen kleinen Teil der Lese-/Schreib-/Inkrementaldaten/Historiendaten bearbeitet.
  • "Fail often" bezieht sich auf die Einführung von Chaostests, bei denen durch Fehlerinjektion in einer Testumgebung Situationen wie Hardwareausfälle und Abhängigkeitsfehler simuliert werden, um die Fehlererkennung zu beschleunigen.

Hybride Suche zwischen skalaren und vektoriellen Daten

Um die Synergie zwischen strukturierten und unstrukturierten Daten zu nutzen, unterstützt Milvus 2.0 sowohl skalare als auch Vektordaten und ermöglicht eine hybride Suche zwischen beiden. Die hybride Suche hilft dem Benutzer, die ungefähren nächsten Nachbarn zu finden, die einem Filterkriterium entsprechen. Derzeit unterstützt Milvus relationale Operationen wie EQUAL, GREATER THAN und LESS THAN sowie logische Operationen wie NOT, AND, OR und IN.

Abstimmbare Konsistenz

Als verteilte Datenbank, die sich an das PACELC-Theorem hält, muss Milvus 2.0 einen Kompromiss zwischen Konsistenz, Verfügbarkeit und Latenzzeit eingehen. In den meisten Szenarien kann eine Überbetonung der Datenkonsistenz in der Produktion zu viel des Guten sein, da die Unsichtbarkeit eines kleinen Teils der Daten nur geringe Auswirkungen auf den Gesamtabruf hat, aber die Abfrageleistung erheblich verbessern kann. Dennoch sind wir der Meinung, dass Konsistenzstufen wie Strong, Bounded Staleness und Session ihre eigene, einzigartige Anwendung haben. Daher unterstützt Milvus eine einstellbare Konsistenz auf Anfrageebene. Bei Tests zum Beispiel können Benutzer eine starke Konsistenz benötigen, um sicherzustellen, dass die Testergebnisse absolut korrekt sind.

Zeitreise

Dateningenieure müssen häufig ein Daten-Rollback durchführen, um unsaubere Daten und Codefehler zu beheben. Herkömmliche Datenbanken implementieren Daten-Rollbacks in der Regel durch Snapshots oder sogar Daten-Retrain. Dies kann übermäßige Gemeinkosten und Wartungskosten verursachen. Milvus verwaltet eine Zeitleiste für alle Einfüge- und Löschvorgänge von Daten, und Benutzer können einen Zeitstempel in einer Abfrage angeben, um eine Datenansicht zu einem bestimmten Zeitpunkt abzurufen. Mit der Zeitreise kann Milvus auch eine leichtgewichtige Datensicherung oder einen Datenklon implementieren.

ORM Python SDK

Das objektrelationale Mapping (ORM) ermöglicht es den Anwendern, sich mehr auf das übergeordnete Geschäftsmodell als auf das zugrunde liegende Datenmodell zu konzentrieren, wodurch es für Entwickler einfacher wird, Beziehungen zwischen Sammlungen, Feldern und Programmen zu verwalten. Um die Lücke zwischen dem Proof of Concept (PoC) für KI-Algorithmen und dem Produktionseinsatz zu schließen, haben wir die PyMilvus ORM-APIs entwickelt, die mit einer eingebetteten Bibliothek, einem eigenständigen Einsatz, einem verteilten Cluster oder sogar einem Cloud-Service arbeiten können. Mit einem einheitlichen Satz von APIs bieten wir den Benutzern eine konsistente Benutzererfahrung und reduzieren die Kosten für die Migration oder Anpassung von Code.

2.0 image 3.png 2.0 Bild 3.png

Unterstützende Tools

  • Milvus Insight ist die grafische Benutzeroberfläche von Milvus, die praktische Funktionen wie die Verwaltung des Clusterzustands, das Meta-Management und die Datenabfrage bietet. Der Quellcode von Milvus Insight wird als unabhängiges Projekt ebenfalls als Open Source zur Verfügung gestellt. Wir sind auf der Suche nach weiteren Mitwirkenden, die sich diesem Vorhaben anschließen.
  • Out-of-box-Erfahrung (OOBE), schnellere Bereitstellung: Milvus 2.0 kann mit helm oder docker-compose bereitgestellt werden.
  • Milvus 2.0 verwendet Prometheus, eine Open-Source-Zeitreihendatenbank, um Leistungs- und Überwachungsdaten zu speichern, und Grafana, eine offene Observability-Plattform, für die Visualisierung von Metriken.

Ein Blick in die Zukunft

Rückblickend sind wir der Meinung, dass die Systemarchitektur auf der Grundlage von Big Data + KI-Anwendung zu kompliziert ist. Die oberste Priorität der Milvus-Community war es immer, Milvus einfacher zu machen. In Zukunft wird sich das Milvus-Projekt auf die folgenden Bereiche konzentrieren:

DB für KI: Neben den grundlegenden CRUD-Funktionen muss Milvus als Datenbanksystem über einen intelligenteren Abfrageoptimierer, leistungsfähigere Datenabfragen und umfassendere Datenverwaltungsfunktionen verfügen. Unsere Arbeit für die nächste Phase wird sich auf die Funktionen der Datenmanipulationssprache (DML) und Datentypen konzentrieren, die in Milvus 2.0 noch nicht verfügbar sind, einschließlich des Hinzufügens von Lösch- und Aktualisierungsoperationen und der Unterstützung von String-Datentypen.

AI for DB: Die Einstellung von Parametern wie Index-Typen, Systemkonfigurationen, Benutzer-Workload und Hardware-Typen verkompliziert den Einsatz von Milvus und sollte so weit wie möglich vermieden werden. Wir haben uns daran gemacht, die Systemauslastung zu analysieren und die Zugriffshäufigkeit auf die Daten zu erfassen, und planen für die Zukunft die Einführung von Auto-Tuning, um die Lernkosten zu senken.

Kostenoptimierung: Die größte Herausforderung beim Vektor-Retrieval ist die Notwendigkeit, große Datensätze innerhalb eines begrenzten Zeitraums zu verarbeiten. Dies ist sowohl rechenintensiv als auch speicherintensiv. Die Einführung von heterogener GPU- und FPGA-Hardwarebeschleunigung auf der physikalischen Ebene kann den CPU-Overhead erheblich reduzieren. Wir entwickeln auch einen hybriden Algorithmus für die ANN-Indizierung auf der Festplatte und im Speicher, um Hochleistungsabfragen auf riesigen Datensätzen mit begrenztem Speicher zu realisieren. Darüber hinaus evaluieren wir die Leistung bestehender Open-Source-Vektorindizierungsalgorithmen wie ScaNN und NGT.

Benutzerfreundlichkeit: Milvus verbessert ständig seine Benutzerfreundlichkeit durch die Bereitstellung von Cluster-Management-Tools, SDKs in mehreren Sprachen, Deployment-Tools, Betriebs-Tools und mehr.

Um mehr über die Release-Pläne von Milvus zu erfahren, schauen Sie sich die Milvus-Roadmap an.

Ein großes Lob an alle, die zur Milvus-Community beigetragen haben, ohne die Milvus 2.0 nicht möglich gewesen wäre. Fühlen Sie sich frei, ein Problem einzureichen oder Ihren Code zur Milvus-Community beizutragen!


Über den Autor

Xiaofan Luan arbeitet jetzt bei Zilliz als Director of Engineering und leitet die Forschung und Entwicklung des Milvus-Projekts. Er hat 7 Jahre Berufserfahrung mit Schwerpunkt auf der Entwicklung von Datenbank-/Speichersystemen. Nach seinem Abschluss an der Cornell University hat er nacheinander bei Oracle, HEDVIG und Alibaba Cloud gearbeitet.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Weiterlesen