我的公司目前正在将几个网站和 PHP Web 应用程序(标准 LAMP 堆栈)从三台内部服务器迁移到 Amazon EC2。由于我们只有三台服务器,因此我们将几个低流量网站与一个高流量 Web 应用程序集群起来,并从同一台服务器为它们提供服务。服务器管理员几乎将之前的架构全部复制到 EC2 实例上,只是增加了实例大小以适应占用该特定实例的最高流量客户端。
如果不是为了部署,这种架构可能还行。只要其中一个站点/应用程序发生变化,就意味着要重新部署整个实例以及它托管的 30 个站点/应用程序,而不是只更新一个。
我们如何以更模块化的方式构建我们的云?每个应用程序是否都应该有自己合适大小的实例?在这种情况下,最佳部署策略是什么?
答案1
您的服务器管理员基本上将您的站点从一个数据中心转移到另一个数据中心。您将 EC2 实例视为传统服务器。现在是时候改变您的想法了。将 EC2 实例视为 Web 应用程序的容器,甚至是 Web 应用程序的一部分,而不仅仅是托管它们的东西。
将网站模块化是个好主意。您可以将网站拆分成每个站点一个 EC2 实例。这样,当您部署更新时,只有该网站会受到影响(无论是好是坏)。
此外,您可以根据每个站点的独特需求,将站点置于适当的负载均衡器和/或自动扩展组之后,以适应负载的变化。
看一下 Elastic Beanstalk。它试图成为网站(PHP、.NET、Ruby 等)的“开箱即用”部署机制。如果一切顺利,您不需要登录到您的实例。根据您的配置,它为每个 Web 应用程序使用一个(或多个)EC2 实例。
缺点是成本:由于使用了更多 EC2 实例,因此您需要支付更多费用。但这是模块化和可靠性的权衡。