邀约网站怎么做请柬,cpanel wordpress,投稿网站,如何建立自已的购物网站转载自 漫画#xff1a;什么是拜占庭将军问题
什么是拜占庭将军问题#xff1f;
在很久很久以前#xff0c;拜占庭是东罗马帝国的首都。那个时候罗马帝国国土辽阔#xff0c;为了防御目的#xff0c;因此每个军队都分隔很远#xff0c;将军与将军之间只能靠信使传递消息…转载自 漫画什么是拜占庭将军问题
什么是拜占庭将军问题
在很久很久以前拜占庭是东罗马帝国的首都。那个时候罗马帝国国土辽阔为了防御目的因此每个军队都分隔很远将军与将军之间只能靠信使传递消息。 在打仗的时候拜占庭军队内所有将军必需达成一致的共识才能更好地赢得胜利。但是在军队内有可能存有叛徒扰乱将军们的决定。 这时候在已知有成员不可靠的情况下其余忠诚的将军需要在不受叛徒或间谍的影响下达成一致的协议。 莱斯利·兰伯特 Leslie Lamport 通过这个比喻表达了计算机网络中所存在的一致性问题。这个问题被称为拜占庭将军问题。 什么是 Raft 算法 Raft 算法是一种简单易懂的共识算法。它依靠 状态机 和 主从同步 的方式在各个节点之间实现数据的一致性。 在学习Raft算法的时候大家需要了解Raft的两个核心要点 1.选取主节点 2.同步数据 不难理解使用主从同步的方式可以让集群各个节点的数据更新以主节点为准从而保证了一致性。那么如何选取主节点呢 我们的出生离不开无数小蝌蚪之间的激烈竞争。在竞争的过程中某个速度最快运气最好的小蝌蚪最终胜出让我们诞生到了这个世界。 同样道理Raft算法在选择主节点的过程中也是通过多个节点之间的投票竞争。 说到这里不得不说一下Raft算法的状态机。Raft算法为节点定义了三种角色 1.Leader主节点
2.Follower从节点
3.Candidate参与投票竞争的节点 让我们来看一看选主的具体流程 第一步在最初还没有一个主节点的时候所有节点的身份都是Follower。每一个节点都有自己的计时器当计时达到了超时时间Election Timeout该节点会转变为Candidate。 第二步成为Candidate的节点会首先给自己投票然后向集群中其他所有的节点发起请求要求大家都给自己投票。 第三步其他收到投票请求且还未投票的Follower节点会向发起者投票发起者收到反馈通知后票数增加。 第四步当得票数超过了集群节点数量的一半该节点晋升为Leader节点。Leader节点会立刻向其他节点发出通知告诉大家自己才是老大。收到通知的节点全部变为Follower并且各自的计时器清零。 这里需要说明一点每个节点的超时时间都是不一样的。比如A节点的超时时间是3秒B节点的超时时间是5秒C节点的超时时间是4秒。这样一来A节点将会最先发起投票请求而不是所有节点同时发起。 为什么这样设计呢设想如果所有节点同时发起投票必然会导致大家的票数差不多形成僵局谁也当不成老大。 那么成为Leader的节点是否就坐稳了老大的位置呢并不是。Leader节点需要每隔一段时间向集群其他节点发送心跳通知表明你们的老大还活着。 一旦Leader节点挂掉发不出通知那么计时达到了超时时间的Follower节点会转变为Candidate节点发起选主投票周而复始...... 让我们来看一看数据同步的流程 第一步由客户端提交数据到Leader节点。 第二步由Leader节点把数据复制到集群内所有的Follower节点。如果一次复制失败会不断进行重试。 第三步Follower节点们接收到复制的数据会反馈给Leader节点。 第四步如果Leader节点接收到超过半数的Follower反馈表明复制成功。于是提交自己的数据并通知客户端数据提交成功。 第五步由Leader节点通知集群内所有的Follower节点提交数据从而完成数据同步流程。 共识算法的应用场景 Paxos 算法
早期的共识算法由拜占庭将军问题的提出者 Leslie Lamport 所发明。谷歌的分布式锁服务 Chubby 就是以 Paxos 算法为基础。 ZAB 算法
Zookeeper 所使用的一致性算法在流程上和 Raft 算法比较接近。 PBFT 算法
区块链技术所使用的共识算法之一适用于私有链的共识。