MongoDB用于病毒式网站。 AWS + MongoDB是一个很好的解决方案?

时间:2011-07-18 04:35:25

标签: node.js mongodb database

我们正在考虑将MongoDB用于我们希望传播的网站(在最初的1-2个月内考虑数百万用户)。

我们需要大量内存,因为我们需要这么快。我们至少要看32 GB的内存。专用服务器的问题是32-64 GB内存的每月成本高得惊人。

AWS的主要好处是您可以随意支付/扩展。

我查看了Amazon EC2“高内存双超大型实例”,它具有34.2 GB内存和850 GB存储空间。

该网站将是一个类似Twitter的网站,其状态更新将会很多 - 但不限于160个字符(可能是无限制的字符)。

棘手的部分是Twitter主页如何列出您所关注的人的所有最新推文。我希望Twitter有两个表/“集合”,一个用于保存您发推文的推文,另一个用于保存您收到的推文(但这并不意味着它们正在进行数千到数十万个数据库写入每当有大量关注者的人发布状态更新?)

Backend使用Node.js,因此MongoDB是理想的。

我的问题是:

1)在我们的情况下,我们需要32 GB的内存吗? 2)EC2提供的850 GB存储空间是否足够? 3)EC2或专用服务器更适合MongoDB托管状态更新吗?为什么呢?

3 个答案:

答案 0 :(得分:4)

  1. 实际拥有用户后,您需要的内存与活动数据集的大小相同。现在它是0GB,所以不要再购买所有这些实例。

  2. 您要存储超过850GB的数据吗?你正在建立一个国会图书馆的副本吗?除非那些数百万用户要上传大型二进制对象,为什么还要问850GB是否足够?

  3. 两者都可以正常工作,但拥有自己的硬件可以让您获得更多控制权。您当然可以使用自己的RAID阵列或SAN来超越AWS的IO性能。如果您无法将整个数据库安装在RAM中,那么磁盘IO是您的主要瓶颈。

  4. 当您已经在抱怨价格时,AWS是正确的选择吗?绝对不。您将花费很多,远远少于租用服务器或自己构建服务器并将其放在数据中心中。 ECC RAM服务器的成本约为每GB 25美元;在配置要租用的东西时,它可能会花费你每月超过25美元每月。你想建造一台价值1500美元的服务器一次,还是每月为亚马逊支付720美元>

  5. 你应该可能做的事情,实际上是每月20美元的VPS。这将让你获得半个RAM左右。写你的网站。开始促销活动。当您拥有真实用户并且他们创建了超过半数的数据库记录时,请升级到更大的VPS。这是一个按钮5分钟的过程,你在像Linode这样的大多数VPS主机上做了一晚。当你超过他们的大型实例时,你自己建立或租用自己的服务器。此时,您确实需要了解应用程序的执行情况,以了解您真正需要的规范。

    我错过了一点:为什么选择MongoDB?你有没有理由认为像你的应用程序那样的MySQL或SQL Server等RDBMS是错误的,但对于Facebook来说并没有错,对于MySpace没有错,对于MySpace没有错,对于eBay而言并不错,不是'几乎所有大型网站都可以命名?

    最近迅速扩展并使用MongoDB进行缩放的唯一可识别名称是foursquare,他们的MongoDB设置崩溃并被烧毁。当它失败时,它失败主要是因为它不是一个经过验证的技术,并且他们没有完全理解它在分布式大规模环境中是如何工作的,尽管有32名技术高超的员工,但他们的工作时间<11小时弄清楚如何将它拼凑在一起。

答案 1 :(得分:2)

我想你会发现这个问题的答案是“谁知道?”。我们不知道您的数据访问模式是什么样的,您是否要在此数据库服务器前运行缓存?多少?在什么配置?你多久写一次数据?数据的重要性,是否必须频繁刷新到磁盘?如果你真的要获得200万次点击,那么你可能会在遇到内存问题之前遇到带宽问题,但这又取决于你的更新效率。

在建立一个Twitter规模的网站时,您将不得不花费大量时间对您的解决方案进行基准测试。可能你最终会运行几十个(如果不是数百个)服务器,不仅仅是为了维持规模,还要处理冗余。相信我的推特没有在一夜之间提出他们的架构,也没有他们只是拼凑出一堆现成的组件。多年来,他们一直在进行微调和优化,自己编写了许多高性能部件。

一个好的起点是阅读http://highscalability.com/

上的高可扩展性博客

答案 2 :(得分:2)

如果您有足够多的访问者将您的网络服务器推到极限,那么使用多个较小的服务器可能会更好;一些只是构建和提供网页的人,一些只是缓存预建页面和一些复制的数据库服务器。这样你也不会有一个单一的失败点。

我也没有看到850GB存储中的“状态更新”。假设每个更新都是1kb文本,这对于891.289.600更新就足够了,如果你有100万(活跃)用户,那么每个用户就有821个更新。