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

如何扩展PHP应用程序(服务器、mysql、memcache),php,codeigniter,scalability,Php,Codeigniter,Scalability,我目前正在为瑞士的一个社会项目创建一个网站 在出现用户溢出之前,我想让应用程序按比例运行 我自己回答了很多问题,但还有一些问题没有回答 我解释我想做什么 首先 一开始,应用程序将只有一台服务器(短时间),其中包含DNS、PHP、Mysql、Data和memcache 秒 那我就把它们一分为二 DNS、Mysql、memcache 数据,PHP 第三 这就是问题所在,我不知道如何在这里做到这一点以保持应用程序正常运行 我可以做到: 前端:负载均衡器、memcache、DNS Web1:PHP

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

在出现用户溢出之前,我想让应用程序按比例运行

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

我解释我想做什么


首先

一开始,应用程序将只有一台服务器(短时间),其中包含DNS、PHP、Mysql、Data和memcache


那我就把它们一分为二

  • DNS、Mysql、memcache
  • 数据,PHP

  • 第三

    这就是问题所在,我不知道如何在这里做到这一点以保持应用程序正常运行

    我可以做到:

  • 前端:负载均衡器、memcache、DNS
  • Web1:PHP,数据
  • Web2:PHP,数据
  • Mysql
  • 这就是方案,所有PHP会话都保存在数据库中

    但是,如何同步数据? 我是否运行Rsync以使其保持最新。 我是否将它们放在单独的磁盘(网络磁盘)上以确保安全? 但在这种情况下,我如何处理用户上传的情况

    如果网站获得了更大的成功,我们必须进行更大的建设,它不会在更新上造成一些延迟吗?

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

    一些信息 我使用codeigniter作为框架。 我使用linux作为Web服务器(现在不选择发行版,但应该是Debian)


    提前感谢您的回答。

    记住您可以装载/共享文件夹

    您将同步哪些数据

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

    最好设置一个SAN或类似设备,以便将数据保存在一个位置。数据的多个拷贝是一个很难处理的问题。按照这条路线,你也可以把数据库文件放在那里。

    据统计,瑞士有460万讲德语的人,150万讲法语的人,还有150万讲意大利语、罗马语和其他语言的人。所以我怀疑你会发现一台服务器就能满足你的需要。在遇到扩展问题之前,猜猜每个月或每天有多少人会访问您的站点,以了解您可以获得多大的规模


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

    按照Flickr和Facebook等网站的使用顺序,有几种常见的方法可以扩展web服务:

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

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

    我看到一些可疑的事情:

    • 您有一台SQL server,并且您将会话存储在一个站点上的数据库中,您希望在该站点上有极高的容量。如果有人登录,生成一个页面需要多少个查询?当您最终使用MySQL复制时,预期的速度会降低多少

    • 如果使用群集FS,则所有内容都“保持”同步。当webserver 2上的构建B中断时,您不会以webserver 1上的构建A结束。如果你真的期望有那么多流量,那么在上传更改、同步所有节点所需的时间内,你只会激怒上千人


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

    AWS为分割服务提供了一些很好的工具:内容分发和S3用于静态元素、RDS和SimuldB用于分布式数据库,以及EC2用于可扩展的服务器资源。有10种方式可以让多到一千个Web服务器共享相同的文档根目录,检查服务器故障。在高容量站点的数据库中存储会话?您可能会对MySQL复制和查询负载平衡更感兴趣。@Onigoetz,我能知道您提出的最后一种方法吗。我甚至在尝试类似的网站。提前感谢您的响应。里德,您应该始终衡量性能,然后消除瓶颈。也就是说,如果这个网站需要快速扩展,那么为多个web服务器制定计划仍然是一个好主意。一旦您可以扩展到两个,大部分管道将到位以扩展到更多…OP需要使用群集FS并从数据库中获取会话。为登录用户生成一个页面需要多少查询?-1。。。答案并不能证明需要/不需要缩放,它提出了一个需要检验的假设(即,不需要缩放)。可能还有其他原因(除了用户数量)需要扩展。@Summer还需要记住的一点是,在SO上,这不仅仅是OP的问题,其他用户也可能会来这里寻找一个解决方案,在那里可能确实需要考虑。尽管你的答案在逻辑上似乎是正确的,但并不能解决真正的问题,但你的答案就像是有人发布了关于获得更强大的硬件的帖子,肯定能暂时解决问题,但实际上并不能解决核心问题。很遗憾,我给了你-1分。