首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/Ga3vLdjHpbreRCOGl7wk
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券