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

标签 database-design amazon-ec2 cloud scalability yii

我想在云上托管一个 PHP 应用程序以利用按需可扩展性。我担心如果我的应用程序出现在 Digg/Slashdot/流行博客(希望所有这些地方)上,那么我的网站很可能会崩溃。因此,我正在研究 A*mazon EC2、RackSpace 云服务器等*,但我对云架构感到困惑。在基于共享主机的常规 cPanel 上托管 PHP 应用程序非常简单。通过 FTP 将您的代码上传到 public_html 目录,您就完成了。

但是有了云,我们就会有多个服务器。我的理解是,在 Cloud 中,您会在某些负载均衡器后面获得一些 VM 空间。当您需要更多资源时,您只需配置另一个 VM。负载均衡器向所有可用资源发送请求。 那么,您如何处理这些事情:

  • session 管理/ session 连续性: 现在,这里显而易见的事情之一是 Cloud-Server-1 不会知道 Cloud-Server-2 上的用户 session 。那么,这在基于云的托管中是如何管理的呢?我需要重新编写一些处理 session 的 PHP 代码吗? (我正在考虑托管在 Yii 框架中完成的电子商务 PHP 脚本)
  • 是否需要重写处理 session 的 PHP 代码,或者 是否有处理它的抽象层?基本上,我只是 FTP 上传应用程序,然后一些抽象层负责 还是我必须重写一些代码?

  • 数据库扩展:当负载很重时,我想我可以配置 Amazon EC2 或任何云服务器来自动提供更多服务器。此外,拥有多台服务器以提高速度和可靠性可能是个好主意。但我不确定它是如何工作的。我的意思是,数据库中的“数据”必须共享。

那么,如何维护多个数据库服务器?如果每个数据库都是彼此的实时副本。那么它会如何减轻负载呢?我的意思是,如果您在 DB1 上执行查询,然后实时地在 DB2 中执行此查询(否则,DB2 中的数据将与 DB1 中的数据不同),那么两个 DB 将具有相同的负载。

我正在考虑的一些云服务器是:

  1. 亚马逊 EC2
  2. RackSpace 云站点
  3. RackSpace 云服务器
  4. PagodaBox(仍处于测试阶段,但不允许 crons):http://www.pagodabox.com/
  5. Go Grid 可扩展网站架构:http://www.gogrid.com/cloud-hosting/cloud-hosting-packages/scalable-website.php (虽然这非常非常昂贵。我希望从单个服务器开始,然后自动配置额外的网络服务器和/或额外的数据库服务器以根据需要处理负载峰值)

如有任何提示,我们将不胜感激。

谢谢

最佳答案

我与一家托管公司的技术支持部门进行了交谈。他看起来不像 super 极客,但他给了我这个建议:创建多个网络服务器和多个数据库服务器。方法如下:

  • 多个网络服务器:他说你应该加载你的图像 多个服务器上的应用程序。最初启动1台服务器。如果 负载高,启动另一个图像。负载均衡器会 自动开始向您的网络的这个新实例发送查询 服务器。
  • 数据库服务器:创建多个数据库服务器。 1个主人和几个 奴隶。

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

  1. session 处理:他说修改您的 PHP 代码,以便将 session 存储在“DB”中。

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

就是这样。真的,是这个吗?或者您认为还有其他事情需要处理?

此外,创建多个数据库服务器实例(主从)。只写给主人。我需要至少有两 (2) 个数据库服务器始终运行。 如果负载不高,我岂不是无缘无故地为额外的数据库服务器付费?

关于database-design - LAMP 托管在 AWS 云上——要重写哪些 PHP 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7329751/

相关文章:

amazon-web-services - 如何从 Amazon elasticsearch 服务访问 Kibana?

amazon-web-services - 打包机构建在最后一个命令上挂起

iis - 如何使用 IIS7 服务器在亚马逊 EC2 Windows 实例上托管域名

http - 云中的 Web 应用程序作为主要公司 URL 的子文件夹

rabbitmq - 如何托管 MassTransit 和 RabbitMq

database - 从同一张 table 上的两个不同点自动递增?

mysql - 数据库中的一对一关系

windows - 用于加密 Azure 服务包的加密有多可靠?

mongodb - 需要简单解释 Arbiter 在给定的 mongoDB 副本集中的角色

mysql - 用于国际化的高效 MYSQL DB 结构