学习
实践
活动
专区
工具
TVP
写文章
专栏首页腾讯云数据库(TencentDB)这次,听人大教授讲讲分布式数据库的多级一致性

这次,听人大教授讲讲分布式数据库的多级一致性

近年来,凭借高可扩展、高可用等技术特性,分布式数据库正在成为金融行业数字化转型的重要支撑。分布式数据库如何在不同的金融级应用场景下,在确保数据一致性的前提下,同时保障系统的高性能和高可扩展性,是分布式数据库的一个核心技术挑战

针对以上分布式一致性的困境,中国人民大学-腾讯协同创新实验室研究提出“多级一致性”的事务处理理念。该技术包含严格可串行化、顺序可串行化、可串行化三大隔离级别,可针对不同应用场景要求,极大地平衡性能与一致性要求,满足金融及各类企业场景的分布式事务处理需求。该项技术已应用于腾讯分布式数据库TDSQL产品中,确保TDSQL按需提供数据一致性,并确保数据无异常。TDSQL是当前国内率先进入国有大型银行核心系统正式投产的国产分布式数据库,该项技术是其中的关键支撑。

这次,中国人民大学教授、博士生导师卢卫老师为大家全面解锁分布式数据库的多级一致性及构建技术!

背景

从本质上看,数据库是长期存储在计算机内、有组织的、可共享的数据集合。当多个用户并发操作数据库时,事务调度的可串行化是并发控制的正确性理论。但该观点在当前却受到了挑战。Daniel J. Abadi 在2019年发布的一篇博客中提到,以往学界普遍认为可串行化是数据库隔离级别的黄金标准,但经过研究,他发现实际上严格可串行化才是黄金标准。即在该理论中,可串行化仍存在一定的问题,只有严格可串行化才能做到没有问题。

在过去,为什么可串行化不存在问题?原因有两方面:

一是对集中式数据库而言,可串行化其实就是严格可串行化,两者之间并没有区别。

二是对于分布数据库而言,如果数据库里有唯一的事务调度器或协调器,这两者之间也可等价。

当来到去中心化的分布式数据库时代,我们希望分布式数据库产品可在全球部署。全球部署意味着范围更大,如果仍然依赖集中式调度,性能和可扩展性都无法满足应用的需求,因此需要在系统当中安排多个事务协调者进行协调。

回顾发展历程,20年前的数据库的标注配置为业务系统+主库+备库。业务系统访问主库,主库通过同步协议使数据在主库和备库之间保持一致性。在这一阶段,集中式的IBM小型机、Oracle数据库、EMC存储(IOE)在处理小规模的数据场景时较为合适。但这种架构模式的问题在于,当数据量比较大或者业务场景比较密集时,集中式主库就会成为整个系统的负担。

到了第二阶段,典型的做法是分库分表,将业务按照主库进行拆分,因为业务系统建立在主库之上,因此实现了业务的隔离,TDSQL的早期版本也采用了这种做法。这种做法的前提假设是数据/业务能够很好地进行切分,从而解决前一阶段业务不可扩展的问题。但当业务系统进行跨库访问时,就会带来新的问题。

为了解决上述问题,我们来到了第三阶段,即去中心化的分布式数据库阶段。在该阶段,数据库中设置了更多的事务调度器,由调度器来对每个节点数据上的子事务进行事务提交,每个事务调度器都可以独立地去处理事务。但这也会产生新的问题,即不同协调者之间如何协调。

问题与挑战

我们以下图中的例子来说明分布式数据库中不同协调者之间如何协调的问题。假设有一个家庭账户,丈夫和妻子共用,都可以进行读和写。丈夫在 ATM机上存了 100 块,存完后通知妻子,但妻子有可能看不到丈夫存的这笔钱。因为这是一个多协调器的架构,设备1交由协调者1来进行协调,妻子发起的这个事务可能由另外一个协调者去发起,这就会出现协调者之间AMG时钟不统一的问题。

该事务发起的时间虽然在 2:01 PM后,但因为协调的时间偏慢,所以此时1:59 PM的这个时钟去读 2:01 PM的时间戳提交的这个数据,就会出现读不到的情况。

形象地说,即有两个协调器,其中一个协调器执行了事务 T0 、T1,T1 事务已经提交成功。这时协调者 2 发起了事务T2,当T2 查询余额时,我们发现时钟比 T1 提交的时钟来得小,所以读不到T1。但实际上,是先执行 T0 再执行 T2 再执行T1,属于可串行化。但这又会跟前述提到的执行相违背,因为既然T1已经提交, T2理应可以读到,但结果没有读到。因此Daniel J. Abadi 的可串行化存在一定的问题,读不到最新数据。

这个问题的本质是保序,而严格可串化的本质是线性一致性加上可串行化。从事务角度来看,根据线性一致性要求,如果T0事务已经结束,T1才开始,则T1要读到T0的写;同理,T1已经完成了T2才开始,T2要读到T1的写。虽然这里的 T0、T2、T1 是可串行化,但违背线性一致性的要求,只有T0→ T1→ T2时才是正确的,这就是保序。

因此,这里的实时序就是T0 结束后开始T1事务,T0 排在T1的前面;T0 完成后T2才开始,T0 排在T2的前面;T1结束后T2才开始,T1排在T2的前面。因此核心理念就是保序,即在原来可串行化全序的基础上,对可串行化的序做约束,这个约束是线性一致性所造成的。

严格串行化虽然能保证数据的准确性,但也带来了较多的问题。以Google Spanner为例,Google Spanner支持严格可串行化,但是严格可串行化要求有一个原子钟,或者有一个中心授时器(本质上是因为协调器和协调器之间缺少一个协调),因而导致性能较低,难以被广泛应用于实际业务场景中。

多级可串行化建模

基于上述情况,我们希望可以找到一个中间环节,在一致性上比可串行化级别高、比严格串行化级别低;在性能上接近可串行化、优于严格可串行化。针对这个需求,我们提出了多级可串行化建模,本质是在可串行化的基础上加了序。

线性一致性是并发系统中一致性最强的,比它弱一点的有顺序一致性、因果一致性、写读一致性、最终一致性等。我们尝试将可串行化与它们进行结合,最终发现只有可串行化和线性一致性以及可串行化和顺序一致性可以实现结合。因为可串行化要求全序,但因果一致性不要求全序,因此无法结合。

我们的做法是将可串行化+线性一致性,从而得到严格可串行化;可串行化+顺序一致性,从而得到顺序可串行化。所以我们提出了严格可串行化、顺序可串行化、可串行化这三个隔离级别。

多级可串行化实现的核心理念就是保序。我们定义了五个序:

  • 实时序,即原来的线性一致性要求。
  • 程序序,比如代码中的session order,session 连接后,事务之间就变成了T0,T0 提交后才能提交T1,这就是程序序。
  • 写读序,即如果T2读取了T1的写,T1必定排在T2 之前。
  • 因果序,指写读序和程序序之间形成的闭包。
  • 写合法,假设有一个x数据项,T1写了数据项x1,T3 写了数据项x2,但如果T2 读了一个x ,就必须要求T2 要紧跟T1,因为它不能紧跟在T3 后;如果它排在T3 后,则它读的应该是 x2 ,因此这时T1和T3形成了一个序,要求T2要排在T3 前。

有了序后,我们重新定义了事务的可串行化理论,即可串行化等于写读序的传递闭包+写合法;可串行化+顺序一致性,即写读序+程序序的传递闭包,再加写合法;严格可串行化就是写读序+实时序的传递闭包,加写合法。因此可以理解为所有的一致性模型就是保序。

该理论成果已经应用于腾讯分布式数据库TDSQL产品当中,使得TDSQL成为全球范围内首个能够具备严格可串行化、顺序可串行化、可串行化三大隔离级别的国产分布式数据库,还可针对不同应用场景要求,极大地平衡性能与一致性要求,满足金融及各类企业场景的分布式事务处理需求。

并发控制算法

并发控制算法-双向动态时间戳调整的实现如下图所示。图中有两个协调者P1和P2,协调者P1有两个事务T1和T3,协调者P2有T2 和T4 。我们先定义顺序,T1和T3之间有一个session order或program order,T2和T4也存在一个program order,我们将它preserve 出来。

其中还存在写读序,像T1和T4之间,T1写了x1,T4读了x1,此时就存在一个写读序,所以要把T1和T4的order preserve出来。同时还存在写合法,因为T3 读了y 数据项,然后 T2 写了y数据项, 但是基于可串行化理论,R3读取的是y0,没有读取到y2,如果读到y2,这时T3就必须排在T2后。因为此时读不到y2 ,要排在T2前面,因此T3和 T2之间存在写合法。在整个执行过程中,我们要保证必须存在保序。

主要思想是每次事务提交时,都需要判断能否违背事务的先后顺序。比如T1开始提交,因为T1只包含自身,我们将它放到队列中时不需要回滚。T2 提交时,T2和T1之间没有序,但T1和T3之间以及T2和T3之间都分别存在一个序,因为此时存在y数据项,所以只有T1、T3、T2 这样的序才能保证可串行化,否则T必须进行回滚。

最后为保证协调器间能进行协调,我们还需要引入混合逻辑时钟,来保证因果序。

实验评价

我们以下图中的实验为例,来说明可串行化、严格可串行化和顺序可串行化之间的关系。如果在局域网情况下,在正确性方面,严格可串行化跟可串行化性能基本一致。但在广域网情况下,严格可串行化、顺序可串行化和可串行化之间的性能差异较大,所以导致在广域网上很难实现严格可串行化。

如图所示,BDTA算法比现有的算法如MAT、SUNDIAL等快了将近 1.8 倍,主要原因是BDTA中保序,但如果用前面的方法实现并发控制,就会造成大量事务的回滚。

总结与讨论

本文提出了提出了面向分布式数据库的多级可串行化模型,将并发系统中的一致性要求结合到可串行化中,实现了多级可串行化原型系统,保证了去中心化的事务处理机制,并设计了双向动态时间戳调整算法(BDTA),可以在统一系统架构下支持多个可串行化级别。

该技术已应用于腾讯云数据库TDSQL中,确保TDSQL无任何数据异常,且具备高性能的可扩展性,解决了分布式数据库在金融级场景应用的最核心技术挑战,使得国产分布式数据库实现在金融核心系统场景的可用。基于此,TDSQL是当前国内唯一进入国有大型银行核心系统正式投产的国产分布式数据库。

-- 更多精彩 --

还在为数据库事务一致性检测而苦恼?让Elle帮帮你 | DB·洞见

产学研合作生态硬核来袭,共探数据库技术发展与应用

↓↓点击阅读原文,了解更多优惠

文章分享自微信公众号:
腾讯云数据库

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

作者:卢卫
原始发表时间:2022-11-15
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 深化产学交流合作,腾讯云数据库与学界专家共话技术发展应用

    本文转载自“中国日报”官网 数据库技术发端于上世纪五十年代,近几十年,数据库市场几乎被Oracle、DB2等国外厂商所垄断。随着云计算、互联网的发展,国产数据库...

    腾讯高校合作
  • 产学研合作生态硬核来袭,共探数据库技术发展与应用

    腾讯云数据库一直致力于推动数据库基础研究创新、数据库产学研合作生态建设,助力国产数据库学术人才培养和技术创新生态建设发展。 为让更多数据库从业者了解数据库领域...

    腾讯云数据库 TencentDB
  • 产学合作、协同创新——中国人民大学-腾讯协同创新实验室举行揭牌仪式

    “ 编者按:腾讯公司与中国人民大学于2019年底签订成立“中国人民大学-腾讯协同创新实验室”,双方将充分发挥中国人民大学在国产数据库基础研究方面积累的优势,以...

    腾讯高校合作
  • 2017年数据库技术盘点

    在数据库领域,回顾2017这一年,精彩纷呈,热点不断,而且不乏标志性的事件发生。 如Oracle提出的自治数据库这样的概念,把数据库技术带入一个新世界。其实AI...

    CSDN技术头条
  • 犀牛鸟硬核 | 腾讯云数据库TDSQL两篇论文入选顶会SIGMOD,产学研结合助力国产数据库生态建设

    6月20日-25日,2021 ACM SIGMOD 在西安举行,腾讯云数据库TDSQL两篇论文入选,领域涉及分布式数据库事务处理、存储等关键技术领域,致力于从基...

    腾讯高校合作
  • 前沿技术趋势大盘点,数据库专家邀你畅谈SIGMOD!

    回顾数据库领域数十年的发展历程,每一次技术革新浪潮的开端,都源自于从业人员在行业技术前沿一次又一次的探索。 在当前,随着新一轮技术浪潮的兴起,以计算机、通信...

    腾讯云数据库 TencentDB
  • 【BDTC 2015】数据库分论坛:GBase 8t、PosgreSQL-X2核心技术解析

    2015年12月10-12日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所、北京中科天玑科技有限公司与CSDN共同协办,...

    CSDN技术头条
  • MySQL之父,MySQL官方,三大顶会齐赞,凭什么?

    工作久了,人总会有种忘记初心的感觉。 相信每个人小时候都想过成为一名科学家,只不过到后来,连自己都忘了。 当一名科学家确实不容易,学术研究难,薪酬待遇还不高,...

    腾讯云数据库 TencentDB
  • 犀牛鸟硬核 | 产学协同共赢——腾讯云原生数据库内核技术再获创新突破

    导语: 近日,腾讯云数据库又有两项数据库内核技术的最新研究成果分别入选了国际数据库顶级会议ICDE和SIGMOD的收录论文。其中,中国科技大学金培权老师团队和腾...

    腾讯高校合作
  • 2017年数据库技术盘点

    作者介绍: 那海蓝蓝,腾讯金融云数据库技术专家,熟悉PostgreSQL、MySQL、Informix等数据库内核技术,著有《数据库查询优化器的艺术》、《数据库...

    腾讯技术工程官方号
  • TDSQL的2020进化在未来之前,更在未来之后

    2020年的最后一天,是国内金融机构的年度重磅——年终决算的日子。这一天,数百家金融机构在腾讯云TDSQL之上完成年终决算。 在过去的1年,TDSQL技术上持...

    腾讯云数据库 TencentDB
  • 巨杉数据库王涛:区块链观点两极分化,程序员应关注其技术本质

    区块链大本营
  • 腾讯云数据库两项内核技术入选国际顶会SIGMOD和ICDE

    今天,腾讯云两项数据库内核技术最新研究成果同时入选SIGMOD和ICDE的收录论文。 其中,SIGMOD、ICED、VLDB并称为国际数据库三大顶级会议。 先...

    腾讯数据库技术
  • 2017上海QCon之旅总结(上)

    本来这个公众号的交流消息中间件相关的技术的。这周去上海参加了QCon,第一次参加这样的技术会议,感受挺多的,所以整理一下自己的一些想法接公众号和大家交流一下。

    林一
  • 良心揭秘:学术圈的人为什么这么关心Gair大会?

    在学术界有那么一群人,在学术界还没遇到产业界的风口时,他们踏踏实实地在“小黑屋”里做了N年研究; 在产业界的风口到来时,他们一边兼顾学术界,一遍在产业界试水,或...

    AI科技评论
  • 牛逼大了,千等万等,PingCAP终于要发力存储,请InnoDB的负责人入职

    一觉醒来,就发现有人给我微信上发消息,通知我说数据库创业圈子里,又出来一件牛逼大了的事情。 我一看,原来是PingCAP放大招了,PingCAP在美国加州硅谷从...

    用户1564362
  • 大数据那些事(36):后记

    任何事物总有结束的时候。大数据这个系列到这里我就打算结束了。从最初开始写这个系列到现在也小半年了。时间之长远远超出了自己原来的预算。大约一个月之前的时候我开始考...

    用户1564362
  • MongoDB技术从0到1+

    偶然机会看到mongo中文社区办了场征文活动,觉得挺有意思的,虽说自己还在成为大佬的路上,但参与一下未尝不可。于是就有了这篇文章。

    MongoDB中文社区

扫码关注腾讯云开发者

领取腾讯云代金券