我公司目前正在将三个内部服务器上的几个网站和PHP Web应用程序(标准LAMP堆栈)迁移到Amazon EC2。 因为我们只有三台服务器,所以我们将几个低stream量的网站集中在一起,可能只有一个高stream量的Web应用程序,并从同一台服务器上提供服务。 服务器pipe理员几乎将以前的体系结构批量复制到EC2实例上,只是简单地增加了实例大小来考虑占用该特定实例的最高stream量客户端。
如果不是部署,这个架构可能没问题。 任何时候这些网站/应用程序之一发生变化,意味着重新部署整个实例,以及它所托pipe的30个网站/应用程序,而不是只更新一个。
我们怎样才能以更模块化的方式构build我们的云? 每个应用程序是否应该有自己的大小适中的实例? 在这种情况下部署的最佳策略是什么?
您的服务器pipe理员已经基本上将您的网站从一个数据中心转移到另一个。 您正在将EC2实例视为传统服务器。 现在是时候改变你的想法。 将EC2实例想象成您的Web应用程序的容器,甚至是Web应用程序的一部分,而不仅仅是您托pipe它们的东西。
模块化您的网站是一个好主意。 您可以将它们拆分为每个站点的一个EC2实例。 这样,当您部署更新时,只有该网站会受到影响(好或坏)。
另外,您可以根据每个站点的独特要求,将站点放在适当的负载平衡器和/或自动扩展组的后面,以适应负载的变化。
看看Elastic Beanstalk。 它试图成为一个“开箱即用”的网站部署机制(PHP,.NET,Ruby等)。 如果一切顺利的话,你不需要login到你的实例。 它根据您的configuration为每个Web应用程序使用一个(或多个)EC2实例。
这样做的缺点是成本:您将花费更多,因为您使用更多的EC2实例。 但这是模块化和可靠性的折衷。