Cassandra集群可以替代内存中的Redis键值存储吗?

时间:2016-04-19 08:56:58

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

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

我唯一的问题是每个实例都是SPOF。我无法使用Redis群集,因为它不保证一致性。我已经评估了一些像Aerospike这样的工具,没有给出'没有数据丢失保证'。

Cassandra看起来很有希望,因为我可以调整我想要的一致性水平。我计划使用带有复制因子2的Cassandra,并且必须在考虑提交之前将写入写入两个副本。这样就无法保证数据丢失。

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

编辑1:
一点澄清:
我想我需要使用写一致性等级' ALL'并阅读一致性等级' One'。据我所知,使用此一致性级别,我的群集不会容忍任何失败。这对我来说没问题。只要我的数据一致,几分钟的停机时间偶尔就不成问题。在我目前的设置中,一个Redis实例故障导致几个小时的停机时间。

1 个答案:

答案 0 :(得分:0)

  

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

当有更多节点时,Cassandra会更好地处理失败问题。假设您的案例允许有更多节点,这是我的建议。

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

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

如果您使用CL ALL,那么即使一个节点出现故障或过载,您也必须完全停机。

我希望它有所帮助!