2016-04-28 70 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