2016-05-13 2 views
0

J'ai lu plusieurs documents sur Raft et j'ai des informations contradictoires sur le commit. Je comprends qu'une entrée ne peut être validée que si elle est stockée sur la majorité des serveurs, mais y a-t-il d'autres conditions? J'ai lu qu'il est également obligatoire qu'une entrée du terme courant soit stockée dans chaque serveur, mais d'autres documents ne disent rien à ce sujet. De l'aide?RAFT: condition à terme pour valider une entrée

Répondre

2

Il n'est pas techniquement vrai qu'une entrée stockée sur une majorité de serveurs est validée. Il est vrai que le chef détermine qu'une entrée est validée une fois qu'il a été stocké sur une majorité de serveurs, mais seulement dans son terme actuel. Une entrée d'un autre terme peut être stockée sur une majorité de serveurs mais ne jamais être validée et en effet plus tard être écrasée par un autre leader. Ceci est illustré sur la figure 8 dans le papier Radeau. C'est pourquoi un leader doit s'assurer qu'une entrée de son terme actuel est validée avant de pouvoir considérer les entrées (supplémentaires) des termes précédents à valider. Une fois qu'un leader est élu, il est possible pour ce leader de répliquer les entrées d'un terme antérieur à une majorité de nœuds sans les engager. Si ce leader se bloque alors, un autre leader qui a des entrées d'un terme ultérieur peut être élu et écraser les entrées qui ont été stockées sur la majorité du cluster. C'est ce qui est montré dans la figure 8, et c'est la raison pour laquelle la définition technique de l'engagement est: Une entrée dans le terme actuel du leader est validée une fois qu'elle est stockée sur la majorité du cluster, et une fois une entrée du terme du leader est engagé toutes les entrées des termes précédents dans le journal du leader sont implicitement validées. Ce que cela signifie en pratique, c'est quand un leader est élu, il commet généralement une entrée no-op pour forcer un commit dans son terme courant. Le leader n'augmente pas commitIndex tant que l'entrée no-op n'est pas stockée sur une majorité de serveurs.