iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >GRIT协议——分布式事务方案
  • 471
分享到

GRIT协议——分布式事务方案

GRIT协议——分布式事务方案 2018-12-16 05:12:15 471人浏览 绘本
摘要

  本文介绍了GRIT协议的基本思想,该思想在IEEE国际数据工程国际会议(ICDE)2019上宣布,并提供了使用该协议的一部分为JanusGraph实现事务性存储后端的示例。该示例着重于只有一个数据库的系统,但是正如我们所说,GRIT

GRIT协议——分布式事务方案

 

本文介绍了GRIT协议的基本思想,该思想在IEEE国际数据工程国际会议(ICDE)2019上宣布,并提供了使用该协议的一部分为JanusGraph实现事务性存储后端的示例。该示例着重于只有一个数据库的系统,但是正如我们所说,GRIT可以支持由多个数据库组成的系统的ACID事务。

 

背景

微服务体系结构中,应用程序可以调用多个微服务,通常由不同的团队以不同的应用语言实现这些微服务,并且可以使用多个基础数据库来实现其功能。这种流行的架构为跨多个微服务的一致的分布式事务带来了新的挑战。在微服务环境中支持ACID事务是一个真正的要求,但是使用现有技术很难实现,因为为单个数据库设计的分布式事务机制无法通过微服务轻松扩展到具有多个数据库的情况。

在涉及多个独立数据库的环境中,传统的两阶段提交(2PC)协议1本质上是系统进行分布式事务处理的唯一选择,而无需额外的应用程序工作。但是,由于潜在的许多协调参与者的路径很长,并且在阶段中需要定,因此在横向扩展平台中无法很好地工作。另一方面,使用由 诸如Saga之类的框架2执行的事务日志将招致应用程序复杂的补偿逻辑,并且由于不可逆的部分成功的事务而可能产生业务影响。 

为了解决这些问题,我们开发了  GRIT,为全球统一的分布式事务的一个新的协议,它巧妙地结合乐观并发控制(OCC)、2PC和确定性数据库等想法 来实现的,这是一个高性能,具有多个基础数据库的跨微服务的全局一致事务。

 

GRIT:一种用于分布式事务的协议

下图说明了具有两个数据库的微服务系统中的GRIT协议。中心显示了GRIT组件,包括GTM,GTL,DBTM,DBTL和LogPlayer。

 

  1. 应用程序:调用微服务以实现其功能。
  2. 微服务(实体服务):构建模块,为应用程序提供面向业务的服务以实现业务逻辑。每个数据库可能支持多个微服务,并且每个微服务可能彼此独立。
  3. 数据库服务:提供数据库读写接口,直接访问数据库服务器。当支持事务时,它还在执行阶段缓存每个事务的读/写结果,并将它们发送到其DBTM以在提交时解决冲突。
  4. 数据库分片服务器:数据库的后端存储服务器,通常进行复制以实现高可用性。

GRIT的关键组件包括:

 

  1. 全局事务管理器(GTM):它协调多个数据库之间的全局事务。可以有一个或多个GTM。
  2. 全局事务日志(GTL):代表GTM的事务请求队列。GTL中事务请求的顺序确定了全局事务之间的相对可序列化顺序。GTL的持久性是可选的。
  3. 数据库事务管理器(DBTM):每个数据库领域的事务管理器。它执行冲突检查和解决,即本地提交决定位于此处。
  4. 数据库事务日志(DBTL):每个数据库领域中的事务日志,用于记录与此数据库相关的逻辑提交的事务(包括单数据库事务和多数据库事务)。DBTL中的事务顺序确定整个数据库系统的可序列化顺序,包括GTM规定的全局顺序。日志序列号(LSN)被分配给每个日志条目。
  5. LogPlayer:此组件将日志条目按顺序发送到后端存储服务器,以供它们应用更新。每个数据库服务器按顺序应用逻辑提交的事务的日志条目。

 

为了理解协议的细节,我们使用下图显示分布式事务的主要步骤。

 

在GRIT中,分布式事务经历三个阶段:

 

  1. 乐观执行(步骤1-4):当应用程序通过微服务执行业务逻辑时,数据库服务将捕获事务的读集和写集。在此阶段,没有实际的数据修改发生。
  2. 逻辑提交(步骤5-11):一旦应用程序请求事务提交,每个数据库服务点的读集和写集都将提交到其DBTM。DBTM使用读集和写集进行冲突检查,以实现本地提交决策。GTM将收集DBTM针对事务的所有本地决策后,做出全局提交决策。一旦将其写集持久保存在所涉及数据库的日志存储(DBTL)中,就在逻辑上提交事务。这涉及GTM和DBTM之间的最小协调。
  3. 物理应用(步骤12-13):日志播放器异步将DBTL条目发送到后端存储服务器。数据修改在此阶段进行。 

总的来说,我们的方法避免了在执行和提交过程中的悲观锁定,并避免了等待物理提交。我们采用乐观的方法,并且通过利用逻辑提交日志并使用确定性数据库技术将物理数据库更改从提交决策过程中移出,从而使提交过程非常高效,这类似于复制中的日志播放。

GRIT能够以最小的协调性为调用微服务的应用程序实现一致的高吞吐量和可序列化的分布式事务。GRIT非常适合很少冲突的事务,并为否则需要复杂机制才能在具有多个基础数据库的微服务之间实现一致事务的应用程序提供关键功能。

 

将GRIT应用于单个数据库

如您所见,GRIT协议包含两个部分:一个部分用于由DBTM,DBTL和LogPlayer执行的每个数据库(或每个数据库领域,可以是数据库的一组分区),另一部分用于跨数据库协调通过GTM和DBTM。在下图中,我们使用单个数据库的GRIT协议部分说明了JanusGraph的事务图存储后端(称为NuGraphStore)的设计。

下图显示了如何使用两个可用区(AZ1和AZ2)部署实施NuGraphStore。

JanusGraph的NuGraphStore后端涉及一些组件:

 

  • 存储插件:一个自定义的存储接口插件,用于在JanusGraph数据库层与后端存储引擎和事务协议组件之间建立接口。
  • DBTM:执行关键冲突检查以实现乐观并发控制。这是执行OCC的单个数据库上GRIT分布式事务协议的一部分  。
  • LogStore:复制的日志存储,用于事务的突变。每个事务一个条目,由日志序列号(LSN)索引。在传统数据库系统中,它充当WAL(预写日志)。LogStore是我们GRIT架构中的DBTL。 
  • LogPlayer:异步将日志条目应用于后端服务器。
  • 存储引擎:后端存储引擎,用于存储JanusGraph中的KCV(键-列-值)数据。它执行读取和变异,并支持LSN定义的快照。

当应用程序执行事务时,它可以从store中读取并写入store。对于读取操作,存储插件直接与存储服务器通信(除了在事务的写入集中找到的读取之外)。当应用程序在事务上下文中从存储中读取时,存储插件还会跟踪读取集。每次读取的有用信息是对,其中lsn是反映在读取键值时存储引擎状态的日志序列号。LSN是事务突变条目的日志索引。它由LogStore分配,用于定义后端数据库的快照。未找到的键key被记录为读取集的一部分。与读取不同,用于写入的存储插件不会直接与存储服务器通信。相反,存储插件会在事务的相应写入集中缓冲写入操作。

事务提交时,存储插件将提交的请求和已为事务捕获的读集和写集提交给DBTM。DBTM对事务的OCC执行标准冲突检查。如果没有冲突,它将把写集保留到复制的LogStore中(即,它将写集发送到LogStore副本集,因此所有副本都保持完全相同的日志)。此时,事务提交将在逻辑上完成,并且DBTM将响应存储插件。LogPlayers跟踪LogStore,并根据数据分布将日志条目播放到后端分片服务器。

值得指出的是,以上描述是一种基本设计,具有许多提高性能和可靠性的机会。我们相信,在对各个组件进行优化或对DBTM使用复制以实现更高的可靠性之前,使基本组件成熟将更有生产力。同样,我们可以通过不同的方式捕获读集和写集。对于KV Store,冲突检查所需的最简单形式是对。但是,为了支持更复杂的系统,该读取集可能包含范围或谓词,如第6章所述。 在撰写本文时,NuGraphStore正在经历开源过程。

 

您可能感兴趣的文档:

--结束END--

本文标题: GRIT协议——分布式事务方案

本文链接: https://www.lsjlt.com/news/6376.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • GRIT协议——分布式事务方案
      本文介绍了GRIT协议的基本思想,该思想在IEEE国际数据工程国际会议(ICDE)2019上宣布,并提供了使用该协议的一部分为JanusGraph实现事务性存储后端的示例。该示例着重于只有一个数据库的系统,但是正如我们所说,GRIT...
    99+
    2018-12-16
    GRIT协议——分布式事务方案
  • 分布式事务的方案有哪些
    本篇内容介绍了“分布式事务的方案有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!分布式事务的产生我们先...
    99+
    2022-10-19
  • LCN分布式事务解决方案详解
    目录一、什么是分布式事务?二、lcn的实现思路2.1 本地执行的状态怎么提交给全局事务?2.2 本地事务的提交或回滚怎么实现?三、lcn的使用3.1 下载lcn-manager (全...
    99+
    2022-11-12
  • 基于 XA 事务协议,用代码实现一个二阶段分布式事务
    在具体的 Demo 之前,先来补充一点 XA 事务的知识:DTP 模型与 XA 规范。DTP 模型与 XA 规范是由 X/Open 维护,也就是现在的 open group,官方网址:http://www.opengroup.org/。op...
    99+
    2023-06-02
  • JPA多数据源分布式事务处理方案
    目录前言问题背景XA事务方案XADataSource,XA协议数据源XAConnectionXAResource引入Atomikos依赖创建JTA事务管理器MysqlXA事务行为链式...
    99+
    2022-11-13
  • 浅谈Java实现分布式事务的三种方案
    目录一、问题描述二、分布式事务2.1、什么是分布式系统2.2、什么是事务2.3、什么是本地事务2.4、什么是分布式事务三、如何进行分布式事务控制3.1、CAP理论3.2、分布式系统如...
    99+
    2022-11-12
  • 详解Java分布式事务的 6 种解决方案
    介绍 在分布式系统、微服务架构大行其道的今天,服务间互相调用出现失败已经成为常态。如何处理异常,如何保证数据一致性,成为微服务设计过程中,绕不开的一个难题。 在不同的业务场景下,解决...
    99+
    2022-11-12
  • 分布式事务的7种解决方案是怎样的
    分布式事务的7种解决方案是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 分布式事务最经典的七种解决方案随着...
    99+
    2022-10-18
  • Spring Cloud + Nacos + Seata整合过程(分布式事务解决方案)
    目录一、简介二、seata-server部署1、官网下载2、解压到本地3、修改配置文件4、seata数据库初始化5、业务数据库6、启动seata-server三、微服务项目集成Sea...
    99+
    2022-11-13
  • 一文搞明白Java Spring Boot分布式事务解决方案
    目录前言1. 什么是反向补偿2. 基本概念梳理3. 什么是两阶段提交4. AT 模式5. TCC 模式6. XA 模式7. Saga 模式前言 分布式事务,咱们前边也聊过很多次了,网...
    99+
    2022-11-13
  • ORA-01591: 锁被未决分布式事务处理解决方案
     http://www.killdb.com/2011/10/11/ora-01591-lock-held-by-in-doubt-distributed-transaction.html 现场...
    99+
    2022-10-18
  • 微服务分布式事务4种解决方案是怎么样的
    本篇文章给大家分享的是有关微服务分布式事务4种解决方案是怎么样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。分布式事务分布式事务是指事务的参与者,支持事务的服务器,资源服务器...
    99+
    2023-06-02
  • java SpringBoot 分布式事务的解决方案(JTA+Atomic+多数据源)
    目录前言一、项目依赖二、数据源配置三、数据源的注册四、配置数据源对应的sqlSessionFactory五、测试接口六、建立JtaTestContoller.java七、在test....
    99+
    2022-11-13
  • redis实现分布式事务的方法
    小编给大家分享一下redis实现分布式事务的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题描述:某电商平台,首发一款新品...
    99+
    2022-10-18
  • 微服务架构中分布式事务实现方案怎样何取舍
    提起微服务架构,不可避免的两个话题就是服务治理和分布式事务。数据库和业务模块的垂直拆分为我们带来了系统性能、稳定性和开发效率的提升的同时也引入了一些更复杂的问题,例如在数据一致性问题上,我们不再能够依赖数据库的本地事务,对于一系列的跨库写入...
    99+
    2023-06-05
  • 关于MySQL与Golan分布式事务经典的七种解决方案
    目录1、基础理论1.1 事务1.2 分布式事务2、分布式事务的解决方案2.1 两阶段提交/XA2.2 SAGA2.3 TCC2.4 本地消息表2.5 事务消息2.6 最大努力通知2....
    99+
    2022-11-12
  • 图文精讲java常见分布式事务理论与解决方案
    目录CAP理论C(Consistence):一致性A(Availability):可用性P(Partition tolerance):分区容错性BASE理论BA(Basically ...
    99+
    2022-11-12
  • 怎么解析Spring Cloud 微服务系统中分布式事务解决方案
    本篇文章为大家展示了怎么解析Spring Cloud 微服务系统中分布式事务解决方案,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、微服务系统最大的挑战数据的并发访问、修改不同请求之间的数据隔离多...
    99+
    2023-06-04
  • MongoDB技术开发中遇到的分布式事务问题解决方案分析
    MongoDB技术开发中遇到的分布式事务问题解决方案分析随着互联网的迅猛发展,分布式系统变得越来越重要。在分布式系统中,数据库的一致性和事务的处理变得尤为关键。MongoDB作为一种流行的NoSQL数据库,也面临着分布式事务的挑战。本文将分...
    99+
    2023-10-22
    解决方案 MongoDB 分布式事务
  • java分布式事务之可靠消息最终一致性解决方案
    目录一、什么是可靠消息最终一致性事务1、本地事务与消息发送的原子性问题2、事务参与方接收消息的可靠性3、消息重复消费的问题二、解决方案1、本地消息表方案2、RocketMQ事务消息方...
    99+
    2022-11-13
    java分布式事务消息一致性 java分布式事务
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作