在AWS云上托管LAMP - 需要重写哪些PHP代码?

3
我希望在云上托管PHP应用程序,以利用按需可扩展性。我担心如果我的应用程序被推荐到Digg/Slashdot/流行博客(希望所有这些地方),那么我的网站很可能会崩溃。因此,我正在研究Amazon EC2、RackSpace Cloud Servers等。但是我对云架构感到困惑。在基于常规cPanel的共享主机上托管PHP应用程序非常简单。将代码FTP上传到public_html目录即可完成。
但是在云中,我们将拥有多个服务器。我的理解是,在云中,您得到一些VM空间和一些负载均衡器。当您需要更多资源时,只需提供另一个VM即可。负载均衡器将请求发送到所有可用资源。
那么,您如何处理这些问题:
- 会话管理/会话连续性: 显然,Cloud-Server-1不会知道Cloud-Server-2上的用户会话。那么,在基于云的托管中如何管理这个问题?我需要重新编写一些处理会话的PHP代码吗? (我正在考虑托管在Yii框架中完成的电子商务PHP脚本) - 处理会话的PHP代码是否需要重新编写或者是否有处理它的抽象层?基本上,我是否只需FTP上传应用程序,然后一些抽象层会处理所有事情,还是我必须重新编写一些代码? - 数据库扩展:当负载很重时,我认为可以配置Amazon EC2或任何云服务器自动提供更多服务器。此外,增加速度和可靠性的最佳方法可能是拥有多个服务器。但我不确定它是如何工作的。我的意思是,数据库中的“数据”必须共享。
那么,多个数据库服务器如何维护?如果每个数据库都是实时复制的副本。那么它将如何减轻负载?我的意思是,如果您在DB1上查询,然后实时在DB2上执行此查询(如果没有,则DB2中的数据不同于DB1),则两个DB将具有相同的负载。
我正在考虑的一些云服务器是:
  1. Amazon EC2(亚马逊弹性云计算服务)
  2. RackSpace Cloud Sites(RackSpace云站点)
  3. RackSpace Cloud Servers(RackSpace云服务器)
  4. PagodaBox(目前仍处于测试阶段,不支持cron定时任务):http://www.pagodabox.com/
  5. Go Grid可扩展的网站架构:http://www.gogrid.com/cloud-hosting/cloud-hosting-packages/scalable-website.php(尽管这非常昂贵。我希望从一个单一服务器开始,然后根据需要自动提供额外的Web服务器和/或额外的数据库服务器来处理负载峰值)

欢迎提供任何建议。

谢谢!


1
首先,阅读 Ted Dziuba 关于扩展的文章(http://teddziuba.com/2008/04/im-going-to-scale-my-foot-up-y.html),然后继续。 - Problematic
是的,让我们假设该网站确实被Digg等平台推荐,并且“可扩展性”真的是我的问题。此外,假设PHP应用程序是供应商应用程序,例如ModernBill、OSCommerce、Magento等,并且目标用户数为300万独立用户。每月活跃用户占25%。 - Red Sci
1
虽然这是一个很好的问题,但可能对于这个论坛来说有点太宽泛了。关于你的具体关于会话的一个问题,如果你正在使用Yii,你可以使用数据库作为会话数据存储或使用像Redis等应用程序的其他网络存储。 - ldg
1个回答

0

我和一家托管公司的技术支持人员交谈。他似乎不是一个超级极客,但他给了我这个建议:创建多个Web服务器和多个DB服务器。以下是具体步骤:

  • 多个Web服务器:他说你应该在多个服务器上加载应用程序的镜像。最初启动1台服务器。如果负载高,启动其他镜像。负载均衡器会自动开始向您的Web服务器的新实例发送查询。
  • DB服务器:创建多个DB服务器。1个主服务器和几个从服务器。

他说,您需要重写一些PHP代码并执行以下操作:

  1. 会话处理:他说修改您的PHP代码,使会话存储在“DB”中。

  2. 与DB相关的代码:删除所有“join”操作。我不确定是否可能删除所有连接操作。 有关如何执行此操作的任何提示? 在保留join操作的同时“扩展”的方法没有吗?

就这些了。真的,就这样吗?或者您认为还有其他需要注意的事项吗?

此外,要创建多个数据库服务器实例(主从)。只写入主服务器。我需要始终运行至少两个(2)个数据库服务器。如果负载不高,那么我会无缘无故地支付额外的数据库服务器费用吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接