3

为去中心化(点对点)集群设计通知/推送服务并不容易。例如,如果我希望 Cassandra 向 Service A推送通知,如果一个表字段已通过 Service B更改了其值,这并不容易。这是因为 Cassandra 是以去中心化的方式组织的,例如 5 个节点,并且在将更改推送到A之前,他们不知道何时提交了三个节点的法定人数。但是,在集中式(主从)集群中,情况有所不同。例如,ZooKeeper 知道 5 个节点中的 3 个何时提交,并且可以安排通知服务。

我们如何在去中心化集群中设计这样的推送服务?

一个明显的解决方案是等待一段时间(例如 10 秒)并通知B无论如何。

另一种选择:如果服务B已收到来自 Cassandra 的 3 个确认已满足法定人数的确认,则B会将通知发送给A,而不是 Cassandra 自己发送通知。

还有其他合适的解决方案吗?

4

2 回答 2

3

您可以使用 Cassandra一致性级别。这就像等待一段时间,但这样你肯定会得到正确的数据。

举个小例子:

想象一下,您的RF为 3,然后在写入时,如果您将一致性级别设置为 3,则需要 3 台计算机(写入数据的计算机)的答案来验证使其一致的写入。

您可以将此参数设置为all,但所需的计数越大,速度越慢。我认为与 RF 一样多的机器都可以,因此您可以比较来自不同副本的所有时间戳。

有一些预定义的一致性级别。为了更好地理解这一点,请阅读以下文档:

https://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml_config_consistency_c.html

这种机制会减慢 Cassandra 的速度,因为 Cassandra 不是一致的,而是可用的。如果您想要一致性,请查看HBaseMongoDB

于 2016-04-29T06:50:18.630 回答
2

我认为您想要的是变更数据捕获,它将在 Cassandra 的未来版本中发布。

https://issues.apache.org/jira/browse/CASSANDRA-8844

于 2016-04-29T17:24:12.080 回答