gpt4 book ai didi

Cassandra 作为分布式锁

转载 作者:行者123 更新时间:2023-12-03 09:08:15 34 4
gpt4 key购买 nike

我正在尝试评估分布式锁定的各种选项。我入围的选项中很少有 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;

释放锁可以删除该key的数据,以便其他线程可以尝试获取它。

我正在对我入围的所有选项进行一些性能测试。从结果来看,Zookeeper 和 MySQL 没有显示任何错误,而 Cassandra 的结果非常不一致,并且在所有测试中都显示很少或更多的错误。大多数情况下,错误是“在一致性 QUORUM 写入查询期间 Cassandra 超时

我的问题是,Cassandra 是否用于分布式锁定?如果尝试获取此锁的并发线程数量超过,它可以扩展吗?

期待专家的想法。提前致谢。

最佳答案

Cassandra 从 CAP 选择 AP定理,意味着在 Cassandra 中可用性和分区容错性通常被认为比一致性更重要。 Cassandra 提供最终一致性。

Cassandra 不提供锁定机制。您正在使用IF NOT EXISTS,这是一个轻量级事务。

轻量级事务(IF 子句)

While durable transactions with eventual/tunable consistency is quite satisfactory for many use cases, situations do arise where more is needed. Lightweight transactions, also known as compare and set, that use linearizable consistency can probably fulfill those needs.

Cassandra 在提出轻量级事务的节点和集群中任何所需的副本之间进行四次往返,以确保正确执行,从而影响性能。

Lightweight Transactions

这听起来成本很高——也许太高了。这就是 Cassandra 给你超时异常的原因。因此,在绝对必要的情况下保留轻量级事务

来源: http://www.datastax.com/documentation/cassandra/2.0/cassandra/dml/dml_ltwt_transaction_c.html https://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0

关于Cassandra 作为分布式锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45126146/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com