【IT168 资讯】2016年5月12日-14日,第七届中国数据库技术大会(DTCC 2016)在北京国际会议中心拉开帷幕。作为国内数据库与大数据领域最大规模的技术盛宴,在为期三天的会议中,大会将围绕MySQL、NoSQL、Oracle、缓存技术、云端数据库、智能数据平台、大数据安全、数据治理、大数据和开源、大数据创业、大数据深度学习等领域的前瞻性热点话题与技术展开深入探讨,并邀请一大批国内顶尖的技术专家来进行分享,以满足广大从业人士和行业用户的迫切需要。
今天虽然是本届大会的最后一天,但是精彩照例!爆场率100%!看专场17 PingCAP联合创始人黄东旭为你讲述“如何使用Raft构建一致性算法”。
Raft有什么优势?
Raft实际上是ISM的实现,设计初衷是为了让人类更好的理解,作为Paxos形式上等价的实现,但是却相对好理解的多。同时在可用性性能上也没有做任何妥协,甚至在一些情况下Raft的性能比Paxos还要好。不仅如此,Raft还非常贴心的实现了整个集群里面membership变更的算法。相当于它将一个分布式环境下遇到的问题如添加节点、删除节点、日志复制等各种各样的场景统统归纳到算法里。这也是人们为什么爱使用它的原因。
Raft如何工作?
实际上整个Raft算法是由好几部分组成的。包括Leader Election(选举)、LOG replication(日志复制)以及Configration Change(更改配置)。
选举:
在Raft中,任何时候一个服务器都可以扮演下面角色之一:有可能是Leader、有可能是Follower更有可能是Candidate。
Leader: 处理所有客户端交互,日志复制等,任意时间之内只能有一个可见的Leader存活。
Follower: 类似选民,完全被动接受,当Follower没有收到Leader信号时,在一段时间之内就会自动切换成Candidate。
Candidate候选人:可以被选为一个新的领导人。
好比是一个民主社会,领袖由民众投票选出。刚开始没有领袖,所有集群中的参与者都是群众,那么首先开启一轮大选,在大选期间所有群众都能参与竞选,这时所有群众的角色就变成了候选人,民主投票选出领袖后就开始了这届领袖的任期,然后选举结束,所有除领袖的候选人又变回群众角色服从领袖领导。
任何一个服务器都可以成为一个候选者Candidate,它向其他服务器Follower发出要求选举自己的请求,其他服务器同意了,发出OK。如果在这个过程中,有一个Follower当机,没有收到请求选举的要求,那么候选者就可以自己选自己,并且有可能成为Leader,可以向Follower们发出指令,比如进行日志复制。 值得注意的是,整个选举过程是有一个时间限制的。
日志复制:
假设Leader领导人已经选出,这时客户端会发出增加一个日志的要求,Leader会把日志复制给Follower, 当Leader第一次收到大多数写日志的成功后就会发出Commited ,然后在下一个心跳heartbeat中,Leader会通知所有Follwer更新commited 项目。每一个Follwer都是属于被动接受的,如果所有的Follwer认为自己的数据跟Leader不一样,那么就会把自己的数据全部清空,并且会与Leader进行强行同步,Raft可以保证的是选择出来的Leader一定是拥有最新数据的。所以原来的Follwer即使数据不对也没关系,只要去与Leader做一次同步就好了。
更改配置:
比如说一个集群现在是三个节点,当想变成四个或者五个的时候,它是如何操作的呢?
如果是简单的想去强行更改配置时可能会出现一些disjoint majorities的问题,所以最好的解决方案是一次只增加一个节点。
黄东旭认为:
1、 分布式关系型数据库与单机关系数据库是完全不一样的两个东西。
2、 在未来大数据基础设施里可扩展是基础能力,单机型的RDBMS有可能会慢慢消失。
3、 在真正的分布式系统上并不能同时的去做OLTP 和 OLAP,但是数据存储可以在一起。
4、 真正的High-Availability是可以达到的(不需要人工介入,不需要做主从等)。但是需要使用更现代的一次性的算法,比如说Raft 或者 Multi-Paxos ...
5、 SQL 和NoSQL目前来看是最为合理的方案。
▲更多大会资讯,请查看大会专题:http://www.it168.com/redian/16DTCC/