【发布时间】: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