写点什么

eBay 发布分布式事务协议 GRIT,多数据库微服务的福音

  • 2019-11-12
  • 本文字数:880 字

    阅读完需:约 3 分钟

eBay发布分布式事务协议GRIT,多数据库微服务的福音

在 2019 年 IEEE 数据工程国际会议(ICDE)上,eBay 工程师提交了一篇论文,介绍了分布式数据库 ACID 事务协议——GRIT。GRIT的关键点在于支持跨微服务使用多个数据库,这些微服务通常用不同的语言实现,并且可能使用多个底层数据库。


eBay 的工程师在论文中写道,GRIT 的目标是填补现有 ACID 事务机制的空白,现有的事务机制在多数据库的情况下难以伸缩。


在涉及多个数据库的环境中,传统的两阶段提交(2PC)协议基本上是实现系统分布式事务的惟一选择。然而,由于路径太长,通常涉及多个协调参与者和阶段锁定,在需要伸缩的平台上表现不佳。另一方面,使用事务日志框架(如 Saga)要求应用程序做出复杂的补偿逻辑,并且可能会出现不可逆的部分成功事务,这会对业务产生影响。


下图显示了使用了两个数据库的微服务应用程序的 GRIT 架构。



如上图所示,GRIT 包括两个主要模块:一组对应于每个数据库的组件——数据库事务管理器(DBTM)、一个数据库事务日志(DBTL)、一个 LogPlayer 和两个负责协调的全局组件——全局事务管理器(GTM)和全局事务日志(GTL)。


GRIT 事务分为三个阶段。在事务执行期间,数据库服务收集事务的读操作和写操作,实际不修改任何数据。当事务被提交时,每个数据库将其读操作和写操作提交给它的 DBTM,DBTM 将对它们进行本地提交决策分析。所有参与的 DBTM 都将它们的本地决策提交给 GTM,GTM 做出全局提交决策。最后,如果事务成功,LogPlayer 将把 DBTL 中收集的条目发送给数据库。


总的来说,我们的方法在执行和提交过程中都避免了悲观锁定,也避免了等待物理提交。我们采用了更为乐观的方式,利用了逻辑提交日志,并使用确定性数据库技术将物理数据库变更移出提交决策过程,使得提交过程变得非常高效。


值得一提的是,GRIT 也可以用于单数据库应用程序。对于这种情况,不需要使用全局组件,提交事务的复杂性也小得多。eBay 工程师提供了一个 GRIT 示例,可用于扩展现有数据库,支持跨多个可用性区域的 ACID 事务。如果你对完整的细节感兴趣,不要错过他们发布的文章。


原文链接


GRIT Protocol Enables Distributed Transactions Across Multi-Database Microservices


2019-11-12 08:002288

评论 2 条评论

发布
用户头像
并没有给出如何解决分布式事务痛点的方案,从文章只看到每个应用将所有决策提交给GTM,由GTM统计进行提交事务。但如何解决GTM在提交过程中部分失败的问题呢?
2019-11-22 16:37
回复
用户头像
只是一个协议么,从文章看不出来什么优点啊
2019-11-22 01:19
回复
没有更多了
发现更多内容

JSP“三大请求传参方式”及“中文乱码问题解决方案”详解

Java 程序员 后端

k8s常见问题大收集

Java 程序员 后端

K8S环境的Jenkin性能问题处理续篇(任务Pod设置)

Java 程序员 后端

Kubernetes 常用命令大全

Java 程序员 后端

Memcached缓存

Java 程序员 后端

Jenkins部署springboot项目

Java 程序员 后端

Jsoup解析html

Java 程序员 后端

markdown+七牛云,让写文更容易

Java 程序员 后端

MyBatis 源码分析 - MyBatis入门

Java 程序员 后端

JVM及GC机制

Java 程序员 后端

Kurento实战之一:KMS部署和体验

Java 程序员 后端

Java黄金五年——1~5年一个Java程序员从入行到大牛的晋升之路

Java 程序员 后端

Linux入门(二) ~ Linux的常用命令

Java 程序员 后端

Kubernetes任务调用Job与CronJob及源码分析

Java 程序员 后端

Linux系统:第四章:Linux文件系统

Java 程序员 后端

MyBatis 框架系列之基础初识

Java 程序员 后端

JetBrains 又出了一款新神器,一套代码适应多端!

Java 程序员 后端

keepalived实现双机热备

Java 程序员 后端

Linux系统:第六章:Linux服务

Java 程序员 后端

Mybatis一二级缓存实现原理与使用指南

Java 程序员 后端

keepalived实现双机热备(1)

Java 程序员 后端

Linux下jdk的安装卸载切换

Java 程序员 后端

Kurento实战之四:应用开发指南

Java 程序员 后端

Linux极速上手,超全面总结

Java 程序员 后端

MongoDB :第六章:Java程序操作MongoDB

Java 程序员 后端

MyBatis事务管理

Java 程序员 后端

JDK8-Object源码

Java 程序员 后端

Layui图片上传组件使用指南

Java 程序员 后端

Log4j2的Appenders配置详解

Java 程序员 后端

JVM之调优及常见场景分析

Java 程序员 后端

Linux常用命令(面试题)

Java 程序员 后端

eBay发布分布式事务协议GRIT,多数据库微服务的福音_架构_Sergio De Simone_InfoQ精选文章