【问题标题】:maintaining dynamic consistency level in datastax在 datastax 中保持动态一致性级别
【发布时间】:2015-02-27 22:42:43
【问题描述】:

我有一个 5 节点集群和复制因子为 3 的键空间。操作的性质是写比读重要得多,但读操作的频率大约是写操作的 10 倍。为了在提高整体性能的同时实现一致性,我选择将写入的一致性级别设置为 ALL,将读取的一致性级别设置为 ONE。但这会导致即使一个节点关闭,操作也会失败。

如果检测到一个节点关闭,或者如果存在查询执行异常,是否有一种方法可以同时将 (Write,Read) 的一致性级别从 (ALL,ONE) 更改为 (QUORUM, QUORUM) ;另外,这样做的方式是没有任何操作通过临时阶段,在该阶段它看到临时 (QUORUM, ONE) 设置。

我们还计划将容量扩大到两倍,即 3 个数据中心,每个数据中心 4 个节点。是否可以定义自定义一致性级别,例如(任何一个数据中心中的 ALL 级别和其他数据中心中的 ONE 级别)。我认为读取的 (EACH_ONE) 级别加上上面的写入级别将确保一致性,但即使节点出现故障,集群也能保持可用。

【问题讨论】:

    标签: cassandra high-availability datastax consistency


    【解决方案1】:

    灵活性是存在的,因为您可以根据每个请求设置一致性级别。根据您使用的客户端,有一些不错的功能。例如,java driver 有一个叫做DowngradingConsistencyRetryPolicy 的东西,如果请求失败,它将以下一个最低一致性级别重试,直到请求成功。这将重试的复杂性推到了客户端,所以你不必为它写一堆代码,真的很棒!

    Java 驱动程序还允许您使用 Statement#setConsistencyLevel() 配置每个请求的一致性级别

    就自定义一致性级别而言,这不是您可用的选项(无需更改 cassandra 源代码),但我认为可用的内容应该足够了。

    对于读取,我认为确保读取数据中心之间的一致性没有多大价值。我认为 LOCAL_QUORUM 绰绰有余,但如果你真的关心,你可以使用 EACH_QUORUM 之类的东西来确保所有数据中心都同意,但这会严重影响你的响应时间和可用性。例如,如果您的一个数据中心完全停机,您将根本无法进行读取(除非降级)。

    对于写入,如果您关心响应时间和可用性,我强烈建议您不要在多数据中心设置中使用 ALL。根据您的要求,LOCAL_QUORUM 应该绰绰有余。

    虽然 Cassandra 的优点之一是一致性是可调的,但您可以根据需要拥有尽可能多的强一致性,但请记住,Cassandra 作为高可用性、分区容错系统处于最佳状态。

    Christos Kalazantis 的演讲 'Eventual Consistency != Hopeful Consistency' 是关于一致性的一个非常好的演示文稿,我认为它确实指出了很多这些要点,这表明 ONE 的一致性级别足以满足许多用例。

    【讨论】:

      猜你喜欢
      • 2018-07-26
      • 2018-07-09
      • 2020-09-27
      • 2021-01-22
      • 2020-12-02
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      相关资源
      最近更新 更多