Raft是一个分布式协议,现在随着用户的增多一台机器来运算后台数据已经不足及支撑当前软件后端的运算量,所以就有了分布式的概念,可是分布式中有一个最大的问题就是他的高可用性,或者说高一致性,比如说我现在有一张银行卡卡里有余额一千元,然后现在在一台atm机上取钱,这时候我们访问了银行后台的一台服务器,atm吐出了五百元给我,这时候服务器后台的数据我的卡内余额应该是五百元,但是由于银行有很多台服务器,其中一台受理了我的请求和数据,这时候他怎么将我的操作通知到其他服务器,如果没有安全合理快速的方式的话,取完我再次去取钱卡这时候访问的是另一台服务器,我的余额可能显示的还是一千元....这就存在很大的隐患,那到底怎么才能让某台机器上的一个操作同步到所有的机器上,这就有是我们要介绍的分布式协议。最初的时候分布式协议里有个Paxos协议,这个协议实现了分布式机器之间的一致性但是这个协议是出了名的难懂,Raft的作者也曾公开说过,自己也是被Paxos虐了很多遍,所以才设计了一个和Paxos相似,但是通俗易懂的Raft协议。在功能上Raft完全可以替代Paxos协议。
两者最大的区别就在于Paxos有一个基本通信协议,这个协议有很强的数据一致性,所以即使在Paxos集群中有多个leader的情况下,Paxos依然可以正常工作,这也正是Paxos的复杂之处,但是Raft则采用了完全相反的概念,Raft在设计的时候认为之可能存在一个集群leader,Raft针对一个leader的leader选举协议进行了详细的设计,这样在广播协议上就不用花费太大的功夫。接下来我们就介绍一个Raft的leader的选举协议。leader就是集群中的老大, 听他的!和他保持一致!
先说Raft的日志广播过