课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
一致性算法是程序员在学习数据库开发架构的时候需要重点掌握的一个编程知识,而今天我们就通过案例分析来了解一下,数据库开发常见一致性算法都有哪些类型。
目前主要的一致性算法包括:2PC、3pc、paxos、Raft。
2PC:Two-PhaseCommit(二阶段提交)也被认为是一种一致性协议,用来保证分布式系统数据的一致性。绝大部分的关系型数据库都是采用二阶段提交协议来完成分布式事务处理。
主要包括以下两个阶段:
一阶段:提交事务请求(投票阶段)
二阶段:执行事务提交(执行阶段)
优点:原理简单、实现方便
缺点:同步阻塞、单点问题、数据不一致、太过保守
3PC:Three-PhaseCommi(三阶段提交)包括CanCommit、PreCommit、doCommit三个阶段。
为了避免在通知所有参与者提交事务时,其中一个参与者crash不一致时,就出现了三阶段提交的方式。
三阶段提交在两阶段提交的基础上增加了一个preCommit的过程,当所有参与者收到preCommit后,并不执行动作,直到收到commit或超过一定时间后才完成操作。
优点:降低参与者阻塞范围,并能够在出现单点故障后继续达成一致缺点:引入preCommit阶段,在这个阶段如果出现网络分区,协调者无法与参与者正常通信,参与者依然会进行事务提交,造成数据不一致。
2PC/3PC协议用于保证属于多个数据分片上操作的原子性。
这些数据分片可能分布在不同的服务器上,2PC/3PC协议保证多台服务器上的操作要么全部成功,要么全部失败。
Paxos、Raft、Zab算法用于保证同一个数据分片的多个副本之间的数据一致性。以下是三种算法的概要描述。
Paxos算法主要解决数据分片的单点问题,目的是让整个集群的结点对某个值的变更达成一致。Paxos(强一致性)属于多数派算法。任何一个点都可以提出要修改某个数据的提案,是否通过这个提案取决于这个集群中是否有超过半数的结点同意,所以Paxos算法需要集群中的结点是单数。
Raft算法是简化版的Paxos,Raft划分成三个子问题:一是LeaderElection;二是LogReplication;三是Safety。Raft定义了三种角色Leader、Follower、Candidate,开始大家都是Follower,当Follower监听不到Leader,就可以自己成为Candidate,发起投票,选出新的leader。
其有两个基本过程:
①Leader选举:每个Candidate随机经过一定时间都会提出选举方案,近阶段中得票多者被选为Leader。
②同步log:Leader会找到系统中log(各种事件的发生记录)新的记录,并强制所有的follow来刷新到这个记录。
Raft一致性算法是通过选出一个leader来简化日志副本的管理,例如,日志项(logentry)只允许从leader流向follower。ZAB基本与raft相同。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。