0

我有一个多数据中心(DC1,DC2)环境,每个数据中心有 3 个节点,每个数据中心 RF=3。

  1. 想知道触发器是否可以在多数据中心环境中的生产中使用。如果是这样,如何实现?

  2. 案例 A:如果我开始向 DC1 插入数据,它将在 DC1 中有 3 个副本,并负责将数据复制到其他数据中心 DC2。每次插入 DC2 时,我都希望触发事件发生并通知应用程序中最新插入的值。可能吗?

  3. 案例B:如果不是第2点,将数据同时插入两个数据中心DC1、DC2(指向单个表)并避免触发器概念是否很好?对网络流量有影响吗?根据最新的时间戳,该表将具有对表的最后插入,当从任一区域查询时,该表将用于该目的。

Consistency level as LOCAL_QUORUM for Read
Consistency level as ONE for write
dse 4.8.2

通过这些一致性级别,可以实现良好的一致性,从而降低跨数据中心的写入操作延迟。

用例:

我们有两个不同区域(DC1 和 DC2)的应用程序(2 个域)。DC1 区域的用户使用域 1 访问应用程序,DC2 区域的用户使用域 2 访问应用程序。同一区域的数据被摄取到 DC1,当在其 DC 中复制时,DC1 的协调器将在其他 DC (DC2) 中复制数据。Dc2 从 DC1 收到数据的那一刻,我们想让应用程序知道最新的信息(使用一些触发事件机制可用的轮询。只是想知道这是否可以用 cassandra 触发器实现。

有人可以就案例 A 和案例 B 提供反馈吗?并且在生产中将是有效的。谢谢

4

2 回答 2

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 仍将处理数据的复制和同步。

于 2016-02-09T20:39:05.360 回答
0

通常,多数据中心概念用于工作负载分离(例如实时查询分析搜索不同的数据中心)。Cassandra 自己负责跨多个 DC 复制数据。因此,提出您的问题案例 B似乎不是一个正确的选择,因为:

  1. Cassandra 自动跨多个 DC链接复制数据
  2. 案例A是可行的。使用触发器的警报/通知

希望,这会有所帮助。

于 2016-02-09T20:37:42.637 回答