3

分散型 (ピアツーピア) クラスターの通知/プッシュ サービスを設計するのは簡単ではありません。たとえば、Cassandra に Service Aに通知をプッシュさせたい場合、1 つのテーブル フィールドの値が Service Bによって変更された場合、それは簡単ではありません。これは、Cassandra が分散化された方法 (たとえば 5 ノード) で編成されているためであり、変更をAにプッシュする前に 3 つのノードのクォーラムがいつコミットされるかがわからないためです。ただし、集中型 (マスター/スレーブ) クラスターでは事情が異なります。たとえば、ZooKeeper は、5 つのノードのうち 3 つのノードがいつコミットされるかを認識しており、通知サービスを手配できます。

分散型クラスターでこのようなプッシュ サービスを設計するにはどうすればよいでしょうか?

明らかな解決策の 1 つは、一定時間 (たとえば 10 秒) 待機し、関係なくBに通知することです。

別のオプション: サービスBが Cassandra から定足数が満たされたという確認応答を 3 つ受信した場合、Bは、Cassandra 自体が通知を送信する代わりに、通知をAに送信します。

他にまともな解決策はありますか?

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 が一貫性を持たないように作成されているのではなく、利用できるように作成されているためです。一貫性が必要な場合は、HBaseまたはMongoDBを見てください。

于 2016-04-29T06:50:18.630 に答える
2

あなたが望むのは、Cassandra の将来のバージョンでリリースされる Change Data Capture だと思います。

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

于 2016-04-29T17:24:12.080 に答える