听京东张成远讲NewSQL和raft的那些事儿

时间:2021-07-30 20:40:10

但是NewSQL在业界还没有特别成熟的产品,在实际使用上来说,在性能方面需要进一步提升。


SQL早在70年代左右就被提出来了,后续有一些SQL的产品衍生出来供用户使用。2000年之后,随着分布式系统的引入,后来发明了NoSQL,它没有SQL的特性,但是在操作上方便了很多,在扩展上也非常便捷。近几年有人发现,在实际使用过程中,SQL比NoSQL用起来更方便,但是又不像NoSQL对于海量数据的收缩扩容以及管理容易使用,后来就提出想把NoSQL跟SQL的特性结合起来,就衍生出来了NewSQL。

听京东张成远讲NewSQL和raft的那些事儿

什么是NewSQL

NewSQL是一类新的高性能的可扩展的数据库的简称,主要能够解决提供分布式事务的支持,并且可以提供跨数据中心的一致性保证。在一些应用场景中,会对分布式事务有着严格的要求,NewSQL就能够保证如果某些节点出现了异常现象,可以与另外的节点进行替换,以满足场景的正常工作。

NewSQL与传统数据库相比的特点是,NewSQL自身具有的特点就是能够带来的效益,主要对分布式事务的支持,以及强一致性和跨数据中心的存活,像在双十一的时候,提前就可以做一些比较轻松的扩容的工作,以及在这个过程中,如果说某个机房有异常,可以很好的进行切换,对整个服务来说可以很好的提供更可用支持。

什么是raft

raft是分布式系统里面的一致性的算法,raft作者曾学习了很久的PAXOS,后来觉得PAXOS比较难理解,而且在实现的时候很困难,所以他提出了raft算法。其最大特点就是比较容易理解,在实现上也相较简单,主要是通过选举leader+日志复制,实现分布式的一致性算法。

但是在技术网络状况不太好的情况下,会出现频繁选取leader的行为,这对整个系统对外提供服务是有影响的,这种情况优先是要改善基础网络。还有一种情况,某些节点在特殊情况下有网络偶发的发生,这样也会引起选举的情况,在具体实现的时候,会有一些优化的措施。其他节点跟leader的通信是正常的,当这个异常的节点发起选举的时候,其他的节点就可以拒绝掉这次选举,这个异常的节点就可以很快恢复到follow的角色,这样对于整个系统提供一个稳定的服务会比较有帮助。

raft在NewSQL中的应用

因为NewSQL能够提供分布式事务的支持,也就是ACID的支持,同时还要提供高可用,如果有一个节点挂掉了,可以快速有另外一个节点接替它。但是在这种场景下,如果要保持已提交的事务没有丢失,那么备份的节点来接替这个服务的时候,要保证所有的数据跟异常的节点数据是完全一致的,才能够真正的接替这个服务。那raft就是解决一致性的问题,保证NewSQL的存储节点之间的数据一致。举个例子,假如说以ROCKSDB来说,假设NewSQL的存储节点是ROCKSDB,要让多个ROCKSDB之间的数据一致,那就在ROCKSDB上面加一层Raft的服务,通过日志复制的方式,让彼此之间的数据是一致的。

但是NewSQL在业界还没有特别成熟的产品,在实际使用上来说,在性能方面需要进一步提升。在解决分布式事务的时候,还涉及到两阶段提交,或者变种的两阶段提交,有很多的工程细节的问题,离一个非常完善的成熟的,可以完全商用的系统来说,还在探索的路上。

作者:齐琳 来源:51cto| 2016-08-30 18:01


【责任编辑: 齐琳 TEL:(010)68476606】