关于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}]我的问题是-如果我并行地从两个节点执行这个查询,会发生什么。他们俩都有被录取的机会吗?
(本堆栈过流问题描述了我的用例)
发布于 2015-04-02 11:32:33
不可能同时执行这两个查询。对于每个查询,将创建一个提案,用于基于paxos达成共识。这将基于与该提案相关的时间戳,在该提案中,两个提案中的一个相同的时间戳仍将失效。
发布于 2015-04-02 11:36:18
Paxos的作用是查询被“线性化”:在两个不同的节点上同一行同时执行的两个查询将导致其中一个被执行。而第二条则不适用。显然,这两个查询都必须使用CAS才能工作。更多信息,这里和这里。
https://stackoverflow.com/questions/29408075
复制相似问题