Que sont les vecteurs de version?
Mes amis, j'apprends actuellement les systèmes de données distribués via le livre "Designing Data-Intensive Applications".
Je pense avoir une assez bonne compréhension de la manière dont les numéros de version dans un système de réplique unique permettent au serveur de détecter les écritures simultanées *. L'auteur commence par cet exemple car une fois que vous comprenez le système de réplique unique, étendre cette compréhension à un système répliqué multi-leader ou sans leader est censé être évident, mais ce n'est pas du tout évident pour moi.
Comment fonctionne le numéro de version dans un système où plusieurs réplicas peuvent gérer les demandes d'écriture? En d'autres termes, que sont les vecteurs de version ?
*Dans un système de réplique unique, chaque écriture est accompagnée d'un numéro de version. Ce numéro de version est la version des données sur laquelle l'écriture est basée. Si une écriture est basée sur la version 1 des données pour cette clé et que la version 2 existe déjà, nous savons que l'écriture entrante est concurrente avec la version 2. L'écriture entrante ne peut écraser que les données qui étaient dans la version 1, car elle ne le fait pas connaître les données de la version 2. Par exemple, la version 1 est [œufs], la version 2 est [œufs] et [lait]. L'écriture entrante veut mettre à jour cette clé en [oeufs, bacon]. La version 3 de cette clé deviendra [œufs, bacon] et [lait]. L'écriture entrante ne peut pas écraser [milk] car elle ne savait même pas que [milk] était une valeur dans la clé.
Réponses
Les vecteurs de version permettent à chaque nœud d'un cluster de communiquer son numéro de version locale à tous les autres nœuds d'un cluster. Ils sont également connus sous le nom d'horloges vectorielles.
En substance, lorsqu'un nœud A passe un message à un autre nœud B, A inclut dans ce message ce qu'il sait sur le numéro de version de tous les nœuds du cluster. Comme il contient des valeurs pour tous les autres nœuds, il s'agit d'un tableau, ou vecteur, de numéros de version. Le nœud B utilise ces informations pour mettre à jour ce qu'il sait sur les numéros de version du cluster. Il peut utiliser ces informations pour élaborer un ordre global des événements de l'ensemble du cluster.
À son tour, le nœud B inclut ces informations mises à jour dans les messages qu'il envoie à d'autres nœuds, y compris au nœud A.
Recherchez une horloge vectorielle. Il existe de nombreuses explications, à la fois théoriques et pratiques.