Maison > Article > Périphériques technologiques > Un algorithme de consensus que les systèmes distribués doivent connaître : Raft
L'algorithme Raft
est le premier choix pour le développement de systèmes distribuésAlgorithme de consensus
. Par exemple, Etcd et Consul sont désormais populaires. Raft 算法
是分布式系统开发首选的共识算法
。比如现在流行 Etcd、Consul。
如果掌握
了这个算法,就可以较容易地处理绝大部分场景的容错
和一致性
需求。比如分布式配置系统、分布式 NoSQL 存储等等,轻松突破系统的单机限制。
Raft 算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。
跟随者(Follower):普通群众
,默默接收和来自领导者的消息,当领导者心跳信息超时的时候,就主动站出来,推荐自己当候选人。
候选人(Candidate):候选人
将向其他节点请求投票 RPC 消息,通知其他节点来投票,如果赢得了大多数投票选票,就晋升当领导者。
领导者(Leader):霸道总裁
Une fois que vous maîtrisez cet algorithme, vous pouvez facilement gérer la plupart des scènes. text-indent: 0px;">Tolérance aux pannes
etExigences de cohérence
. Par exemple, les systèmes de configuration distribués, le stockage NoSQL distribué, etc. peuvent facilement dépasser les limitations du système liées à une seule machine.
L'algorithme Raft parvient à un consensus sur une série de valeurs et à une cohérence dans les journaux de chaque nœud à travers toutes les méthodes basées sur le leader.
Les gens ordinaires
, reçoivent silencieusement les messages des dirigeants, lorsque les informations sur le rythme cardiaque du candidat expirent, il prendra l'initiative de se présenter comme candidat.
Candidat : Les candidats
demanderont des messages RPC de vote aux autres nœuds pour informer les autres nœuds de voter. S'ils remportent la majorité des votes, ils seront promus au rang de leader.
Leader : Président autoritaire
, tout m'est soumis. Traitez les demandes d'écriture, gérez la réplication des journaux et envoyez en permanence des informations de battement de cœur pour informer les autres nœuds que « Je suis le leader, je suis toujours en vie et vous ne voulez pas » lancer une nouvelle élection sans avoir à trouver un nouveau leader à remplacer. moi. 3. Système à nœud unique
3.1 Serveur de base de donnéesServeur de base de données
3.2 Client
Le cercle vert plein à gauche est le client et le cercle bleu plein à droite est le nœud a (Nœud a). Le terme représente la durée du mandat, qui sera discuté plus tard.Client
🎜🎜3.3 Le client envoie des données au serveur🎜🎜🎜Le client envoie une opération de mise à jour au serveur à nœud unique, en définissant la valeur stockée dans la base de données sur 8. Dans un environnement autonome (nœud de serveur unique), la valeur que le client obtient du serveur est également 8. La cohérence est très facile à assurer. 🎜🎜🎜🎜🎜Le client envoie des données au serveur🎜🎜🎜3.4 Comment assurer la cohérence entre plusieurs nœuds ? 🎜🎜🎜Mais s'il y a plusieurs nœuds de serveur, comment assurer la cohérence ? Par exemple, il y a trois nœuds : a, b, c. Comme indiqué ci-dessous. Ces trois nœuds forment un cluster de bases de données. Lorsque le client effectue des opérations de mise à jour sur ces trois nœuds, comment s'assurer que les valeurs stockées dans les trois nœuds sont cohérentes ? Il s'agit d'un problème de cohérence distribuée. L'algorithme Raft est là pour résoudre ce problème. Bien entendu, il existe d’autres protocoles qui peuvent également garantir cela. Cet article se concentre uniquement sur l’algorithme Raft. 🎜Dans un cluster multi-nœuds, comment l'algorithme Raft garantit-il qu'il n'y a qu'un seul leader dans le cluster en même temps dans des circonstances anormales telles qu'une panne de nœud et des erreurs de partition ? Commençons par expliquer le processus d’élection des dirigeants par l’algorithme Raft.
Dans l'état initial, tous les nœuds du cluster sont des suiveurs.
Comme le montre la figure ci-dessous, il y a trois nœuds (Node) a, b et c, et le terme (Term) est 0.
État initial
L'algorithme Raft implémente la fonction de délai d'attente aléatoire, et l'intervalle de délai d'attente pour chaque nœud pour attendre les informations de battement de cœur du nœud leader est aléatoire. Par exemple, le délai d'attente du nœud A est de 150 ms, celui du nœud B est de 200 ms et celui du nœud C est de 300 ms. Ensuite, un délai d'attente expire d'abord. Tout d'abord, il expire car il n'attend pas les informations de battement de cœur du leader. Comme le montre la figure ci-dessous, les temporisateurs d'expiration des trois nœuds commencent à s'exécuter.
Timeout
Lorsque le délai d'attente du nœud A expire, le nœud A devient un candidat, augmente son numéro de terme, met à jour la valeur du terme de 0 à 1 et vote pour lui-même.
Devenez candidat
Voyons comment un candidat devient un leader.
Élection du leader
Le mot anglais est terme, et les dirigeants ont un mandat.
En supposant qu'un cluster soit constitué de N nœuds, alors la majorité est d'au moins N/2+1. Par exemple : pour un cluster de 3 nœuds, la plupart sont 2.
Afin d'empêcher plusieurs nœuds de lancer le vote en même temps, chaque nœud se verra attribuer un délai d'attente d'élection aléatoire. Pendant ce temps, le nœud ne peut pas devenir candidat et ne peut qu'attendre l'expiration du délai. Par exemple, dans l'exemple ci-dessus, le nœud A expire en premier et devient premier candidat. Grâce à cette conception intelligente, dans la plupart des cas, un seul nœud de serveur lance l'élection en premier au lieu de lancer l'élection en même temps, ce qui réduit le nombre d'échecs d'élection dus à la division des votes.
Devenez candidat
Si le nœud leader échoue, un nouveau tour d'élection sera déclenché. Comme le montre la figure ci-dessous, si le nœud leader A échoue, le nœud B et le nœud C rééliront le leader.
Échec du leader
L'algorithme Raft utilise les méthodes suivantes pour organiser des élections à la direction, garantissant qu'il n'y a qu'un seul leader par mandat, réduisant ainsi considérablement le nombre d'échecs électoraux.
Cet article explique comment l'algorithme Raft élit les dirigeants grâce à des animations plus faciles à comprendre et à digérer.
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!