前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式一致性算法 Raft

分布式一致性算法 Raft

作者头像
dys
发布2018-04-03 16:57:23
7490
发布2018-04-03 16:57:23
举报

分布式一致性算法最著名的应该是 Paxos,1990年提出,google的Chubby Lock服务就是使用的Paxos 之后的一些一致性算法基本都是在Paxos思路上的调整,例如 ZooKeeper的 ZAB 但Paxos算法一直被认为比较繁杂,很不好理解,大家对其调整优化,就是因为他的复杂 2013年,斯坦福的两个人以易懂为目标,设计了一致性算法 Raft,现在已经被广泛应用,比较有名的是etcd,Google的Kubernetes就使用了etcd作为他的服务发现框架

什么是分布式一致?

在单节点环境中,client向node发送一个值,很容易就达成一致了

但当我们有多个node时,我们应该如何做,才能实现一致性呢?

这就是分布式一致性问题,Raft就是用来解决此问题的

Raft的思路

每个node都会处于以下3个状态之一: (1)Follower 跟随者 (2)Candidate 候选人 (3)Leader 领导人

所有node开始时都是follower

当follower没有收到leader的心跳时,他就会申请成为candidate,然后向其他node发送请求,说“我要成为Leader,请给我投票”

当candidate收到大多数node的同意后,就变为了Leader,以后对于系统的修改操作,都必须经过Leader

例如client要发送消息,会先发给leader,leader会把这个操作记录到自己的日志 注意,是记录到日志,并没有实际修改node中的值

leader把这条操作记录发送给各个follower,follower收到后,也保存到自己的日志中

follower收到操作记录后,向leader发送消息,说自己安排好了 leader收到大多数的回馈后,就把这条记录进行提交,真正修改了node中的值

leader执行提交以后,就通知各个follower,“我已经提交了,你们可以更新了”

现在,系统就达成了一致的状态 这个过程叫做 Log Replication 日志复制,是Raft的核心之一,还有选举leader过程也是核心,就不细说了 如果对Raft算法有兴趣,强烈建议看一下他的动态演示 地址 http://thesecretlivesofdata.com/raft/ 非常易懂,上面介绍的日志复制过程就是整理自这个演示,里面还有很多其他内容,看过后就会对Raft有了整体认识 还有Raft的详细说明文档,中文的,很好的资料,地址 https://github.com/maemual/raft-zh_cn/blob/master/raft-zh_cn.md

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档