LoopJump's Blog

Calvin简介

2020-04-02

前面介绍的并发控制算法评估里面,测试也把Cavlin算进来了,这里简单介绍下Calvin。详细的可以参考下原论文 Calvin: Fast Distributed Transactions for Partitioned Database Systems (SIGMOD12’)。

Calvin面向的场景是确定性事务,不支持交互式事务。这一点需要特别注意。在互联网很多业务里,这点是不适用的。

Calvin也是一个deterministic的分布式数据库,这里先简单介绍下它的架构。

calvin-arch.png

整体上分成三层:

  • Sequencing Layer:拦截事务,定序。
  • Scheduling Layer:调度执行,保证执行结果不违背sequencer的定序。
  • Storage Layer:数据持久化层,不需要支持事务。

假设只有一个sequencer,这个sequencer拦截并定序事务是简单的,但存在单点的瓶颈问题和SPOF问题。Calvin用一组sequencer,时间上划分为10ms一个epoch,每个sequencer将请求拦截并batch,再发给replication组件定序。

系统中只有一个日志流,所以从根本上可以避免2PC,自然也避免了2PC的阻塞等一系列问题。

后面的执行等都是依赖前面确定性的这个顺序的。

一点总结

Calvin不实用。

Calvin作者自己对比了下Spanner和Calvin,感兴趣的读者可以看看:Spanner vs. Calvin: distributed consistency at scale。

扫描二维码,分享此文章