Calvin:分区数据库系统的快速分布式事务


这篇论文是由耶鲁大学的一组计算机科学家发表的,很好地讨论了分布式事务的问题,解释了为什么它很复杂,以及为什么许多分布式数据库决定完全放弃事务以简化操作。然后它引入了一个非常有趣的想法,即通过确定性锁定方案避免昂贵的提交协议。
Calvin 本身并不是一个数据库,它就像论文中描述的那样“ ......一个实用的事务调度和数据复制层...... ”。Calvin 使用确定性排序保证来显着降低与分布式事务相关的通常令人望而却步的争用成本。
Calvin 旨在与非事务性存储系统一起运行,将其转换为无共享的近线性可扩展数据库系统,提供高可用性和完整的 ACID 事务。这些事务可能跨越分布在集群中的多个分区。Calvin 通过在存储系统之上提供一个层来实现这一点,该层处理分布式事务的调度,以及系统中的复制和网络通信。
在本文的其余部分,我们将讨论分布式事务问题的概述以及 Calvin 如何解决这个问题,然后我们将快速概述 Calvin 的体系结构以及一切如何协同工作以使之前的承诺成为可能。
Calvin 实现低成本分布式事务和同步复制的方法如下:当多台机器需要就如何处理特定事务达成一致时,它们会在事务边界之外进行处理——也就是说,在它们获取锁并开始执行事务之前。一旦就如何处理事务达成一致,就必须按照计划执行完成——节点故障和相关问题不会导致事务中止,因为故障节点可以从运行相同计划的副本中恢复平行或通过重播它的历史。并行计划执行和计划历史的重放都要求活动计划是确定性的——否则副本可能会发散或历史可能会错误地重复。
Calvin 依赖于复制事务输入而不是效果,并且因为执行计划(执行所有事务的顺序)是确定性的,并且对于接下来尝试哪个事务存在全局协议,Calvin 不需要进行重做日志记录,例如,而不是像 Aurora 这样支持事务可交换性的其他数据库系统。
 
Calvin架构
Calvin 旨在充当任何实现基本 CRUD 接口(创建/插入、读取、更新和删除)的存储系统之上的可扩展事务层。
Calvin 由 3 个主要部分组成:

  1. Sequencer:负责拦截事务并将事务放入全局事务输入序列中。它还负责复制。
  2. 调度器:它负责使用确定性锁定方案来协调事务执行,以保证与排序器指定的串行顺序等效,同时允许事务由事务执行线程池并发执行。
  3. 存储:负责处理所有物理数据布局。Calvin 事务使用简单的 CRUD 接口访问数据,因此任何支持类似接口的存储引擎都可以相当容易地插入 Calvin。

更多点击标题