🚀 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
  • Radeau ou pas ? La meilleure solution pour assurer la cohérence des données dans les bases de données natives de l'informatique en nuage

Radeau ou pas ? La meilleure solution pour assurer la cohérence des données dans les bases de données natives de l'informatique en nuage

  • Engineering
May 16, 2022
Xiaofan Luan

Cover image Image de couverture

Cet article a été rédigé par Xiaofan Luan et transcréé par Angela Ni.

La réplication basée sur le consensus est une stratégie largement adoptée dans de nombreuses bases de données distribuées natives du cloud. Cependant, elle présente certaines lacunes et n'est certainement pas la solution miracle.

Cet article a pour but d'expliquer les concepts de réplication, de cohérence et de consensus dans une base de données distribuée et native pour le cloud, puis de préciser pourquoi les algorithmes basés sur le consensus tels que Paxos et Raft ne sont pas la solution miracle, et enfin de proposer une solution à la réplication basée sur le consensus.

Aller à :

Comprendre la réplication, la cohérence et le consensus

Avant d'approfondir les avantages et les inconvénients de Paxos et de Raft, et de proposer une stratégie de réplication de logs adaptée, nous devons d'abord démystifier les concepts de réplication, de cohérence et de consensus.

Notez que cet article se concentre principalement sur la synchronisation des données/logs incrémentaux. Par conséquent, lorsque l'on parle de réplication des données/logs, on se réfère uniquement à la réplication des données incrémentales, et non à celle des données historiques.

Réplication

La réplication est le processus qui consiste à faire plusieurs copies des données et à les stocker sur différents disques, processus, machines, clusters, etc. dans le but d'accroître la fiabilité des données et d'accélérer les requêtes. Dans la mesure où, lors de la réplication, les données sont copiées et stockées à plusieurs endroits, elles sont plus fiables en cas de défaillance d'un disque, d'une machine physique ou d'une grappe d'ordinateurs. En outre, les répliques multiples de données peuvent améliorer les performances d'une base de données distribuée en accélérant considérablement les requêtes.

Il existe différents modes de réplication, tels que la réplication synchrone/asynchrone, la réplication avec cohérence forte/éventuelle, la réplication leader-suiveur/décentralisée. Le choix du mode de réplication a un effet sur la disponibilité et la cohérence du système. Par conséquent, comme le propose le célèbre théorème CAP, l'architecte d'un système doit faire un compromis entre la cohérence et la disponibilité lorsque la partition du réseau est inévitable.

Cohérence

En bref, la cohérence dans une base de données distribuée fait référence à la propriété qui garantit que chaque nœud ou réplique a la même vue des données lors de l'écriture ou de la lecture des données à un moment donné. Pour une liste complète des niveaux de cohérence, lisez la documentation ici.

Pour clarifier, nous parlons ici de cohérence comme dans le théorème CAP, et non d'ACID (atomicité, cohérence, isolation, durabilité). La cohérence dans le théorème CAP se réfère à chaque nœud du système ayant les mêmes données alors que la cohérence dans ACID se réfère à un nœud unique appliquant les mêmes règles à chaque validation potentielle.

En général, les bases de données OLTP (traitement des transactions en ligne) requièrent une forte cohérence ou linéarité afin de garantir que

  • Chaque lecture peut accéder aux dernières données insérées.
  • Si une nouvelle valeur est renvoyée après une lecture, toutes les lectures suivantes, qu'elles soient effectuées sur le même client ou sur des clients différents, doivent renvoyer la nouvelle valeur.

L'essence de la linéarisation est de garantir la récence de plusieurs répliques de données - une fois qu'une nouvelle valeur est écrite ou lue, toutes les lectures suivantes peuvent voir la nouvelle valeur jusqu'à ce qu'elle soit écrasée ultérieurement. Un système distribué offrant la linéarisation peut éviter aux utilisateurs de garder un œil sur plusieurs répliques et peut garantir l'atomicité et l'ordre de chaque opération.

Le consensus

Le concept de consensus est introduit dans les systèmes distribués car les utilisateurs souhaitent que les systèmes distribués fonctionnent de la même manière que les systèmes autonomes.

Pour simplifier, le consensus est un accord général sur une valeur. Par exemple, Steve et Frank voulaient manger quelque chose. Steve a suggéré de prendre des sandwiches. Frank a accepté la suggestion de Steve et tous deux ont mangé des sandwiches. Ils sont parvenus à un consensus. Plus précisément, une valeur (les sandwiches) proposée par l'un d'entre eux est acceptée par les deux, et tous deux entreprennent des actions sur la base de cette valeur. De même, le consensus dans un système distribué signifie que lorsqu'un processus propose une valeur, tous les autres processus du système l'acceptent et agissent en fonction de cette valeur.

Consensus Le consensus

Réplication basée sur le consensus

Les premiers algorithmes basés sur le consensus ont été proposés en même temps que la réplication avec horodatage en 1988. En 1989, Leslie Lamport a proposé Paxos, un algorithme basé sur le consensus.

Ces dernières années, nous avons assisté à l'apparition d'un autre algorithme basé sur le consensus dans l'industrie - Raft. Il a été adopté par de nombreuses bases de données NewSQL grand public telles que CockroachDB, TiDB, OceanBase, etc.

Il est à noter qu'un système distribué ne supporte pas nécessairement la linéarisation même s'il adopte une réplication basée sur le consensus. Cependant, la linéarisation est une condition préalable à la construction d'une base de données distribuée ACID.

Lors de la conception d'un système de base de données, il convient de tenir compte de l'ordre de validation des journaux et des machines à états. Des précautions supplémentaires sont également nécessaires pour maintenir le bail de leader de Paxos ou de Raft et pour éviter un cerveau divisé en cas de partition du réseau.

Raft replication state machine Machine d'état de réplication Raft

Avantages et inconvénients

En effet, Raft, ZAB et le protocole de journalisation basé sur le quorum dans Aurora sont tous des variantes de Paxos. La réplication basée sur le consensus présente les avantages suivants :

  1. Bien que la réplication basée sur le consensus se concentre davantage sur la cohérence et la partition du réseau dans le théorème CAP, elle fournit une disponibilité relativement meilleure par rapport à la réplication traditionnelle leader-suiveur.
  2. Raft est une avancée qui a considérablement simplifié les algorithmes basés sur le consensus. Il existe de nombreuses bibliothèques Raft open-source sur GitHub (par exemple sofa-jraft).
  3. Les performances de la réplication par consensus peuvent satisfaire la plupart des applications et des entreprises. Avec la couverture des disques SSD haute performance et des cartes d'interface réseau (NIC) de plusieurs gigaoctets, le fardeau de la synchronisation de plusieurs répliques est allégé, ce qui fait des algorithmes Paxos et Raft le courant dominant de l'industrie.

On croit à tort que la réplication par consensus est la solution miracle pour assurer la cohérence des données dans une base de données distribuée. Or, ce n'est pas le cas. Les défis en matière de disponibilité, de complexité et de performance auxquels est confronté l'algorithme basé sur le consensus l'empêchent d'être la solution parfaite.

  1. Disponibilité compromise L'algorithme Paxos ou Raft optimisé dépend fortement de la réplique leader, qui n'a qu'une faible capacité à lutter contre les défaillances grises. Dans la réplication basée sur le consensus, une nouvelle élection de la réplique leader n'a pas lieu tant que le nœud leader ne répond pas pendant une longue période. Par conséquent, la réplication basée sur le consensus est incapable de gérer les situations où le nœud leader est lent ou lorsqu'un thrashing se produit.

  2. Complexité élevée Bien qu'il existe déjà de nombreux algorithmes étendus basés sur Paxos et Raft, l'émergence de Multi-Raft et Parallel Raft nécessite davantage de considérations et de tests sur la synchronisation entre les journaux et les machines d'état.

  3. Performances compromises À l'ère du cloud-native, le stockage local est remplacé par des solutions de stockage partagé comme EBS et S3 pour garantir la fiabilité et la cohérence des données. Par conséquent, la réplication par consensus n'est plus indispensable pour les systèmes distribués. De plus, la réplication par consensus s'accompagne d'un problème de redondance des données, car la solution et EBS possèdent plusieurs répliques.

Pour la réplication multi-centres de données et multi-cloud, la recherche de cohérence compromet non seulement la disponibilité mais aussi la latence, ce qui entraîne une baisse des performances. Par conséquent, la linéarisation n'est pas indispensable pour la tolérance aux sinistres multi-centres de données dans la plupart des applications.

Une stratégie de réplication des logs pour les bases de données distribuées et natives de l'informatique en nuage

Il est indéniable que les algorithmes basés sur le consensus, tels que Raft et Paxos, sont toujours les algorithmes courants adoptés par de nombreuses bases de données OLTP. Cependant, en observant les exemples du protocole PacificA, de Socrates et de Rockset, nous pouvons voir que la tendance est en train de changer.

Il existe deux principes majeurs pour une solution qui peut servir au mieux une base de données distribuée native dans le nuage.

1. La réplication en tant que service

Un microservice distinct dédié à la synchronisation des données est nécessaire. Le module de synchronisation et le module de stockage ne doivent plus être étroitement couplés au sein du même processus.

Par exemple, Socrates découple le stockage, le journal et le calcul. Il n'y a qu'un seul service de journalisation dédié (le service XLog au milieu de la figure ci-dessous).

Socrates architecture Architecture de Socrates

Le service XLog est un service individuel. La persistance des données est assurée par un stockage à faible latence. La zone d'atterrissage de Socrates est chargée de maintenir trois répliques à une vitesse accélérée.

Socrates XLog service Service XLog de Socrates

Le nœud leader distribue les logs au log broker de manière asynchrone, et évacue les données vers Xstore. Le cache SSD local peut accélérer la lecture des données. Une fois que la vidange des données est réussie, les tampons de la zone d'atterrissage peuvent être nettoyés. Il est évident que toutes les données des journaux sont divisées en trois couches : la zone d'atterrissage, le disque SSD local et le XStore.

2. Principe des poupées russes

L'une des façons de concevoir un système est de suivre le principe des poupées russes : chaque couche est complète et parfaitement adaptée à ce qu'elle fait, de sorte que d'autres couches peuvent être construites au-dessus ou autour d'elle.

Lors de la conception d'une base de données "cloud-native", nous devons exploiter intelligemment d'autres services tiers afin de réduire la complexité de l'architecture du système.

Il semble que nous ne puissions pas nous passer de Paxos pour éviter un point de défaillance unique. Cependant, nous pouvons encore simplifier considérablement la réplication des journaux en confiant l'élection du leader à Raft ou aux services Paxos basés sur Chubby, Zk et etcd.

Par exemple, l'architecture Rockset suit le principe des poupées russes et utilise Kafka/Kineses pour les journaux distribués, S3 pour le stockage et un cache SSD local pour améliorer les performances des requêtes.

Rockset architecture Architecture Rockset

L'approche Milvus

La cohérence ajustable dans Milvus est en fait similaire aux lectures suivies dans la réplication basée sur le consensus. La fonctionnalité "follower read" fait référence à l'utilisation de répliques "follower" pour entreprendre des tâches de lecture de données en partant du principe d'une cohérence forte. L'objectif est d'améliorer le débit de la grappe et de réduire la charge du leader. Le mécanisme qui sous-tend la fonction de lecture par les suiveurs consiste à demander l'index de validation du dernier journal et à fournir un service d'interrogation jusqu'à ce que toutes les données de l'index de validation soient appliquées aux machines d'état.

Cependant, la conception de Milvus n'a pas adopté la stratégie de suivi. En d'autres termes, Milvus ne demande pas l'index de validation à chaque fois qu'il reçoit une demande d'interrogation. Au lieu de cela, Milvus adopte un mécanisme tel que le filigrane dans Flink, qui notifie au nœud de requête l'emplacement de l'index de validation à intervalles réguliers. La raison de ce mécanisme est que les utilisateurs de Milvus ne sont généralement pas très exigeants en matière de cohérence des données et qu'ils peuvent accepter un compromis sur la visibilité des données pour améliorer les performances du système.

En outre, Milvus adopte également plusieurs microservices et sépare le stockage de l'informatique. Dans l'architecture Milvus, S3, MinIo et Azure Blob sont utilisés pour le stockage.

Milvus architecture Architecture Milvus

Résumé

De nos jours, un nombre croissant de bases de données natives du cloud font de la réplication des logs un service individuel. Ce faisant, le coût de l'ajout de répliques en lecture seule et de la réplication hétérogène peut être réduit. L'utilisation de plusieurs microservices permet une utilisation rapide de l'infrastructure en nuage mature, ce qui est impossible pour les bases de données traditionnelles. Un service de journalisation individuel peut s'appuyer sur une réplication basée sur le consensus, mais il peut également suivre la stratégie des poupées russes pour adopter divers protocoles de cohérence avec Paxos ou Raft afin de parvenir à la linéarisation.

Références

  • Lamport L. Paxos made simple [J]. ACM SIGACT News (Distributed Computing Column) 32, 4 (Whole Number 121, December 2001), 2001 : 51-58.
  • Ongaro D, Ousterhout J. In search of an understandable consensus algorithm[C]//2014 USENIX Annual Technical Conference (Usenix ATC 14). 2014 : 305-319.
  • Oki B M, Liskov B H. Viewstamped replication : A new primary copy method to support highly-available distributed systems[C]//Proceedings of the seventh annual ACM Symposium on Principles of distributed computing. 1988 : 8-17.
  • Lin W, Yang M, Zhang L, et al. PacificA : Replication in log-based distributed storage systems [J]. 2008.
  • Verbitski A, Gupta A, Saha D, et al. Amazon aurora : On avoiding distributed consensus for i/os, commits, and membership changes[C]//Proceedings of the 2018 International Conference on Management of Data. 2018 : 789-796.
  • Antonopoulos P, Budovski A, Diaconu C, et al. Socrates : The new sql server in the cloud[C]//Proceedings of the 2019 International Conference on Management of Data. 2019 : 1743-1756.

Like the article? Spread the word

Continuer à Lire