加入收藏 | 设为首页 | 会员中心 | 我要投稿 三明站长网 (https://www.0598zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

实现分布式共识算法

发布时间:2021-04-01 11:31:50 所属栏目:评论 来源:互联网
导读:(可用性)P(分区容忍性)原理是分布式系统永远绕不开的话题,在任何的分布式系统中,可用性、一致性和分区容忍性这三个方面都是相互矛盾的,三者不可兼得,最多只能取其二。 AP:如果要求系统高可用(A)和分区容错(P),那么就必须放弃一致性(C); CP:如果要求数

(可用性)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接口:

  • RequestVoteRpc:选举时由当前候选节点向其它节点发起拉票请求;
  • AppendEmtriesRpc:由Leader节点向其它Follower节点发送日记复制请求、心跳请求以及提交日记请求。

定时心跳计时器

Leader节点需要定时向其它Follower节点发送心跳包,以刷新其它Follower节点上的选举超时计时。

心跳计时器在节点成为Leader节点时启动,而在节点变为Follower节点时停止。要求心跳超时时间间隔要比超时选举时间间隔长,即Heartbeat Timeout(心跳包广播时间)< Election Timeout(选举超时时间)。

超时选举计时器

当计时达到超时(Election Timeout)阈值时触发Leader选举,当前节点将任期号+1,并尝试给自己投一票(如果还未将票投给其它候选人),给自己投票成功则将自己变成候选人,并向其它节点发起拉票请求。

(编辑:三明站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读