【问题标题】:MongoDB for a viral website. AWS + MongoDB a good solution?MongoDB 用于病毒式网站。 AWS + MongoDB 一个好的解决方案?
【发布时间】:2017-08-03 09:51:30
【问题描述】:

我们正在考虑将 MongoDB 用于我们预计会像病毒一样传播的网站(想想在头 1-2 个月内有数百万用户)。

我们将需要大量内存,因为我们需要它的速度。我们正在考虑至少 32 GB 的内存。专用服务器的问题是每月购买 32-64 GB 内存的成本非常高。

AWS 的主要好处是您可以随用随付。

我查看了 Amazon EC2“High-Memory Double Extra Large Instance”,它有 34.2 GB 的内存和 850 GB 的存储空间。

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

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

后端使用 Node.js,因此 MongoDB 是理想的选择。

我的问题是:

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

【问题讨论】:

  • 作为参考,每月 100 万次点击是平均每分钟 23 次点击。几乎地球上的每个网络服务器每秒都可以轻松处理 23 次点击。平均每月有 6000 万次点击。您需要更好地定义您的指标。 “我预计每分钟点击 10,000 次”(持续一个月内点击 432,000,000 次)。这是一个更好的性能指标。每月 100 万并不具有规模价值。
  • OP 说的是数百万用户,而不是数百万点击量。这可能会将预期流量提高到接近 4.32 亿的水平。
  • 另外,“一个单独的,用于保存您收到的推文”。亲爱的上帝,我希望这不是您建立网站的方式。

标签: node.js mongodb database


【解决方案1】:
  1. 一旦您真正拥有了用户,您就需要与活动数据集大小一样多的内存。现在是 0GB,所以暂时不要购买所有这些实例。

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

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

  4. 当您已经在抱怨价格时,AWS 是否是正确的选择?绝对不。租用服务器或自己建造一台服务器并将其托管在数据中心中,您将花费更少的钱。用于服务器的 ECC RAM 的购买成本约为每 GB 25 美元;在配置要租用的东西时,每月每 GB 的费用可能会超过 25 美元。您想一次性构建一台 1500 美元的服务器,还是为同样的事情向亚马逊支付 720 美元每月?

实际上,您应该可能做的是让自己获得每月 20 美元的 VPS。那会给你半个内存左右。写你的网站。开始您的促销活动。当您拥有真正的用户并且他们创建了超过一半的数据库记录时,请升级到更大的 VPS。这是一个按钮式的 5 分钟过程,您可以在大多数 VPS 主机(如 Linode)上进行一晚。当您超出他们更大的实例时,您可以自己构建或租用自己的服务器。此时,您有实际需求,并且对应用程序的性能有足够的了解,从而知道您真正需要什么规格。

我错过了一点:为什么选择 MongoDB?您是否有理由认为像 MySQL 或 SQL Server 这样的 RDBMS 对您的应用程序是错误的,但对 Facebook 没有错,对 Twitter 没有错,对 MySpace 没有错,对 eBay 没有错,对对于您可以命名的任何大型站点都没有错?

最近使用 MongoDB 快速扩展并使用它的唯一可识别名称是foursquare,他们的 MongoDB 设置崩溃并烧毁。当它失败时,它失败主要是因为它不是一种经过验证的技术,而且他们没有完全理解它在分布式大规模环境中是如何工作的,尽管有 32 名技术高超的员工,他们却宕机了 11 个小时 em> 想办法把它拼凑起来。

【讨论】:

    【解决方案2】:

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

    在构建 twitter 规模的网站时,您将不得不花费大量时间对您的解决方案进行基准测试。您最终可能会运行数十台甚至数百台服务器,不仅是为了保持规模,而且也是为了处理冗余。相信我,twitter 并不是一夜之间就提出了他们的架构,也不是他们只是拼凑了一堆现成的组件。多年来,他们一直在调整和优化,自己编写了很多高性能部件。

    阅读高可扩展性博客http://highscalability.com/ 是一个不错的起点

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-20
        • 2010-11-19
        • 2012-10-07
        • 2012-03-31
        • 1970-01-01
        相关资源
        最近更新 更多