2016-04-28 3 views
3

分散(ピアツーピア)クラスタの通知/プッシュサービスを設計することは容易ではありません。たとえば、CassandraがサービスAへの通知をプッシュしたい場合、1つのテーブルフィールドがサービスBで値を変更した場合、それは簡単ではありません。これは、Cassandraが分散型に構成されている(5ノードなど)ため、3つのノードのクォーラムがコミットされた時点を知らずに、変更をAにプッシュするためです。ただし、集中型(マスター - スレーブ)クラスタでは、状況が異なります。たとえば、ZooKeeperは、5つのうち3つのノードがコミットされたことを知り、通知サービスを整理することができます。分散クラスタで通知/プッシュサービスを設計するにはどうすればよいですか?

どのように分散型クラスタでこのようなプッシュサービスを設計できますか?

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

別のオプション:サービスBは、定足数が満たされていることカサンドラから3つのACKを受信した場合には、Bはそれを送信する代わりのカサンドラ自体に通知を送信します。

その他の適切なソリューションはありますか?

答えて

2

Cassandra 整合性レベルを使用できます。それはある程度の時間を待つようなものですが、この方法で正しいデータを確実に得ることができます。小さな例で

書き込み

あなたは、その後、書き込みに、 3のRFを持っているあなたは3の整合性レベルを置けば、あなたは3の答えを必要と想像してみて一貫性のある書き込みを検証するコンピュータ(データを書き込む)

READ

あなたはすべてにこの引数を設定することができますが、必要な数が大きいほど、遅くなることになります。 RFと同じくらい多くのマシンが問題ないと思いますので、異なるレプリカからのすべてのタイムスタンプを比較できます。

定義済みの整合性レベルがいくつかあります。カサンドラが一致するように作られていないため、

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

このメカニズムは、カサンドラが遅くなり、代わりに利用できるようにする:こののより良い理解を持っているために、次のドキュメントをお読みください。一貫性が必要な場合は、HBaseまたはMongoDBをご覧ください。

関連する問題