Maison >interface Web >js tutoriel >Modèles de cohérence et réplicache
Le modèle de cohérence est un ensemble de réglementations sur le degré de cohérence qui sera fourni dans un système distribué. Parmi les articles précédents, il y a des informations sur le compromis entre la latence et la cohérence dans la théorie PACELC, et sur le degré de cohérence qui sera fourni en fonction de ce compromis.
Replicache, évoqué dans le post précédent, est également un type de système distribué. On dit que Replicache suit la cohérence causale.
Source
Cohérence qui vous permet de toujours lire les valeurs par ordre chronologique. Toutes les lectures effectuées après l'écriture de la valeur liront toujours cette valeur. Pour satisfaire cela, deux conditions sont nécessaires. Il existe une horloge globale partagée par tous les nœuds et doit y être synchronisée, et l'écriture doit être effectuée immédiatement.
w(x)a : Écrivez la valeur a dans x, r(x)a : Lisez la valeur a à partir de x
Lorsque w(x)a se produit dans le nœud 1 au temps t et que r(x) se produit dans le nœud 2 après t delta (0,0000000000000001s), le nœud 2 doit lire la valeur a.
Une horloge globale doit exister pour sérialiser l'opération afin que l'opération ne soit pas effectuée au même moment t, et l'écriture doit être effectuée immédiatement pour que la valeur écrite soit lue à l'heure t delta.
Mais c'est en réalité impossible. Par conséquent, la stricte cohérence existe en tant que théorie.
Si une stricte cohérence est respectée dans les situations ci-dessous
La bonne réponse est la suivante.
Le mot-clé principal de la cohérence séquentielle est « Ordre global ». Toutes les opérations d'écriture/lecture doivent se comporter comme s'il existait une seule séquence unifiée. De plus, les opérations effectuées par chaque processus (client) doivent être exécutées dans cet ordre.
Dans le cas ci-dessous, quelles valeurs p3 et p4 peuvent-ils lire ?
Ce qui suit est identique à la cohérence stricte, donc la cohérence séquentielle est également satisfaite.
Vous pouvez trouver l'ordre global ci-dessous, donc la cohérence séquentielle est correcte.
Ordre global : w(x)a, r(x)a, w(x)b, r(x)b
Cependant, dans le cas ci-dessous, a est écrit avant b, mais est lu plus tard. Dans ce cas, la cohérence séquentielle n'est pas satisfaite.
Causal signifie relation de cause à effet. "Ça arrive-avant (→)" Il est important de comprendre qu'il s'agit d'une relation.
A → B est valable dans les cas suivants.
La cohérence causale est une règle dans laquelle cette relation de cause à effet est visible dans tous les nœuds.
Le cas ci-dessous est la cohérence causale.
Les seules relations « arrive avant » que l'on peut trouver ici sont w(x)a → r(x)a et w(x)b → r(x)b, qui sont satisfaites par tous les processus. Il est normal que P3 lise b en premier. En effet, les deux opérations d'écriture sont indépendantes, il n'y a donc pas de relation de cause à effet de w(x)a → w(x)b.
Ce qui suit n’établit pas de cohérence causale. La raison en est qu'il existe une relation de cause à effet de w(x)a → w(x)c, et c est lu avant a dans P3.
Éventuel C'est une règle qui (éventuellement) devient cohérente. À un moment donné, lorsqu’il n’y a plus d’opérations d’écriture et que le réseau se stabilise, tous les nœuds finiront par voir la même valeur. C'est une convention très limitée.
On dit que Replicache suit la cohérence causale. Il s’agit d’une cohérence causale légèrement plus forte, alors découvrons-le plus tard.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!