AWS 云上的 LAMP 托管 - 要重写哪些 PHP 代码?
Posted
技术标签:
【中文标题】AWS 云上的 LAMP 托管 - 要重写哪些 PHP 代码?【英文标题】:LAMP hosting on AWS Cloud - what PHP code to re-write? 【发布时间】:2011-11-11 21:15:38 【问题描述】:我想在云上托管一个 php 应用程序以利用按需可扩展性。我担心如果我的应用程序出现在Digg/Slashdot/流行博客(希望所有这些地方)上,那么我的网站很可能会崩溃。所以,我正在研究 A*mazon EC2、RackSpace 云服务器等。* 但我对 Cloud Architecture 感到困惑。在基于常规 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 将具有相同的负载。
我正在考虑的一些云服务器是:
-
亚马逊 EC2
RackSpace 云站点
RackSpace 云服务器
PagodaBox(仍处于测试阶段,但不允许 crons):http://www.pagodabox.com/
Go Grid 可扩展网站架构:http://www.gogrid.com/cloud-hosting/cloud-hosting-packages/scalable-website.php(虽然这非常昂贵。我希望从单个服务器开始,然后自动提供额外的 Web 服务器和/或额外的 DB 服务器根据需要处理负载峰值)
任何提示将不胜感激。
谢谢
【问题讨论】:
首先,阅读 Ted Dziuba 的 this article 关于缩放的内容。然后,继续。 是的,让我们假设该网站确实在 Digg 等网站上得到了推荐,而“可扩展性”确实是我的问题。另外,假设 PHP 应用程序是供应商应用程序。像 ModernBill、OSCommerce、Magento 等,目标用户数 == 300 万独立用户。每月每天有 25% 活跃。 虽然这是一个很好的问题,但对于这个论坛来说可能有点宽泛。为了解决您关于会话的具体问题之一,如果您使用的是 Yii,您可以使用 database as session data storage 或其他使用 Redis 或类似应用程序的网络存储。 【参考方案1】:我与一家托管公司的技术支持人员进行了交谈。他看起来不像超级极客,但他给了我这个建议:创建多个 Web 服务器和多个数据库服务器。方法如下:
多个网络服务器:他说你应该加载你的图片 多台服务器上的应用程序。最初启动 1 台服务器。如果 负载高,启动其他图像。负载均衡器将 自动开始向您的网络的这个新实例发送查询 服务器。 数据库服务器:创建多个数据库服务器。 1个大师和几个 奴隶。他说,你需要重写一些 PHP 代码 并执行以下操作:
会话处理:他说修改你的 PHP 代码,以便将会话存储在 "DB" 中。
DB 相关代码:删除所有“加入”操作。我不确定这是否可以删除所有连接操作。 关于如何做到这一点的任何提示?有没有办法在保留“加入”操作的同时“扩展”?
就是这样。真的,是这个吗?还是您认为还有其他事情需要处理?
另外,创建多个数据库服务器实例(主从)。只写给主人。我需要始终运行至少两 (2) 台数据库服务器。 如果负载不高,我不会无缘无故地为额外的数据库服务器付费吗?
【讨论】:
以上是关于AWS 云上的 LAMP 托管 - 要重写哪些 PHP 代码?的主要内容,如果未能解决你的问题,请参考以下文章
AWS EC2 与 AWS API Gateway 上的 Node.js RESTful API 服务器