论文学习:Lotus Scalable Multi-Partition Transactions on Single-Threaded Partitioned Databases
数据库相关论文学习
论文学习:Lotus Scalable Multi-Partition Transactions on Single-Threaded Partitioned Databases
Zhou, Xinjing, et al. “Lotus: scalable multi-partition transactions on single-threaded partitioned databases.” Proceedings of the VLDB Endowment 15.11 (2022): 2939-2952.
本文针对 H-Store/VoltDB 这类单线程分区数据库在多分区(MP)事务场景下性能极差的问题,提出了 Lotus 系统。原有的 RCST(Run-to-Completion-Single-Thread)方案在单分区(SP)事务下性能极高,但 MP 事务几乎没有并发,导致吞吐量严重下降。Lotus 旨在显著提升 MP 事务性能,同时保持 SP 事务的高性能。
insight:
- 分区级锁是 MP 事务并发的主要瓶颈。通过将锁粒度从分区级细化到“granule”(逻辑子分区),可以大幅提升并发性。
- 网络延迟和分布式提交协议(如2PC)是 MP 事务的主要性能障碍。通过批处理和异步复制,可以摊薄网络和提交的开销。
- 批处理和异步复制可以显著提升系统在有 straggler(慢事务)时的鲁棒性,避免整个批次被拖慢。
具体方案:
Granule-based Locking(粒度锁)
将分区进一步虚拟划分为 granule,事务只锁定实际访问的 granule,提升并发性,降低锁冲突。
批处理执行与提交(Batch Execution & Commit)
MP 事务批量执行,遇到网络等待时可以切换到其他事务,最后批量提交,摊薄网络和提交协议的开销。
异步复制与确定性重放(Asynchronous Replication & Deterministic Replay)
事务日志异步复制到备份节点,备份节点根据主节点的锁序和命令顺序并行重放,保证一致性且高效。
优化恢复机制
通过批量日志和 granule 级别的锁序信息,恢复时可以并行重放事务,降低恢复时间和复杂度。
支持共享锁和灵活调整 granule 数量
既支持读写并发,也能根据工作负载动态调整 granule 数量,适应不同场景。
本文由作者按照 CC BY 4.0 进行授权