0

我们正在寻找缓存问题的良好解决方案。我们希望在 Web 服务器集群中分配相对少量的数据(可能是 10 GB),这样:

  1. 数据复制到所有节点
  2. 数据是持久的
  3. 数据可以在本地访问

我们开发缓存解决方案的动机是我们目前有一个单点故障:SQL Server 数据库。很遗憾,我们无法为此数据库设置故障转移集群。我们已经在很大程度上使用了 Memcached,但我们希望避免出现这样的问题:如果 Memcached 节点出现故障,我们会突然出现大量缓存未命中,从而导致对一个端点的大量请求。

相反,我们希望在每个 Web 服务器节点上都有本地持久缓存,以便分配结果负载。当进行检索时,它将通过以下方式:

  1. 检查 Memcached 中的数据。如果它不在那里...
  2. 检查本地持久存储中的数据。如果它不在那里...
  3. 从数据库中检索数据。

当数据发生变化时,缓存键在两个缓存层都失效。

我们一直在寻找一堆潜在的解决方案,但似乎没有一个完全符合我们的需求:

沙发数据库

这非常接近;我们要缓存的数据模型是非常面向文档的。然而,它的复制模型并不是我们想要的。在我看来,复制似乎是您必须执行的操作,而不是节点之间的永久关系。您可以设置连续复制,但这不会在重新启动之间持续存在。

卡桑德拉

这个解决方案似乎主要面向那些有大量存储需求的人。我们有大量的用户,但数据量很少。Cassandra 看起来能够支持n故障转移节点,但节点之间的 100% 复制似乎并不是它的本意;相反,它似乎更倾向于仅分发。

SAN

一个吸引人的想法是我们可以在 SAN 或类似类型的设备上存储一堆文件。我以前没有使用过这些,但似乎这仍然是单点故障;如果 SAN 出现故障,我们会突然去数据库查找所有缓存未命中。

DFS 复制

一个简单的谷歌搜索揭示了这一点。它似乎做我们想做的事;它在复制集群中的所有节点之间同步文件。但营销文本使它看起来更像是一个确保将文档复制到不同办公地点的系统。此外,它还有一些限制,例如文件数上限,这对我们来说效果不佳。

你们中是否有人有与我们类似的要求并找到了满足您需求的良好解决方案?

4

2 回答 2

1

我们已经在生产中成功使用Riak几个月了,这个问题与您描述的有点相似。我们之前也评估过 CouchDB 和 Cassandra。

Riak 在这类问题 imo 中的优势在于分发和数据复制是系统的核心。你定义你想要的集群中数据的副本数量,其余的由它负责(当然它比这要复杂一些,但这就是本质)。我们经历了添加节点、删除节点、节点崩溃的过程,事实证明它具有惊人的弹性。

它在其他方面很像 Couch——面向文档、REST 接口、Erlang。

于 2011-05-17T07:27:27.633 回答
0

你可以检查hazelcast。它不保留数据,但提供故障转移系统。每个节点可以有多个节点来备份它的数据,以防一个节点发生故障。

于 2011-06-14T14:50:11.503 回答