【问题标题】:Cassandra's lightweight transactions & Paxos consensus algorithmCassandra 的轻量级交易 & Paxos 共识算法
【发布时间】:2015-06-07 02:53:10
【问题描述】:

关于 Paxos 算法,我有一个非常特殊的问题,该算法在 Cassandra 的轻量级事务中实现:

如果两个节点同时发出同一个提案会怎样?他们都得到 '[applied]: true' 吗?

例如,考虑这个表:

ids:
+-------------------+---------------+
| id_name (varchar) | next_id (int) |
+-------------------+---------------+
| person_id         |             1 |
+-------------------+---------------+

这个查询:

UPDATE ids
SET next_id = 2
WHERE id_name = 'person_id'
IF next_id = 1

如果我执行这个查询,我会得到响应:

[{[applied]: True}]

如果我再次执行它,那么它不会被接受,因为 next_id != 1,我得到:

[{[applied]: False, next_id: 2}]

我的问题是 - 如果我从两个节点并行执行此查询会发生什么。他们都有机会被录取吗?

(我的用例在这个stackoverflow question中描述)

【问题讨论】:

    标签: cassandra paxos consensus


    【解决方案1】:

    两个查询不可能同时执行。对于每个查询,都会创建一个提案,该提案将用于基于 paxos 达成共识。这将基于与提案相关联的时间戳发生,其中相同的时间戳仍然会使两个提案失败。

    【讨论】:

      【解决方案2】:

      Paxos 的效果是查询得到“线性化”:在 2 个不同节点的同一行上同时执行 2 个查询将导致其中一个在另一个之后执行。第二个将不适用。显然,这两个查询都必须使用 CAS 才能工作。更多信息herehere

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-16
        • 1970-01-01
        • 1970-01-01
        • 2018-05-08
        • 1970-01-01
        • 2022-07-23
        • 2022-01-08
        • 1970-01-01
        相关资源
        最近更新 更多