Supposons que vous avez 2 centres de données, chacun ayant une base de données distincte et que votre système permet aux clients de se connecter au premier ou au deuxième centre de données. Les deux datacenters doivent être synchronisés, il existe donc un lien réseau entre eux. Maintenant, imaginez que le lien réseau tombe en panne et que les bases de données ne puissent plus communiquer entre elles (c'est ce que signifie une partition réseau). Que faites-vous maintenant en tant que développeur d'applications?
Vous avez essentiellement 2 options:
1) Rendre le système disponible, qui par définition de la PAC signifie:
Chaque demande reçue par un non-défaut noeud [base de données] dans le système doit résulter en une réponse [sans erreur]
Notez que dans notre exemple, les deux nœuds sont non défaillants (ils sont opérationnels). En d'autres termes, vous pouvez autoriser tous les clients des deux datacenters à écrire et lire des données mais vous perdez la cohérence (voir ci-dessous pour la définition), car les écritures dans une base de données ne seront pas visibles dans une autre base de données. 2) Rendre le système cohérent (notez qu'il n'a rien à voir avec la cohérence ACID), ce qui, par définition de CAP, signifie linéarisabilité, ce qui signifie que si une écriture se produit, elle doit être vue par tout le système (aucun noeud ne doit voir l'état précédent).
Dans notre cas, il vous faut rejeter les lectures et les écritures d'un des centres de données, de sorte qu'un seul centre de données devient opérationnel. Un tel système n'est pas inutile du tout et vous ne perdez pas la tolérance de partition, puisque vous pouvez rediriger tous vos clients vers la base de données opérationnelle.
Il y a beaucoup de confusion autour du théorème de la PAC et je vous recommande de lire un excellent billet de blog par Martin Kleppmann qui m'a aidé à comprendre beaucoup de choses sur le sujet: https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html
"si le partitionnement de données est également implicite, au moins certaines parties des données sont connues pour être à jour et peuvent être retournées tout en satisfaisant à l'exigence de cohérence. " Je pense que la confusion fondamentale est ici. Vous dites que certaines données sont connues pour être à jour et peuvent donc être retournées .... mais au cours d'une partition réseau arbitraire, comment cela peut-il être connu? Vous pouvez le savoir à partir d'une vue de dieu, mais les machines distribuées réelles ne peuvent pas. – GManNickG