实现分布式共识算法
(可用性)P(分区容忍性)原理是分布式系统永远绕不开的话题,在任何的分布式系统中,可用性、一致性和分区容忍性这三个方面都是相互矛盾的,三者不可兼得,最多只能取其二。 AP:如果要求系统高可用(A)和分区容错(P),那么就必须放弃一致性(C); CP:如果要求数据强一致(C),由于网络分区会导致同步时间无限延长(P),可用性就得不到保障,那么就要放弃可用性(A); CA:如果不存在网络分区(分区指不同机房/国家/地区)(P),那么强一致性(C)和可用性(A)可以同时满足。 Raft一致性算法简介 在Raft集群中,每个节点都对应一个角色,要么是Leader(领导节点),要么是Follower(跟随节点),在未选举出Leader之前,每个节点都可以是Candidate(候选节点)。 Raft算法约定Raft集群只能有一个Leader节点,并且只能由Leader节点处理客户端的读写请求,将写请求转译为操作日记,由Leader节点将操作日记复制给其它Follower节点,当Leader节点成功将一条操作日记同步到多数节点上时(包括自己在内的多数节点),就可以将操作日记应用到状态机,由状态机执行写操作(执行命令),以此保证数据的最终一致性。 我们可以把Binlog看成Mysql数据库执行的写操作的命令,而MyISAM存储引擎是Binlog的状态机,用于执行命令。 实现Raft算法需要实现的两个RPC接口:
定时心跳计时器 Leader节点需要定时向其它Follower节点发送心跳包,以刷新其它Follower节点上的选举超时计时。 心跳计时器在节点成为Leader节点时启动,而在节点变为Follower节点时停止。要求心跳超时时间间隔要比超时选举时间间隔长,即Heartbeat Timeout(心跳包广播时间)< Election Timeout(选举超时时间)。 超时选举计时器
当计时达到超时(Election Timeout)阈值时触发Leader选举,当前节点将任期号+1,并尝试给自己投一票(如果还未将票投给其它候选人),给自己投票成功则将自己变成候选人,并向其它节点发起拉票请求。 (编辑:三明站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |