Réplique en mémoire
Cette rubrique présente le mécanisme de réplique en mémoire (réplication) de Milvus qui permet de répliquer plusieurs segments dans la mémoire de travail afin d'améliorer les performances et la disponibilité.
Pour plus d'informations sur la configuration des répliques en mémoire, voir Configurations relatives aux nœuds de requête.
Vue d'ensemble
Disponibilité des répliques
Avec les répliques en mémoire, Milvus peut charger le même segment sur plusieurs nœuds de requête. Si un nœud d'interrogation a échoué ou est occupé par une demande de recherche en cours lorsqu'un autre arrive, le système peut envoyer de nouvelles demandes à un nœud d'interrogation inactif qui dispose d'une réplication du même segment.
Performances
Les répliques en mémoire vous permettent d'exploiter les ressources supplémentaires de l'unité centrale et de la mémoire. C'est très utile si vous avez un ensemble de données relativement petit mais que vous souhaitez augmenter le débit de lecture avec des ressources matérielles supplémentaires. Le QPS (query per second) et le débit peuvent être considérablement améliorés.
Disponibilité
Les répliques en mémoire permettent à Milvus de récupérer plus rapidement si un nœud de requête tombe en panne. Lorsqu'un nœud d'interrogation tombe en panne, le segment ne doit pas être rechargé sur un autre nœud d'interrogation. Au lieu de cela, la demande de recherche peut être renvoyée immédiatement à un nouveau nœud d'interrogation sans avoir à recharger les données. Grâce à la gestion simultanée de plusieurs répliques de segments, le système est plus résistant en cas de basculement.
Concepts clés
Les répliques en mémoire sont organisées en groupes de répliques. Chaque groupe de répliques contient des répliques en nuage. Chaque réplique de l'ensemble a une réplique de flux et une réplique historique qui correspondent aux segments croissants et scellés de l'ensemble (c.-à-d. le canal DML).
Illustration du fonctionnement des répliques en mémoire
Groupe de répliques
Un groupe de répliques est constitué de plusieurs nœuds de requête chargés de gérer les données historiques et les répliques.
Réplique en nuage
Un réplica shard se compose d'un réplica en continu et d'un réplica historique, tous deux appartenant au même shard. Le nombre de répliques d'un groupe de répliques est déterminé par le nombre de schémas d'une collection donnée.
Réplique en continu
Une réplique en continu contient tous les segments croissants du même canal DML. D'un point de vue technique, une réplique en continu ne doit être servie que par un seul nœud de requête dans une réplique.
Réplique historique
Une réplique historique contient tous les segments scellés du même canal DML. Les segments scellés d'une réplique historique peuvent être distribués sur plusieurs nœuds de requête au sein du même groupe de répliques.
Chef de tesson
Un chef de groupe est le nœud de requête qui sert la réplique de flux dans un groupe de répliques.
Détails de la conception
Équilibre
Un nouveau segment qui doit être chargé sera attribué à plusieurs nœuds d'interrogation différents. Une demande de recherche peut être traitée une fois qu'au moins une réplique a été chargée avec succès.
Recherche
Cache
Le proxy maintient un cache qui associe les segments aux nœuds d'interrogation et le met à jour périodiquement. Lorsque le proxy reçoit une demande, Milvus récupère tous les segments scellés qui doivent faire l'objet d'une recherche dans le cache et tente de les affecter aux nœuds d'interrogation de manière équilibrée.
Pour les segments en croissance, le proxy maintient également un cache canal-nœud d'interrogation et envoie des demandes aux nœuds d'interrogation correspondants.
Basculement
Les caches du proxy ne sont pas toujours à jour. Certains segments ou canaux peuvent avoir été déplacés vers d'autres nœuds de requête lorsqu'une requête arrive. Dans ce cas, le proxy recevra une réponse d'erreur, mettra à jour le cache et essaiera de l'attribuer à un autre nœud de recherche.
Un segment sera ignoré si le mandataire ne le trouve toujours pas après avoir mis à jour le cache. Cela peut se produire si le segment a été compacté.
Si le cache n'est pas précis, le proxy peut manquer certains segments. Les nœuds de requête avec des canaux DML (segments croissants) renvoient des réponses de recherche avec une liste de segments fiables que le proxy peut comparer et avec lesquels il peut mettre à jour le cache.
Amélioration
Le mandataire ne peut pas attribuer les demandes de recherche aux nœuds de requête de manière totalement égale et les nœuds de requête peuvent disposer de ressources différentes pour répondre aux demandes de recherche. Pour éviter une distribution de ressources à longue queue, le mandataire attribue des segments actifs sur d'autres nœuds de requête à un nœud de requête inactif qui dispose également de ces segments.