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