我是如何基于二阶段递交及悲观锁实现分布式事务的( 三 )

3. 接收到读命令时,如果与当前锁冲突,则根据事务开始时间戳判断是通知冲突事务向后更新递交时间戳,还是忽略该冲突。

>如果Raft节点意外崩溃后重新启动时,会先从存储加载锁信息恢复当前锁列表。

三、性能测试:

根据作者的经验,锁并不是影响并发性能的原因,冲突才是,所以做了个简单的并发测试。

1. 并发更新同一条记录(冲突激烈):

虚拟机(I74C8G) wrk -t2 -c120 测试约3900tps

对比参照(MacbookPro13 I74C16G):

* PostgreSql: 64线程: 调用640000次共耗时: 179295毫秒 平均每秒调用: 3569

* Cockroach: 64线程: 调用6400次共耗时: 90784毫秒 平均每秒调用: 70

2. 事务插入两条记录(无冲突):

64线程: 调用64000次共耗时: 4008毫秒 平均每秒调用: 15968

推荐阅读