【问题标题】:How to scale a PHP application (servers, mysql, memcache)如何扩展 PHP 应用程序(服务器、mysql、memcache)
【发布时间】:2011-02-08 11:54:06
【问题描述】:

我目前正在为瑞士的一个社会项目创建一个网站。

在用户溢出之前,我想准备应用程序进行扩展。

我自己回答了很多问题,但还有一些问题。

我解释我想做什么。


第一

在开始时,应用程序将只有一台服务器(短时间),带有 DNS、PHP、Mysql、Data 和 memcache。


第二

那我把它们一分为二

  1. DNS、Mysql、内存缓存
  2. 数据,PHP

第三

这就是问题所在,我不知道该怎么做才能让应用程序运行良好。

我可以:

  1. 前端:负载均衡器、内存缓存、DNS
  2. Web 1:PHP、数据
  3. Web 2:PHP、数据
  4. Mysql

这就是方案,所有 PHP 会话都保存在数据库中。

但是,我如何同步数据? 我是否运行 Rsync 以使它们保持最新。 是否可以确定将它们放在单独的磁盘(网络磁盘)上? 但是在这种情况下,如果用户上传,我该怎么办?

如果网站取得更大的成功,我们必须继续构建更大的结构,这不会造成更新延迟吗?

或者直接访问亚马逊的网络服务会是一件好事吗?

一些信息 我使用 codeigniter 作为框架。 我使用linux作为webserver(现在没有选择发行版,但应该是Debian)

提前感谢您的回答。

【问题讨论】:

  • AWS 提供了一些用于拆分服务的出色工具:用于静态元素的内容交付和 S3,用于分布式数据库的 RDS 和 SimpleDB,以及用于可扩展服务器资源的 EC2。
  • 实际上有超过 10 种方法可以让几到一千个 Web 服务器共享同一个文档根目录,请查看 serverfault。在大容量站点的数据库中存储会话?您可能会对 MySQL 复制和查询负载平衡更感兴趣。
  • @Onigoetz ,我能知道你想出的最终方法吗?我什至在尝试类似的网站。提前感谢您的回复

标签: php codeigniter scalability


【解决方案1】:

根据Wikipedia,瑞士有 460 万德语使用者、150 万法语使用者以及 50 万意大利语、罗曼什语和其他语言使用者。因此,我怀疑您会发现单个服务器可以满足您的需求。猜猜每个月或每天有多少人会访问您的网站,以了解在遇到扩展问题之前您能获得多大的规模。

所以,我认为您不必担心缩放问题!奖励:您不用担心这个问题的时间,可以用来为您的用户解决其他问题。

【讨论】:

  • 同意,您应该始终衡量性能,然后消除您看到的瓶颈。也就是说,如果该站点必须快速扩展,那么规划多个 Web 服务器仍然是一个好主意。一旦你可以扩展到两个,大部分管道将就位以扩展到更多......
  • OP 需要使用集群 FS 并从数据库中获取会话。为登录用户生成一个页面需要多少次查询?
  • -1 ...答案并不能证明需要/不需要扩展,它提出了一个应该测试的假设(即不需要扩展)。可能有其他原因(除了用户数量)需要扩展。
  • @Summer 另外要记住的是,在 SO 上,这不仅仅是 OP 的问题,其他用户也可能会来这里寻找实际可能存在的解决方案需要深思。即使您的答案在逻辑上似乎是正确的,但它并没有解决真正的问题,但您的答案就像有人发帖说要获得更强大的硬件,确保暂时解决了问题,但实际上并没有解决核心问题。很遗憾,我是-1。
【解决方案2】:

按照 Flickr 和 Facebook 等网站似乎使用的顺序,有几种常见的扩展 Web 服务的途径:

  • 根据概念(API、登录、媒体文件、广告、静态页面、动态页面)拆分服务器
  • 根据不需要加入的概念(登录、长期报告、页面数据等)拆分数据库
  • 编译/优化您的 PHP 和其他资源(sprites、编译后的 css、zend)
  • 添加缓存(前端、后端)
  • 添加委托(循环等)

但是,在缩放之前,先测量一下。一组测试,计算你的容量,在你需要之前不要优化。

【讨论】:

    【解决方案3】:

    我看到了一些可疑的事情:

    • 您有一个 SQL 服务器,并且您正在将会话存储在一个站点上的一个数据库中,该站点的数据量非常大。如果有人登录,生成一个页面需要多少次查询?当您最终使用 MySQL 复制时,预期的减慢速度是多少?

    • 如果使用集群 FS,一切都“保持”同步。当网络服务器 2 上的构建 B 中断时,您不会最终在网络服务器 1 上构建 A。如果您真的期望有那么多流量,那么在上传更改然后同步所有节点所需的时间里,您只会惹恼一千人。

    我已经部署了在使用 OCFS2 的集群上运行的应用程序,该集群拥有超过 40 个节点而没有问题,而 OCFS2 并不是完全可用的“最佳”集群 FS。查看Lustre 并考虑将会话保存在磁盘上。

    【讨论】:

      【解决方案4】:

      请记住,您可以挂载/共享文件夹。

      您将同步哪些数据?

      您可以考虑将数据放在数据库机器或其他机器上。 db 机器一开始通常是一个好主意,因为它的 IO 可能比普通的 Web 服务器更大。

      设置 SAN 或类似设备可能是个好主意,这样您的数据就可以保存在一个地方。处理多个数据副本是一件很痛苦的事情。走这条路意味着你也可以把数据库文件放在那里。

      【讨论】:

        猜你喜欢
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-04
        • 2013-06-26
        • 1970-01-01
        • 2012-07-02
        • 1970-01-01
        相关资源
        最近更新 更多