🚀 Essayez Zilliz Cloud, la version entièrement gérée de Milvus, gratuitement—découvrez des performances 10x plus rapides ! Essayez maintenant>>

milvus-logo
LFAI
  • Home
  • Blog
  • Milvus 2.0 Redéfinir la base de données vectorielle

Milvus 2.0 Redéfinir la base de données vectorielle

  • Engineering
August 01, 2021
Xiaofan Luan

C'est comme si c'était hier que nous avons posé la première ligne de code pour Milvus en octobre 2018. En mars 2021, après 19 itérations testées par plus de 1 000 utilisateurs dans le monde entier, nous avons lancé Milvus 1.0, notre première version officielle avec un support à long terme. En tant que base de données vectorielles open-source la plus populaire au monde, Milvus 1.0 a réussi à résoudre certains problèmes fondamentaux dans la gestion des vecteurs, tels que les opérations CRUD et la persistance des données. Cependant, au fur et à mesure que de nouveaux scénarios et de nouvelles exigences émergent, nous avons commencé à réaliser qu'il y avait encore beaucoup d'autres problèmes à résoudre. Cet article récapitule les observations que nous avons faites au cours des trois dernières années, les défis que Milvus 2.0 est censé relever et les raisons pour lesquelles Milvus 2.0 est considéré comme une meilleure solution à ces défis. Pour en savoir plus sur ce que Milvus 2.0 a à offrir, consultez les notes de mise à jour de Milvus 2.0.

Défis auxquels Milvus 1.x est confronté

Silo de données : Milvus 1.0 n'est capable que de traiter les encastrements vectoriels générés à partir de données non structurées et prend peu en charge les requêtes scalaires. La désagrégation du stockage des données dans sa conception entraîne la duplication des données et ajoute à la complexité du développement des applications, et la recherche hybride entre les données vectorielles et scalaires n'est pas satisfaisante en raison de l'absence d'un optimiseur unifié.

Dilemme entre rapidité et efficacité : Milvus 1.0 est un système en temps quasi réel, qui s'appuie sur une chasse d'eau régulière ou forcée pour assurer la visibilité des données. Cette approche ajoute à la complexité et à l'incertitude du traitement des données de flux à plusieurs niveaux. En outre, bien que cette approche d'insertion de lots soit censée améliorer l'efficacité du traitement, elle consomme toujours beaucoup de ressources. Il est donc nécessaire d'adopter une approche de chargement en vrac.

Manque d'évolutivité et d'élasticité : Milvus 1.0 s'appuie sur Mishards, une solution middleware de sharding, pour assurer l'évolutivité, et sur le stockage en réseau (NAS) pour la persistance des données. Cette architecture classique fondée sur le stockage partagé ne contribue pas beaucoup à l'évolutivité globale pour les raisons suivantes :

  1. Un seul nœud d'écriture est pris en charge dans Mishards et ne peut pas être mis à l'échelle.
  2. L'extensibilité des nœuds de lecture dans Mishards est mise en œuvre à l'aide d'un routage cohérent basé sur le hachage. Bien que le hachage cohérent soit facile à mettre en œuvre et permette de résoudre le problème de l'uniformité de la distribution des données, il n'est pas assez flexible dans l'ordonnancement des données et ne permet pas de résoudre le problème de l'inadéquation entre la taille des données et la puissance de calcul.
  3. Milvus 1.0 s'appuie sur MySQL pour gérer les métadonnées, mais la taille des requêtes et des ensembles de données qu'un serveur MySQL autonome est capable de traiter est assez limitée.

Manque de haute disponibilité : Nous avons observé que la plupart des utilisateurs de Milvus ont tendance à préférer la disponibilité à la cohérence, alors que Milvus 1.x manque de capacités telles que les répliques en mémoire et la reprise après sinistre, et n'est pas tout à fait à la hauteur en termes de haute disponibilité. Par conséquent, nous étudions la possibilité de sacrifier un certain degré de précision pour atteindre une plus grande disponibilité.

Des coûts prohibitifs : Milvus 1.0 s'appuie sur le NAS pour la persistance des données, dont le coût est généralement dix fois supérieur à celui d'un stockage local ou d'un stockage d'objets. La recherche vectorielle étant fortement tributaire des ressources informatiques et de la mémoire, les coûts élevés qu'elle engendre pourraient bien devenir un obstacle à la poursuite de l'exploration d'ensembles de données à grande échelle ou de scénarios commerciaux complexes.

Expérience utilisateur non intuitive :

  1. Un déploiement distribué compliqué entraîne des coûts opérationnels élevés.
  2. Il n'existe pas d'interface utilisateur graphique (GUI) bien conçue.
  3. Les API non intuitives sont devenues un frein au développement des applications.

La question de savoir s'il faut abandonner les correctifs ou repartir de zéro se pose avec acuité. Charles Xie, le père de Milvus, est convaincu que, tout comme de nombreux constructeurs automobiles traditionnels n'ont jamais pu transformer progressivement Tesla, Milvus doit changer la donne dans le domaine du traitement et de l'analyse des données non structurées pour prospérer. C'est cette conviction qui nous a incités à lancer Milvus 2.0, une base de données vectorielle refactorisée et native pour le cloud.

La création de Milvus 2.0

Principes de conception

En tant que base de données vectorielles cloud-native de nouvelle génération, Milvus 2.0 s'articule autour des trois principes suivants :

D'abord le cloud-native : Nous pensons que seules les architectures prenant en charge la séparation du stockage et du calcul peuvent évoluer à la demande et tirer pleinement parti de l'élasticité du nuage. Nous aimerions également attirer votre attention sur la conception microservice de Milvus 2.0, qui comprend la séparation de la lecture et de l'écriture, la séparation des données incrémentielles et historiques, et la séparation des tâches à forte intensité de CPU, de mémoire et d'IO. Les microservices permettent d'optimiser l'allocation des ressources pour une charge de travail hétérogène en constante évolution.

Les journaux en tant que données : Dans Milvus 2.0, le courtier en journaux sert de colonne vertébrale au système : Toutes les opérations d'insertion et de mise à jour des données doivent passer par le courtier en journaux, et les nœuds de travail exécutent les opérations CRUD en s'abonnant aux journaux et en les consommant. Cette conception réduit la complexité du système en déplaçant des fonctions essentielles telles que la persistance des données et le flashback vers la couche de stockage, et le log pub-sub rend le système encore plus flexible et mieux positionné pour une future mise à l'échelle.

Traitement unifié des lots et des flux : Milvus 2.0 met en œuvre l'architecture Lambda unifiée, qui intègre le traitement des données incrémentielles et historiques. Par rapport à l'architecture Kappa, Milvus 2.0 introduit le log backfill, qui stocke les snapshots et les index du journal dans le stockage objet afin d'améliorer l'efficacité de la reprise sur panne et les performances des requêtes. Pour diviser les données non délimitées (flux) en fenêtres délimitées, Milvus adopte un nouveau mécanisme de filigrane, qui découpe les données de flux en plusieurs paquets de messages en fonction de l'heure d'écriture ou de l'heure de l'événement, et maintient une chronologie permettant aux utilisateurs d'effectuer des requêtes en fonction de l'heure.

2.0 image 1.png 2.0 image 1.png

Architecture du système

Comme indiqué ci-dessus, la conception de Milvus 2.0 suit strictement les principes de séparation du stockage et du calcul et de séparation du plan de contrôle et du plan de données. Le système se décompose en quatre couches : la couche d'accès, le service de coordination, les nœuds de travail et le stockage.

Couche d'accès : L'interface : La couche d'accès est la couche frontale du système et le point de contact avec les utilisateurs. Elle est chargée de transmettre les demandes et de rassembler les résultats.

Service de coordination : Le service de coordination assigne des tâches aux nœuds de travail et fonctionne comme le cerveau du système. Il existe quatre types de coordinateurs : le coordinateur racine (root coord), le coordinateur de données (data coord), le coordinateur de requêtes (query coord) et le coordinateur d'index (index coord).

Nœuds de travail : Les bras et les jambes. Les nœuds de travail sont des exécutants muets qui suivent les instructions du service de coordination et répondent aux demandes de lecture/écriture de la couche d'accès. Il existe trois types de nœuds de travail : les nœuds de données, les nœuds d'interrogation et les nœuds d'index.

Stockage : Les os. Il existe trois types de stockage : le méta-stockage, le courtier en journaux et le stockage d'objets.

  • Mis en œuvre par etcd, le méta stockage est utilisé pour stocker des métadonnées telles que la collecte et le point de contrôle pour le service de coordination.
  • Implémenté par Pulsar, le log broker est utilisé principalement pour stocker les logs incrémentaux et implémenter des notifications asynchrones fiables.
  • Mis en œuvre par MinIO ou S3, le stockage d'objets est utilisé principalement pour stocker les instantanés de journaux et les fichiers d'index.

Voici le diagramme de l'architecture du système de Milvus 2.0 : 2.0 image 2.png2.0 image 2.png

Caractéristiques principales

Les coûts d'exploitation d'une base de données impliquent non seulement la consommation de ressources d'exécution, mais aussi les coûts d'apprentissage potentiels et les coûts d'exploitation et de maintenance. D'un point de vue pratique, plus une base de données est conviviale, plus elle est susceptible de réduire ces coûts potentiels. Depuis le premier jour du calendrier Milvus, la facilité d'utilisation est toujours placée en tête de notre liste, et la dernière version Milvus 2.0 a beaucoup à offrir en matière de réduction de ces coûts.

Toujours en ligne

La fiabilité des données et la durabilité des services sont les exigences de base d'une base de données, et notre stratégie est "fail cheap, fail small, and fail often".

  • L'expression "fail cheap" fait référence à la séparation du stockage et de l'informatique, qui rend la gestion de la reprise après défaillance d'un nœud simple et peu coûteuse.
  • "Fail small" fait référence à la stratégie "diviser pour régner", qui simplifie la conception en faisant en sorte que chaque service de coordination ne traite qu'une petite partie des données en lecture/écriture/incrémentales/historiques.
  • L'expression "échouer souvent" fait référence à l'introduction des tests de chaos, qui utilisent l'injection de fautes dans un environnement de test pour simuler des situations telles que des défaillances matérielles et des défaillances de dépendances et accélérer la découverte de bogues.

Recherche hybride entre données scalaires et vectorielles

Pour tirer parti de la synergie entre les données structurées et non structurées, Milvus 2.0 prend en charge les données scalaires et vectorielles et permet une recherche hybride entre elles. La recherche hybride aide les utilisateurs à trouver les voisins les plus proches qui correspondent à un critère de filtrage. Actuellement, Milvus prend en charge les opérations relationnelles telles que EQUAL, GREATER THAN et LESS THAN, ainsi que les opérations logiques telles que NOT, AND, OR et IN.

Cohérence réglable

En tant que base de données distribuée respectant le théorème PACELC, Milvus 2.0 doit faire un compromis entre la cohérence, la disponibilité et la latence. Dans la plupart des scénarios, accorder trop d'importance à la cohérence des données en production peut s'avérer inutile, car le fait de permettre à une petite partie des données d'être invisibles a peu d'impact sur le rappel global, mais peut améliorer de manière significative les performances des requêtes. Cependant, nous pensons que les niveaux de cohérence, tels que la cohérence forte, l'obsolescence limitée et la session, ont leur propre application unique. C'est pourquoi Milvus prend en charge la cohérence réglable au niveau de la requête. Si l'on prend l'exemple des tests, les utilisateurs peuvent avoir besoin d'une cohérence forte pour s'assurer que les résultats des tests sont absolument corrects.

Déplacement dans le temps

Les ingénieurs de données doivent souvent procéder à un retour en arrière des données pour corriger les données sales et les bogues de code. Les bases de données traditionnelles mettent généralement en œuvre le retour en arrière des données par le biais d'instantanés ou même d'un recyclage des données. Cela peut entraîner des frais généraux et des coûts de maintenance excessifs. Milvus conserve une chronologie pour toutes les opérations d'insertion et de suppression de données, et les utilisateurs peuvent spécifier un horodatage dans une requête pour récupérer une vue de données à un moment donné. Grâce au voyage dans le temps, Milvus peut également mettre en œuvre une sauvegarde ou un clonage léger des données.

SDK ORM Python

Le mapping relationnel objet (ORM) permet aux utilisateurs de se concentrer davantage sur le modèle commercial de niveau supérieur que sur le modèle de données sous-jacent, ce qui permet aux développeurs de gérer plus facilement les relations entre les collections, les champs et les programmes. Pour combler le fossé entre la preuve de concept (PoC) pour les algorithmes d'IA et le déploiement de la production, nous avons conçu les API ORM de PyMilvus, qui peuvent fonctionner avec une bibliothèque intégrée, un déploiement autonome, un cluster distribué, ou même un service en nuage. Grâce à un ensemble unifié d'API, nous offrons aux utilisateurs une expérience cohérente et réduisons les coûts de migration ou d'adaptation du code.

2.0 image 3.png 2.0 image 3.png

Outils de support

  • Milvus Insight est l'interface utilisateur graphique de Milvus qui offre des fonctionnalités pratiques telles que la gestion de l'état des clusters, la gestion des méta et l'interrogation des données. Le code source de Milvus Insight sera également ouvert en tant que projet indépendant. Nous recherchons d'autres contributeurs pour se joindre à cet effort.
  • Expérience "out-of-box" (OOBE), déploiement plus rapide : Milvus 2.0 peut être déployé à l'aide de helm ou de docker-compose.
  • Milvus 2.0 utilise Prometheus, une base de données de séries temporelles open-source, pour stocker les données de performance et de surveillance, et Grafana, une plateforme d'observabilité ouverte, pour la visualisation des mesures.

Regarder vers l'avenir

Rétrospectivement, nous pensons que l'architecture du système basée sur une application big data + IA est trop compliquée. La priorité absolue de la communauté Milvus a toujours été de rendre Milvus plus facile à utiliser. À l'avenir, le projet Milvus se concentrera sur les domaines suivants :

DB for AI : Outre les fonctions CRUD de base, Milvus, en tant que système de base de données, doit disposer d'un optimiseur de requêtes plus intelligent, de capacités de requêtes de données plus puissantes et de fonctions de gestion de données plus complètes. Notre travail pour la prochaine étape se concentrera sur les fonctions du langage de manipulation des données (DML) et les types de données qui ne sont pas encore disponibles dans Milvus 2.0, y compris l'ajout d'opérations de suppression et de mise à jour et la prise en charge des types de données de type chaîne de caractères.

AI for DB : Le réglage des paramètres tels que les types d'index, les configurations de système, la charge de travail de l'utilisateur et les types de matériel complique l'utilisation de Milvus et doit être évité autant que possible. Nous avons entrepris d'analyser la charge du système et de rassembler la fréquence d'accès aux données, et nous prévoyons d'introduire un réglage automatique à l'avenir pour réduire les coûts d'apprentissage.

Optimisation des coûts : Le plus grand défi de la recherche vectorielle est la nécessité de traiter des ensembles de données à grande échelle dans un laps de temps limité. Ce traitement est à la fois gourmand en CPU et en mémoire. L'introduction de l'accélération matérielle hétérogène GPU et FPGA au niveau de la couche physique peut réduire considérablement les frais généraux de l'unité centrale. Nous développons également des algorithmes d'indexation ANN hybrides sur disque et en mémoire pour réaliser des requêtes de haute performance sur des ensembles de données massifs avec une mémoire limitée. De plus, nous évaluons les performances des algorithmes d'indexation vectorielle open-source existants, tels que ScaNN et NGT.

Facilité d'utilisation : Milvus ne cesse d'améliorer sa facilité d'utilisation en fournissant des outils de gestion de clusters, des SDK dans plusieurs langues, des outils de déploiement, des outils opérationnels, etc.

Pour en savoir plus sur les plans de publication de Milvus, consultez la feuille de route de Milvus.

Félicitations à tous les contributeurs de la communauté Milvus, sans lesquels Milvus 2.0 n'aurait pas été possible. N'hésitez pas à soumettre un problème ou à contribuer votre code à la communauté Milvus !


À propos de l'auteur

Xiaofan Luan travaille actuellement chez Zilliz en tant que directeur de l'ingénierie et gère la R&D du projet Milvus. Il a 7 ans d'expérience professionnelle dans la construction de systèmes de base de données et de stockage. Après avoir obtenu son diplôme à l'université de Cornell, il a travaillé consécutivement chez Oracle, HEDVIG et Alibaba Cloud.

Try Managed Milvus for Free

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

Get Started

Like the article? Spread the word

Continuer à Lire