5

我们正在部署一个高度动态的网站。峰值容量每分钟处理和更新大约 20,000 个项目。每个项目的大小范围从 1kb 到 500kb。这些项目需要每分钟在缓存中检索、处理和更新。

我们预计前两三个月的用户流量将达到 1000 人。当每个用户登陆网站时,他们可能会请求一些受欢迎的内容,但其他人可能会请求不受欢迎的内容。所有内容都是持久存储中内容的更高级别的处理形式。因此,绝对有必要将所有已处理的项目放在低延迟存储中,以获得出色的用户体验,无论是受欢迎的还是不受欢迎的。

我们分别尝试过 Memcache、Redis 和 Couchbase。

Memcache 速度非常快,但我们遇到了某些板块内存不足和活动项目开始被驱逐的问题。

Redis,比 Memcache 相对慢,如果你想要项目的持久性,那就太好了。

然而很快我们就意识到我们需要分片和复制。

Couchbase 提供了开箱即用的功能。与 Couchbase 服务器接口的 Moxi 客户端有其自身的问题,即无法处理繁重的并发进程。它会开始丢失集合并时不时地获取。移至与之交互的 Python SDK。当集群中的一个节点出现故障时,它的性能很差,它根本无法发现新的拓扑。最终在缓存中丢失了一些数据,并且在网站上闲置了几个小时。

当我们意识到没有完美的产品可以满足我们的需求时。您必须了解所有技术和您自己的需求。您必须预见您的数据将如何演变并做好相应的准备。最好的解决方案可能是多种技术的混合。然而,把它说出来是希望那里可能有其他东西。我们正在接近 2012 年底。对于一个由强大硬件支持的开箱即用解决方案来提供我们需要的东西有多难。

任何想法和有见地的文章的链接将不胜感激。谢谢!

4

1 回答 1

8

以下是关于您上面提到的一些技术的一些说明。

内存缓存:

Memcached 只是一个缓存系统,不会为您提供任何数据持久性。如果您选择使用 memcached,那么您将需要选择其他类型的持久性存储来保存所有数据。Memcached 也是一个非常简单的缓存系统,不为您提供复制,但它们是不同的项目(如 repcache),在 memcached 中添加了这样的功能。如果我想使用关系数据库作为我的持久层,我只会使用 memcached。

雷迪斯:

Redis 是一个数据结构服务器,只能用于此目的。Redis 的缺点是您只能在单个服务器上运行它,如果您想拥有多个 Redis 服务器,则需要进行应用程序分片。我见过的大多数 Redis 部署都与另一种数据库技术并驾齐驱。

沙发底座:

Couchbase 2.0 将把产品变成一个文档数据库。该产品内部具有 memcached 技术,因此您可以开箱即用地获得 memcached,这意味着亚毫秒级延迟。最重要的是,您可以获得复制、跨数据中心复制和查询支持。另外,请注意大多数 Couchbase SDK 不使用 moxi,Python SDK 仍处于测试阶段。

可能对您有用的一件事是查看 YCSB 基准测试项目以及已经发布的一些结果。这个项目将让您很好地了解这些和其他数据库在负载下的表现。然后,一旦你找到了一些你喜欢的东西,你就可以查看他们的功能列表并找出产品具有最适合你开发的应用程序的功能。

另外,如果我有关上述数据库的任何信息不正确,请告诉我。这些项目发展迅速,有时很难跟上。

编辑:我还应该提到,Couchbase 是列出的数据库中唯一提供复制、分片和低延迟的数据库。我想 redis 将允许您拥有一个副本服务器并因此进行复制,但是您所做的任何分片都必须在应用程序层完成。

于 2012-10-26T17:29:15.657 回答