我有一个多数据中心(DC1,DC2)环境,每个数据中心有3个节点,每个数据中心RF = 3。
案例A:如果我开始将数据插入DC1,它将在DC1中有3个副本,并负责将数据复制到其他数据中心DC2。每次插入DC2时,我都希望发生一个触发事件,并通知应用程序中最新插入的值。有可能吗?
案例B:如果不是第2点,将数据同时插入两个数据中心DC1,DC2(指向单个表)并避免触发概念是否合适? 它会对网络流量产生什么影响吗?根据最新的时间戳,该表将最后一次插入到表中,当从任一区域查询时,该表将用于此目的。
Consistency level as LOCAL_QUORUM for Read Consistency level as ONE for write dse 4.8.2
通过这些一致性级别,可以实现良好的一致性,从而降低跨数据中心的写入操作的延迟。
USECASE:
我们有两个不同地区的应用程序(2个域)(DC1& DC2)。 DC1区域的用户使用域1来访问应用程序和 DC2区域的用户使用域2。数据被摄取 对于相同区域的DC1,当它在其DC中复制时, DC1的协调器将复制其他DC(DC2)中的数据。该 片刻Dc2从DC1接收数据,我们想让应用程序 了解最新信息(Polling_可用一些 触发事件机制。只是想知道这是否可以 用cassandra触发器实现。
有人可以就案例A和案例B提供反馈吗?哪个在生产中是有效的。 感谢
答案 0 :(得分:1)
在上述任何一种情况下,我都不确定为什么要使用触发器通知应用程序已插入值。在我理解的场景中,您的应用程序已经知道最新的值。写入成功后,您可以使用最新值通知您的应用程序。
在A和B两种情况下,你都在反对Cassandra如何运作的一些基本原理。在应用程序级别,您现在需要担心确保跨多个节点和数据中心的数据的复制或最终一致性。这是Cassandra带来的很大一部分。
在案例A和案例B中,您将在两个数据中心复制到的每个节点中为每次写入获取多个相同数据的插入。当您写入DC1时,它也将写入DC2。如果您然后写入DC2,它将被写回DC1。这将以包含相同数据的大量行结束,并将增加磁盘要求和压缩频率。这也将增加网络流量,因为两个DC来回交谈以获得最终的一致性。
从我在这里看到的,我还要问为什么你在3节点集群上做RF = 3。这意味着每个数据中心的每个节点都将拥有所有数据,从而使每个服务器成为其他服务器的完整副本。这似乎有点过分(取决于当然的数据),因为您不会获得Cassandra提供的许多可扩展性优势。
Cassandra将处理数据中心和节点之间的数据同步,因此您的应用程序无需担心这一点。
另一个快速说明 - 目前您的写入使用的是CL = ONE。这意味着您可能最终在写入请求上出现交叉DC延迟。如果将其更改为LOCAL_ONE,则限制CL查询,直到本地DC中的某个节点写入值而不是可能是另一个DC中的节点。 Cassandra仍将处理数据的复制和同步。
答案 1 :(得分:0)
通常,多个数据中心概念用于工作负载分离(例如实时查询,分析和的不同DC)搜索)。 Cassandra本身负责跨多个DC复制数据。 因此,提出问题案例B 似乎不是正确的选择,因为:
希望,这会有所帮助。