【问题标题】:Can a Cassandra cluster serve as a replacement for an in-memory Redis key-value store?Cassandra 集群能否替代内存中的 Redis 键值存储?
【发布时间】:2016-08-11 08:10:13
【问题描述】:

我的应用程序抓取用户的邮箱并将其保存到 RDBMS 数据库。我开始使用 Redis 作为 RDBMS 数据库的缓存(简单的键值存储)。但逐渐我开始在 Redis 中存储爬虫状态和其他需要持久化的数据。丢失这些数据意味着几个小时的停机时间。我必须确保这些数据的密封一致性。数据不应在节点故障或脑裂情况下丢失。强一致性是必须的。分片由我的应用程序完成。一个 Redis 进程在十个 EC2 m4.large 实例中的每一个上运行。在这些实例中的每一个上。我正在对 Redis 执行高达 20K 的 IOPS。我写的比读的多,尽管我还没有确定两者的实际百分比。我所有的数据都完全在内存中,没有磁盘支持。

我唯一的问题是这些实例中的每一个都是单点故障。我不能使用 Redis 集群,因为它不能保证一致性。我评估了一些其他工具,例如 Aerospike,没有一个提供“无数据丢失保证”。

Cassandra 看起来很有前途,因为我可以调整我想要的一致性级别。我计划使用具有复制因子 2 的 Cassandra,并且必须在考虑提交之前将写入写入两个副本。这提供了“无数据丢失保证”。

通过启动足够多的 cassandra 节点(支持 ssd),我可以替换我的 Redis 键值存储,并且仍然获得类似的读/写 IOPS 和 潜伏?开源 cassandra 是否足以满足我的用例?如果不行,Datastax 企业内存版能解决吗?

编辑 1:
澄清一点:
我想我需要使用写入一致性级别“ALL”和读取一致性级别“One”。我知道在这种一致性级别下,我的集群不会容忍任何故障。这对我来说没问题。偶尔停机几分钟也不是问题,只要我的数据是一致的。在我目前的设置中,一个 Redis 实例故障会导致几个小时的停机时间。

【问题讨论】:

  • 如果“强一致性是必须的”,那么您将不得不使用 SERIAL 一致性,这会带来额外的性能损失。
  • 我计划使用写入一致性级别“ALL”和读取一致性级别“One”。
  • 这为您提供了最终单行的一致性。它不会给您带来隔离,也不允许您在多个表之间进行一致的更改。

标签: cassandra datastax datastax-enterprise key-value-store nosql


【解决方案1】:

我必须确保这些数据的密封一致性。

当有更多节点时,Cassandra 可以更好地处理故障。假设您的案例允许拥有更多节点,这是我的建议。

因此,如果您有 5 个节点,请对 READ 和 WRITE 使用 QUORUM 的 CL。这意味着您始终写入至少 3 个节点并从 3 个节点读取。(对于 5 个节点,QUORUM 为 3)。

  • 这确保了非常高的一致性
  • 还确保了有限的停机时间。即使某个节点出现故障,您的写入和读取也不会中断。

如果您使用 CL ALL,那么即使一个节点停机或过载,您也将不得不完全停机。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多