web-dev-qa-db-fra.com

Théorème CAP - Disponibilité et tolérance de partition

Bien que j'essaie de comprendre la "disponibilité" (A) et la "tolérance de partition" (P) dans CAP, j'ai eu du mal à comprendre les explications de divers articles.

J'ai le sentiment que A et P peuvent aller ensemble (je sais que ce n'est pas le cas et c'est pourquoi je ne comprends pas!).

Expliquant en termes simples, que sont A et P et la différence entre eux?

158
learninghuman

La cohérence signifie que les données sont les mêmes sur l'ensemble du cluster. Vous pouvez donc lire ou écrire de/vers n'importe quel nœud et obtenir les mêmes données.

La disponibilité signifie la possibilité d'accéder au cluster même si un nœud du cluster tombe en panne.

La tolérance de partition signifie que le cluster continue à fonctionner même s'il existe une "partition" (coupure de communication) entre deux nœuds (les deux nœuds sont actifs mais ne peuvent pas communiquer).

Pour obtenir à la fois la disponibilité et la tolérance de partition, vous devez abandonner la cohérence. Considérez si vous avez deux nœuds, X et Y, dans une configuration maître-maître. Il existe maintenant une rupture entre la communication réseau entre X et Y, de sorte qu'ils ne peuvent pas synchroniser les mises à jour. À ce stade, vous pouvez soit:

A) Laisser les nœuds se désynchroniser (en abandonnant la cohérence), ou

B) Considérez le cluster comme étant "en panne" (abandon de la disponibilité)

Toutes les combinaisons disponibles sont:

  • [~ # ~] ca [~ # ~] - les données sont cohérentes entre tous les nœuds - tant que tous les nœuds sont en ligne - et vous pouvez lire/écrivez à partir de n'importe quel nœud et assurez-vous que les données sont identiques, mais si vous développez une partition entre nœuds, les données seront désynchronisées (et ne seront pas resynchronisées une fois la partition résolue).
  • [~ # ~] cp [~ # ~] - les données sont cohérentes entre tous les nœuds et maintiennent la tolérance de partition (empêchant la désynchronisation des données) en devenant indisponible lorsque un nœud tombe en panne.
  • [~ # ~] ap [~ # ~] - les noeuds restent en ligne même s'ils ne peuvent pas communiquer entre eux et vont resynchroniser les données une fois la partition est résolu, mais vous n'êtes pas assuré que tous les nœuds auront les mêmes données (pendant ou après la partition)

Notez que les systèmes de CA n'existent pratiquement pas (même si certains systèmes le prétendent).

308
Chris Heald

Considérer P en termes égaux avec C et A est un peu une erreur, plutôt que la notion de "2 sur 3" parmi C, A, P est trompeuse. La manière la plus succincte d’expliquer le théorème CAP est la suivante: "Dans un magasin de données réparti, au moment de la partition réseau, vous devez choisir la cohérence ou la disponibilité et ne pouvez pas obtenir les deux". Les systèmes NoSQL plus récents tentent de se concentrer sur la disponibilité, alors que les bases de données ACID traditionnelles étaient davantage axées sur la cohérence.

Vous ne pouvez vraiment pas choisir CA, la partition réseau n'est pas quelque chose que quelqu'un voudrait avoir, c'est simplement la réalité indésirable d'un système distribué, les réseaux peuvent échouer. La question est quel compromis choisissez-vous pour votre application lorsque cela se produit. Cet article de l'homme qui a formulé ce terme pour la première fois semble expliquer cela très clairement.

28
jayadev

Voici comment je parle de la PAC, en particulier de P.

L'AC n'est possible que si vous êtes d'accord avec une base de données monolithique à serveur unique (peut-être avec la réplication mais toutes les données d'un "bloc d'échec" - les serveurs ne sont pas considérés comme partiellement en panne).

Si votre problème nécessite une montée en puissance, une distribution distribuée et plusieurs serveurs, des partitions réseau peuvent se produire. Vous avez déjà besoin de P. Peu de problèmes que j'aborde sont sujets à des paradigmes à serveur unique toujours (ou, comme Stonebraker l'a dit, "distribué est un enjeu de table"). Si vous pouvez trouver un problème d'autorité de certification, des solutions comme un SGBDR classique non évolutif offrent de nombreux avantages.

Pour moi, rare: nous passons donc à la discussion AP vs CP.

Vous ne choisissez entre les opérations AP et CP que lorsque vous avez une partition. Si le réseau et le matériel fonctionnent correctement, vous obtenez votre gâteau et vous le mangez aussi.

Discutons de la distinction AP/CP.

AP - lorsqu'il existe une partition réseau, laissez les parties indépendantes fonctionner librement.

CP - lorsqu'il existe une partition réseau, arrêtez les nœuds ou interdisez les lectures et les écritures afin d'éviter les pannes déterministes.

J'aime les architectures qui peuvent faire les deux, parce que certains problèmes sont AP et d'autres sont CP - et que certaines bases de données peuvent faire les deux. Parmi les solutions CP et AP, il existe également des subtilités.

Par exemple, dans un ensemble de données AP, vous avez la possibilité à la fois de lectures incohérentes et de générer des conflits d'écriture - il s'agit de deux modes AP possibles différents. Votre système peut-il être configuré pour des points d'accès avec une disponibilité de lecture élevée, mais interdit les conflits d'écriture? Ou bien votre système AP peut-il accepter les conflits d’écriture, avec un système de résolution puissant et flexible? Aurez-vous besoin des deux à la fin, ou pouvez-vous choisir un système qui n'en a qu'un?

Dans un système CP, combien d’indisponibilité obtenez-vous avec de petites partitions (serveur unique), le cas échéant? Une réplication plus importante peut augmenter l'indisponibilité dans un système de PC, comment le système gère-t-il ces compromis?

Ce sont toutes des questions à poser avec CP vs AP.

La publication "12 ans plus tard" de Brewer est une excellente lecture dans ce domaine. Je pense que cela fait avancer le débat de la PAC avec clarté et le recommande vivement.

http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed

17
Brian Bulkowski

CAP Theorem

Cohérence:

Il est garanti qu'une lecture renvoie l'écriture la plus récente (comme ACID) pour un client donné. Si une requête quelconque entre ce moment-là, vous devez attendre la fin de la synchronisation des données entre les nœuds.


Disponibilité:

chaque nœud (en cas d'échec) exécute toujours des requêtes et doit toujours répondre aux requêtes. Peu importe qu’il retourne ou non la dernière copie.


Tolérance de partition:

Le système continuera à fonctionner en cas de création de partitions réseau.


En ce qui concerne [~ # ~] ap [~ # ~] , la disponibilité (toujours accessible) peut exister avec ( Cassendra ) ou sans ( [~ # ~] rdbms [~ # ~] ) tolérance de partition

source de l'image

8
mrsrinivas

Cohérence - Lorsque nous envoyons la demande de lecture, si elle renvoie le résultat, elle devrait renvoyer l’écriture la plus récente donnée par la demande du client. Disponibilité - Votre demande de lecture/écriture doit toujours aboutir. Tolérance de partitionnement - En cas de partition réseau (problème de communication entre certaines machines), le système doit toujours fonctionner.

Dans une distribution distribuée, il y a des chances que la partition réseau se produise et nous ne pouvons pas éviter le "P" de CAP. Nous avons donc choisi entre "cohérence" et "disponibilité".

http://bigdatadose.com/understanding-cap-theorem/

0
rajnish

J’ai le sentiment que la tolérance aux partitions n’est expliquée correctement dans aucune des réponses. Par conséquent, expliquer simplement les choses plus en détail

[~ # ~] c [~ # ~] : (linéarisation ou consistance forte) signifie à peu près

Si l'opération B a démarré après la fin de l'opération A, l'opération B doit afficher le système dans le même état qu'à la fin de l'opération A ou dans un état plus récent (mais jamais ancien).

[~ # ~] a [~ # ~] :

“Chaque demande reçue par un nœud [base de données] non défaillant du système doit donner lieu à une réponse [sans erreur]”. Il n’est pas suffisant pour un nœud de pouvoir traiter la requête: tout nœud non défaillant doit pouvoir le gérer. De nombreux systèmes dits "à haute disponibilité" (c'est-à-dire à faible temps d'indisponibilité) ne répondent pas à cette définition de la disponibilité.

[~ # ~] p [~ # ~] :

La tolérance de partition (terriblement mal nommée) signifie que vous communiquez via un réseau asynchrone susceptible de retarder ou de supprimer des messages. Internet et tous nos centres de données ont cette propriété, vous n’avez donc pas vraiment le choix.

Source: Génial Martin Kleppmann's travail

Juste pour prendre un exemple: Cassandra peut au maximum être un système AP. Mais si vous le configurez pour lire ou écrire en fonction de Quorum, il ne restera pas disponible pour le CAP (disponible selon la définition du Théorème de la PAC) et n’est que le système P.

0
Anurag Sharma