【发布时间】:2017-07-16 16:28:46
【问题描述】:
我正在尝试评估分布式锁定的各种选项。我入围的几个选项是 Zookeeper、MySQL 和 Cassandra。
对于 Cassandra,我的想法是创建一个表,比如锁
create table if not exists app.locks (
key text,
primary KEY (key)
);
然后,作为 acquireLock 过程的一部分,我可以执行插入(如果不存在)查询,如下所示。 acquireLock 进程只有在 insert 返回 true 时才会返回。
INSERT INTO app.locks (key) VALUES ('KEY_1') IF NOT EXISTS;
释放锁可以删除这个键的数据,以便其他线程可以尝试获取它。
我正在对我入围的所有选项进行一些性能测试。有了结果,Zookeeper 和 MySQL 没有显示任何错误,因为 Cassandra 的结果非常不一致,并且在所有测试中都显示了很少或更多的错误。大多数时候错误是“Cassandra 在一致性 QUORUM 的写入查询期间超时”
我的问题是,Cassandra 是用于分布式锁定的吗?如果尝试获取此锁的并发线程数超过,它可以扩展吗?
期待专家的意见。提前致谢。
【问题讨论】:
-
如果您需要分布式锁,请查看 hazelcast:docs.hazelcast.org/docs/latest/manual/html-single/#lock