如何扩展PHP应用程序(服务器,mysql,memcache)

时间:2010-04-15 17:04:29

标签: php codeigniter scalability

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

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

我自己回答了许多问题,但有些问题仍未解决。

我解释我想做什么。


第一

在开始时,应用程序将只有一个服务器(短时间)与DNS,PHP,Mysql,数据和内存缓存。


第二

然后我将它们分成两部分

  1. DNS,Mysql,memcache
  2. 数据,PHP

  3. 第三

    这是问题所在,我不知道如何正确地执行此操作以保持应用程序正常运行。

    我能做到:

    1. 前:负载均衡器,内存缓存,DNS
    2. Web 1:PHP,DATA
    3. Web 2:PHP,DATA
    4. Mysql的
    5. 这将是方案,所有PHP会话都保存在数据库中。

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

      如果网站获得更多成功并且我们必须继续使用更多结构,那么它会不会在更新上产生一些延迟?

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

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

      提前感谢您的回答。

4 个答案:

答案 0 :(得分:15)

根据Wikipedia,瑞士有460万德语人士,150万法语人士和0.5百万意大利语,罗曼什语和其他语言。所以我怀疑你会发现一台服务器符合你的需求。猜猜每个月或每天访问您网站的人口百分比,以了解在遇到扩展问题之前您可以获得多大的数据。

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

答案 1 :(得分:8)

根据Flickr和Facebook等网站的使用顺序,有一些扩展网络服务的常用途径:

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

但是,在缩放之前,请测量。一组测试,计算您的容量,并且在您需要之前不进行优化。

答案 2 :(得分:2)

我看到一些有问题的事情:

  • 您有一台SQL服务器,并且您正在将数据库存储在您预计会有极高容量的网站上。如果有人登录,那么生成单个页面需要多少查询?当您最终使用MySQL复制时,预期的速度会减慢多少?

  • 如果使用群集FS,一切都“保持”同步。当Web服务器2上的构建B中断时,您将不会在Web服务器1上结束构建A.如果你真的希望有那么多的流量,在上传更改所需的时间内,然后同步所有节点,你就会生气一千人。

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

答案 3 :(得分:0)

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

您要同步哪些数据?

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

设置SAN或类似设备可能是个好主意,因此您的数据会保留在一个位置。多个数据副本是一个难以处理的问题。走这条路线意味着你也可以把db文件放在那里。