目前,我们使用Redis作为内存中的快速缓存。它工作得很好。问题是,一旦Redis重启,我们需要通过从持久化存储中获取数据来重新填充它。这会使我们的持久存储超载,超出其容量,因此恢复需要很长时间。
我们研究了Redis持久化选项。最好的选择(不会影响性能)是使用AOF和'appendfsync with‘。但是使用这个选项,我们可以丢失最后一秒的数据。这是不可接受的。将AOF与“appednfsync”一起使用会有相当大的性能损失。
因此,我们正在评估单节点Aerospike。它是否保证在断电时不会丢失数据?也就是说,为了响应写操作,一旦Aerospike向客户端发送成功,即使我拔下服务器的电源线,数据也永远不会丢失。正如我在上面提到的,我相信Redis可以通过“appednfsync”选项来保证这一点。但我们没有考虑它,因为它有相当大的性能损失。
如果Aerospike可以做到这一点,我想详细了解持久化是如何在Aerospike中工作的。请分享一些资源来解释同样的问题。
我们不是在寻找分布式系统,因为对我们来说,强一致性是必须的。数据不应该在节点故障或大脑分裂的情况下丢失。
如果不是aerospike,你能告诉我另一个可以帮助实现这一点的工具吗?
发布于 2016-04-20 20:00:29
我为航空公司工作。您可以选择将命名空间存储在内存、磁盘或具有磁盘持久性的内存中。在所有这些场景中,与Redis在现实世界的基准测试中相比,我们的表现都很好。
考虑磁盘上的存储当写入发生时,它在被刷新到磁盘之前命中缓冲区。直到该缓冲区被成功地写入,ack才返回到客户端。如果您在缓冲区刷新之前拔出电源线,则在单节点群集中,写入可能已确认到客户端,然后丢失。
答案是在群集中有多个节点和一个replication-factor >= 2。然后,写入将转到客户端和复制副本上的缓冲区,并且必须在两者上都成功,然后才能作为成功确认到客户端。如果从一个节点拉出电源,则副本仍将存在于另一个节点上,不会丢失任何数据。
因此,是的,可以在最低成本和最小延迟的情况下,使Aerospike具有最大的弹性。最好的做法是下载社区版,看看您的想法。我想你会喜欢的。
https://stackoverflow.com/questions/36739117
复制相似问题