4

我正计划创建一个拥有大量用户的应用程序(Rails)——它会从小规模开始,但我希望它能够处理一百万或更多。

我想构建一个每秒能够处理 2500 多个请求的系统。每个请求都需要写入(用于记录目的)以及从庞大的用户列表中读取,由用户名索引(我建议为此目的使用 MongoDB),读取的结果将发送回用户.

我有点不清楚 mongo 将如何处理读取和写入,所以我有这样的想法,即使用 Mongo 来永久存储记录,然后每次服务器启动时将它们加载到 Redis 中,以便更快地访问,以便 Mongo除了写入之外,不需要处理任何事情。

这听起来合理还是对 Mongo 和 Redis 的严重滥用?

交货速度至关重要。

4

3 回答 3

3

实际上,仅使用 Redis 就可以创建整个应用程序。你想做的是研究 Redis 的设计模式。一个不错的起点是 Karl Seguin 的 PDF,名为The Little Redis book

例如,使用 Redis 的哈希值来保存所有用户的信息。

此外,如果计划得当,您不需要将其他持久性存储(例如 Mongo 或 MySQL)与 Redis 结合使用,因为 Redis 本身就是持久性的。你只需要选择一个好的分片/复制策略,它可以让你足够灵活地应对未来的系统变化。

于 2012-07-03T16:11:59.030 回答
2

我认为您所询问的堆栈肯定是一个非常好的解决方案,并且针对高性能站点进行了相当多的战斗测试。Trello(由创建此站点的同一个人创建)使用类似的架构以及 craigslist。

Trello 技术栈文章

Craigslist 也使用这个

Redis 速度很快,除了正常的失效类型功能外,它还具有出色的 pub/sub 机制,这使其成为大多数缓存中的佼佼者。Mongo 是一个我非常熟悉的数据库,我认为它非常适合各种数据存储目的,并且是一个可扩展的可靠企业数据库,保护数据完整性并检查 SLA 企业术语清单中的一堆标记

我认为这是一个很好的组合,但真正的问题应该是我是否需要这个。对于您的负载,我认为 Mongo 本身可以很好地处理这个问题(并提供数据完整性),如果您真的想要,您可以在具有足够内存的服务器上运行它,以确保您的数据集适合内存(非规范化和良好的模式设计是关键) . Foursquare 仅在内存中运行在 Mongo 上。

所以想想这是否有必要,但记住简单总是赢。Redis/Mongo 非常强大,但要掌握两个数据存储并管理它们也需要更多的工作。

谢谢, 普拉西斯

于 2012-07-03T21:06:28.357 回答
1

正如其他人所提到的,使用单一服务对我来说更有意义。不过,有理由将日志记录数据保存在内存中。如果您需要分发写入,我会尝试使用简单的东西,如果可能的话使用日志文件,或者使用 Scribe 或 Flume。

于 2012-07-04T13:30:31.230 回答