一致性算法 包括2PC 、3PC 、Paxos 、Raft 等四种:
2PC / 3PC 协议用于保证属于多个数据分片上操作的原子性。
这些数据分片可能分布在不同的服务器上,2PC / 3PC 协议保证多台服务器上的操作要么全部成功,要么全部失败
二阶段提交2PC (Two-Phase Commit ): 用来保证分布式系统数据的一致性的一致性协议,大部分基于关系型数据库的分布式事务处理都是采用二阶段提交协议来完成。其优点是原理简单且实现方便,缺点是同步阻塞、单点问题、数据不一致、太过保守。
2PC主要包括以下两个阶段:
第一阶段:提交事务请求(投票阶段)
第二阶段:执行事务提交(执行阶段)
为了避免在通知所有参与者提交事务时,其中一个参与者 crash 不一致时,就出现了三阶段提交的方式。
三阶段提交 3PC(Three- Phase Commi ):包括 CanCommit、PreCommit、doCommit 三个阶段。显而易见,三阶段提交是在两阶段提交的基础上增加了一个 preCommit 的过程,当所有参与者收到 preCommit 后,并不执行动作,直到收到 commit 或超过一定时间后才完成操作。
其优点是降低参与者阻塞范围,并能够在出现单点故障后继续达成一致;缺点是引入preCommit 阶段,在这个阶段如果出现网络分区,协调者无法与参与者正常通信,参与者依然会进行事务提交,造成数据不一致。
Paxos (强一致性)算法属于多数派算法,主要目的是解决数据分片的单点问题, 通过该算法可以让整个集群的节点对某个值的变更达成一致。任何一个节点都可以提出要修改某个数据的提案,是否通过这个提案取决于这个集群中是否有超过半数的节点同意,因此Paxos算法需要集群中的节点必须是单数 。
Raft算法是简化版的Paxos, 定义了三种角色 Leader、Follower、Candidate:最初都是Follower,当Follower监听不到Leader,就自动成为Candidate,然后发起投票选出新的Leader 。因此,Raft 划分成三个子问题:
其有两个基本过程:
① Leader选举:每个 Candidate随机经过一定时间都会提出选举方案,最近阶段中得票最多者被选为Leader;
② 同步log:Leader会找到系统中log(各种事件的发生记录)最新的记录,并强制所有的follow来刷新到这个记录。
Raft一致性算法是通过选出一个leader来简化日志副本的管理,例如,日志项(log entry)只允许从leader流向follower。
推荐阅读:
链接:https://www.jianshu.com/p/4e85d0dbc604
来源:简书
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69949806/viewspace-2902054/
,如需转载,请注明出处,否则将追究法律责任。