适合大型 Facebook 应用程序的服务器架构是什么?

适合大型 Facebook 应用程序的服务器架构是什么?

我们是一个由 3 名学生组成的小组,我们创建了一个 Facebook 应用程序,目前有超过 753,320 名活跃用户,应用程序托管在 LAMP 1&1 服务器上:

- AMD Opteron 1352 4 x 2,1 GHz
- 4 GB RAM.
- 2 x 750 Go (RAID 1 Hardware).
- Connection : 100 Mbps.

这个应用程序运行得很好,没有任何问题。

我们正在准备一款新的应用程序,预计几个月后将有数百万活跃用户。

应用信息 :

  • 使用 PHP / MySQL 创建。
  • 每个用户每次使用至少可以运行 25 个查询。
  • 提供许多静态文件(图像、flash 文件、css、js)。
  • 该应用程序包含 8 个部分,例如游戏、礼物等......

我们想知道该应用服务器的正确架构。

  • 我们需要多少台服务器来托管它?
  • 如果我们在此服务器上托管 php 文件:

    • 英特尔® 酷睿™ i7-920 处理器 4x2.66 GHz
    • 12GB 内存

MySQL远程服务器,以及每个服务器上具有相同配置的静态文件。

该应用程序每天可以处理数百万个请求吗?

  • 您对此类应用程序有什么建议?有人能告诉我建议架构的详细信息吗?

提前致谢。

答案1

关于 MySQL,

  1. mysqltuner对于任何产品盒来说都是必备的。
  2. 慢速查询日志将帮助您获得性能更佳的应用程序。
  3. 打开常规日志(简要地)可能是一件好事,然后对所有查询运行 EXPLAIN 以确保您有正确的索引(无覆盖、良好的基数等)
  4. 您是否在数据库中保留会话?如果可以避免,请不要这样做,但如果无法避免,请考虑使用 MEMORY 表。
  5. 在讨论表类型时,请考虑每个表的实际用途。具有高读/写需求的事务表可能更适合 InnoDB 存储引擎。主要用于写入的表或者读取可能最好以 MyISAM 形式提供。您也登录到数据库吗?请考虑为这些表使用 ARCHIVE 引擎。

答案2

您得到的任何答案都将是胡乱猜测。您确实需要对您的应用程序进行适当的负载测试,使用真实的数据和使用模式贯穿整个硬件和软件堆栈。使用负载测试中的数字来制定可扩展性计划和成本估算。没有什么可以完美地线性扩展,特别是在数据库层,因此即使您有确切的数字,也需要进行一些猜测,并且您可能会在特定组件(例如数据库)中遇到“障碍”。从JMeter,它可以捕获 HTTP 会话以生成负载。商业工具功能更强大,但也非常昂贵。

答案3

如果不确切了解你正在做什么,就不可能给出铁律般的建议。不过,我会说:

现在花点时间规划扩展。考虑虚拟化,它的好处是多方面的。

只需花费很少的钱,您就可以从 Slicehost、Linode、Rackspace Cloud 等公司租用一堆小型 VPS。六个月后,当您取得巨大成功时,您可以租用/购买自己的硬件,并运行自己的虚拟化,或者继续使用您的供应商,或者转移到“真实”服务器,或者其他方式。但如果您认为您将需要多台服务器,请针对集群设置编写应用程序。以专用机箱的成本,您可以运行 10 台“玩具”服务器。

通过利用廉价的虚拟化提供商,您可以确保您的架构可以向外扩展。

如果您考虑了自己的需求,并决定有一天您可能需要运行分段的 mysql 数据库,那么您现在就可以使用廉价的 VPS 对其进行建模。

如果您认为您需要在一堆 PHP 机器前面安装一定数量的负载均衡器,那么您现在就可以这么做。

设置一些服务器/平衡器来提供静态内容也是如此(或者您可以采用 s3/cloudfront 路线)。

但如果您确实预计会有高负载和大量流量,那么最好现在就将其分开,而不是购买最大的专用机箱并祈祷以后能够扩展。

答案4

我想说,考虑到用户群的规模,这里架构中最重要的部分是缓存和按需轻松扩展的能力。看看 Facebook,想一想,2009 年,他们的每日数据增长量为 12TB!是的,每天。

相关内容