2016-04-28 20 views
3

为分布式(对等)群集设计通知/推送服务并不容易。例如,如果我想要Cassandra推送通知到服务A,如果一个表字段已通过服务B更改其值,那并不容易。这是因为Cassandra是以分散的方式组织的,例如5个节点,并且他们不知道何时提交三个节点的法定人数,然后才推动变更为A。但是,在一个集中式(主 - 从)集群中,事情是不同的。例如,ZooKeeper知道5个节点中的3个节点是否被提交,并且可以安排通知服务。如何在分散集群中设计通知/推送服务?

我们如何在分散集群中设计这样的推送服务?

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

另一种选择:如果服务收到卡桑德拉3个的ACK,该仲裁已经被满足,然后将通知发送到一个而不是卡桑德拉本身发送。

还有其他体面的解决方案吗?

回答

2

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

用一个小例子:

想象一下,你有3一个RF,然后在写,如果你把3一致性水平,需要3个答案计算机(写入数据)验证写入的一致性。

阅读

您可以设置此参数所有,但更大的所需数量,越慢会。我认为尽可能多的机器和RF一样好,因此您可以比较不同副本中的所有时间戳。

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

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

这种机制减缓卡桑德拉,因为卡桑德拉不言要一致,而是可用。如果你想要一致性,看看HBaseMongoDB