作家
登录

分布式数据库数据一致性原理说明与实现

作者: 来源: 2017-10-20 09:23:29 阅读 我要评论

编目节点和数据节点在存储数据时,共包含两大年夜部分,一个真实的数据文件,另一个是事务日记文件。

沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!


分布式数据库数据一致性道理解释与实现

分布式数据库的数据一致性治理是其最重要的内核技巧之一,也是包管分布式数据库知够数据库最根本的ACID特点中的 “一致性”(Consistency)的保障。在分布式技巧成长下,数据一致性的解决办法和技巧也在赓续的演进,本文就以作者实际研发的分布式数据库作为案例,介绍分布式数据库数据一致性的道理以及实际实现。

1.数据一致性

1.1数据一致性是什么

大年夜部份应用传统关系型数据库的DBA在看到“数据一致性”时,第一反竽暌功可能都是数据在跨表事务中的数据一致性场景。然则本文介绍的“数据一致性”,指的是“数据在多份副本中存储时,若何保障数据的一致性”场景。

Leader的日记完全性,则当Candidate从新选举Leader时,新的Leader必须要包含先前已经commit的LOG;

媒介

因为在大年夜数据范畴,数据的安然不再由硬件来包管,而是经由过程软件手段,经由过程同时将数据写入到多个副本中,来确保数据的安然。数据库在同时向多个副本写入记录时,若何确保每个副本数据一致,称为“数据一致性”。

1.2关系型数据库若何保障数据一致性

传统的关系型数据库对于运行情况–硬件请求都比较高,例如Oracle会建议用户应用小型机+共享存储作为数据库的运行情况,DB2 DPF也同样建议用户采取更好的办事器+高端存储来搭建数据库的运行情况。所以在数据存储安然的技巧请求下,传统关系型数据库更多是依附硬件的技巧来保障数据的安然性。

因为关系型数据库的数据安然是基于硬件来保障,并且数据也不会经由过程同时存储多份来保障数据的安然,所以关系型数据库的用户默认认为数据存储是一致的。

1.3分布式存储若何保障数据一致性

本文在评论辩论分布式存储时,重要指的是大年夜数据产品中的分布式文件体系和分布式数据库,例如:SequoiaDB和HDFS。

当Leader被选举出来后,所有的事务操作都必须要经由Leader处理。这些事务操作成功后,将会被按次序写入到LOG中,每个LOG都包含一个index编号。

用户在搞明白分布式存储的数据一致性道理时,必须要先明白为什么他们就须要数据一致性,和分布式存储的数据存储与关系型数据库的数据存储又有什么差别。

大年夜数据技巧的核心思惟就是分布式,将一个大年夜的工作义务分化成多个小义务,然后经由过程分布式并发操作的方法将其完成,大年夜而进步全部体系的枷⒚效力或者是存储才能。而在分布式情况下,因为硬件的请求降低,必定须要大年夜数据产品供给别的一个重要的功能–数据安然。

大年夜数据产品在解决数据安然的方法上,都比较接近,简单来说,就是让一份数据经由过程异步或者同步的方法保存在多台机械上,大年夜而保障数据的安然。

分布式存储在解决数据安然的技巧可贵后,又惹人了一个新的技巧问题,就是若何保障多个副本中的数据一致性。今朝SequoiaDB是应用Raft算法来包管数据在多个副本一一致性。

2.Raft算法

2.1Raft算法背景

在分布式情况下,最有名的一致性算法应当是Paxos算法,然则因为它实袈溱过于晦涩难解,并且实现起来极端艰苦,所以在2013年,Diego >

2.3.2 Terms

在分布式情况下,“时光同步”一向都是老大年夜难的技巧难题。Raft为懂得决这个问题,将时光划分为一个一个的Term(可以懂得为“逻辑时光”)来处理在不应时光段里的数据一致性。

Terms有以下原则

  • 每个Term中,至多存在一个Leader
  • 某些Term中,有可能存在因为选举掉败,没有Leader的情况
  • 每个节点本身保护本地的currentTerm
  • 每个Term都是一个持续递增的编号
  • 如不雅Follower的Term编号比其余Follower Term编号小时,该Follower Term编号将更新Term编号,以保持与其他Follower Term编号一致

2.3.3 选举

Raft的选举由准时器触发,每个节点的触发时光都不雷同。

所有的节点在开端时状况都为Follower,当准时器触发选举后Term编号递增,该节点的状况由Follower转为Candidate,并且向其他节点提议RequestVote RPC请求,这时选举有3种情况可能产生:

SequoiaDB的节点事务日记,默认情况下由20个64MB(总大年夜小为1.25GB)的文件构成。节点的事务日记重要包含一个index编号和数据操作内容,index编号保持永远递增状况。

提议RequestVote的节点收到n/2+1(过折半)个节点的投票,该节点将大年夜Candidate状况变为Leader状况,开端向其他节点发送HeartBeat以保持Leader的┞俘常状况

如不雅收到投票请求后,该节点发明提议投票的节点Term大年夜于本身,则该节点状况大年夜Candidate转为Follower,不然保持Candidate状况,并且拒绝该投票请求

选举时代产生了超时,则Term编号递增,从新提议选举


  推荐阅读

  一句“嘿 Siri”背后隐藏了如此多的努力与小心思

沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散! 苹不雅在活动协处理器中集成了异常小的语音辨认装配,这个装配一向保持运行,并等待用户说出“嘿 Siri>>>详细阅读


本文标题:分布式数据库数据一致性原理说明与实现

地址:http://www.17bianji.com/lsqh/38048.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)