京东数科强一致、高性能分布式事务中间件 JDTX.docxVIP

京东数科强一致、高性能分布式事务中间件 JDTX.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
京东数科强全都、高功能分布式事务两头件 JDTX 数据库事务需要满足 ACID(原子性、全都性、隔离性、长久性)4 个特性。 在单一数据节点中,事务仅限于对单一数据库资源的访问把握,称之为本地事务。几乎全部的成熟的关系型数据库都供应了对本地事务的原生支持。但是在基于微服务的分布式应用环境下,越来越多的应用场景要求对多个服务的访问及其相对应的多个数据库资源能纳入到同一个事务当中,分布式事务应运而生。 关系型数据库虽然对本地事务供应了完善的 ACID 原生支持。但在分布式的场景下,它却成为系统功能的枷锁。如何让数据库在分布式场景下满足 ACID 的特性或找寻相应的替代方案,是分布式事务的重点工作。 本地事务 在不开启任何分布式事务管理器的前提下,让每个数据节点各自管理本人的事务。它们之间没有协调以及通信的力量,也并不相互知晓其他数据节点事务的成功与否。本地事务在功能方面无任何损耗,但在强全都性以及最终全都性方面则力不从心。 两阶段提交 XA 协议最早的分布式事务模型是由 X/Open 国际联盟提出的 X/Open Distributed Transaction Processing(DTP)模型,简称 XA 协议。 基于 XA 协议实现的分布式事务对业务侵入很小。它最大的优势就是对使用方透亮?????,用户可以像使用本地事务一样使用基于 XA 协议的分布式事务。XA 协议能够严格保障事务 ACID 特性。 严格保障事务 ACID 特性是一把双刃剑。事务执行在过程中需要将所需资源全部锁定,它愈加适用于执行时间确定的短事务。对于长事务来说,整个事务进行期间对数据的独占,将导致对热点数据依靠的业务系统并发功能衰退明显。因而,在高并发的功能至上场景中,基于 XA 协议两阶段提交类型的分布式事务并不是最佳选择。 柔性事务 假如将实现了 ACID 的事务要素的事务称为刚性事务的话,那么基于 BASE 事务要素的事务则称为柔性事务。BASE 是基本可用、柔性形态和最终全都性这 3 个要素的缩写。 在 ACID 事务中对全都性和隔离性的要求很高,在事务执行过程中,必需将全部的资源占用。柔性事务的理念则是通过业务规律将互斥锁操作从资源层面上移至业务层面。通过放宽对强全都性和隔离性的要求,只需求当整个事务最终结束的时候,数据是全都的。而在事务执行期间,任何读取操作得到的数据都有可能被转变。这种弱全都性的设计可以用来换取系统吞吐量的提升。Saga 和 TCC 都是典型的柔性事务实现方案。 结论 基于 ACID 的两阶段事务和基于 BASE 的最终全都性事务都不是银弹,可通过下表具体对比它们之间的区分。 两阶段提交 柔性事务 业务改造 无 实现相关接口 全都性 支持 最终全都 隔离性 支持 业务方保证 并发功能 严峻衰退 略微衰退 适合场景 短事务 低并发 长事务 高并发 缺乏并发度保障的两阶段事务不能称之为完善的分布式事务处理方案;而缺乏对 ACID 原义支持的柔性事务都甚至不能称之为数据库事务,它更适合服务层的事务处理。 放眼当前,实难找到无需权衡即可放之四海而皆准的分布式事务处理方案。 JDTX 的分布式事务处理方案 JDTX 的设计目标是强全都(支持 ACID 的事务原义)、高功能(甚至强于本地事务)、1PC(完全摒弃两阶段提交和两阶段锁)的完全分布式事务两头件,目前可用于关系型数据库。它接受完全开放 SPI 的设计方式,供应与 NoSQL 对接的可能,能够将多元异构数据维持在同一事务中。 设计理念 首先通过一张架构图来直观的了解一下 JDTX 的构成。 JDTX 由事务管理器(TM)和资源管理器(RM)组成。 事务管理器用于生成全局单调递增的事务日志序列号(LSN),事务的提交和回滚等核心流程处理,以及未提交事务的本地元祖(Tuple)持有。 资源管理器用于管理活跃事务数据。JDTX 的设计特点是将在事务中的数据(称之为活跃数据)和不在事务中的数据(称之为落盘数据)分别。活跃数据在落盘至预写日志系统(WAL)之后,并将数据保存至自研的多版本快照(MVCC)内存引擎中。落盘数据则是通过异步刷盘的方式,将 MVCC 引擎中的数据以流量可控的方式同步至最终的存储介质中(如:关系型数据库)。 事务内查询会将落盘数据和活跃数据合并,并依据当前事务的隔离级别猎取出符合当前事务可见性的数据版本。 方案亮点 无损事务方案 JDTX 接受 WAL + MVCC 引擎的方式实现了事务的 ACID 原义。 原子性 全都性支持 JDTX 的 MVCC 引擎可以看做是一个集中式缓存,可以将两阶段提交简化至一阶段提交。维持单一节点中数据的原子性和全都性,即将分布式事务的范畴缩减到本地事务的范畴。 MVCC 引擎可以通过分片 + 主从同步的方式维持水平扩展和高可用的力

文档评论(0)

bob157641554 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档