前面介绍的并发控制算法评估里面,测试也把Cavlin算进来了,这里简单介绍下Calvin。详细的可以参考下原论文 Calvin: Fast Distributed Transactions for Partitioned Database Systems (SIGMOD12’)。
Calvin面向的场景是确定性事务,不支持交互式事务。这一点需要特别注意。在互联网很多业务里,这点是不适用的。
Calvin也是一个deterministic的分布式数据库,这里先简单介绍下它的架构。
整体上分成三层:
- 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。
扫描二维码,分享此文章