我们的网络应用程序应该使用云端还是多个 VPS?

我们的网络应用程序应该使用云端还是多个 VPS?

假设我们有一个 Web 应用,并且有一个自动/后台进程来更新数据库。目前,它们都在同一台服务器上运行。

我们希望将批处理过程与 apache 活动和数据库分开:

  • 服务器 1:网络服务器- CPU 负载和 BW 消耗浮动/激增
  • 服务器 2:数据库服务器- 来自网络服务器的浮动 I/O 和来自批处理的稳定/重 I/O
  • 服务器 3:批处理- 稳定/低 CPU 负载和稳定/高 BW

一种解决方案是设置 3 个 VPS(例如在 Slicehost/Rackspace)。

或者我们应该使用云?比如说 Amazon EC2:设置 3 个 EC2 实例确实有点过头了,不是吗?如果我将所有 3 个“服务器”移植到 1 个 EC2 实例中,我们是否能获得与 3 个 VPS 解决方案一样高的可靠性?(考虑 1 个 EC2 = 1 个 VPS 1.6GB 1/1.2 GHz Opteron/Xeon)

每种解决方案(1EC2 或 3VPS)有哪些区别/优势?

答案1

您并没有真正利用您所提议的架构中的“云”概念(动态可扩展) - 您只是运行多个 VPS。

所以我的答案是:如果你选择这种方式,我认为使用 Amazon EC2 比使用 VPS/专用服务器没有任何优势。事实上,可能存在更多缺点(例如,更难进行持久存储,是的,我知道你应该标准 VPS 中的磁盘/服务器故障计划)

扩展答案 - 您可能会发现这 3 台服务器中的一台全速运行并成为瓶颈,而另一台几乎什么也不做。

更像云的架构应该是

Web 服务器实例使用弹性负载平衡

当它变得繁忙时(某些指标,如 CPU 负载/队列/页面加载时间等),你有一个监控过程启动另一个 Web 服务器实例并将其添加到服务器场。根据需要重复此操作。当一切平静下来时,可以从服务器场中删除 Web 服务器实例。

数据库服务器

如果你可以使用亚马逊 SimpleDB服务,那么一切都为你搞定了。如果你需要更传统的数据库,那么这可能是系统中最难以易于扩展的方式构建的部分。我将在这里方便地跳过这一点!

“作业处理”实例

假设您的批处理作业存储在某种队列中(比如说......简单队列服务 - SQS)。批处理服务器从该队列中挑选作业并进行处理。如果队列超出一定大小,则可以启动更多“批处理”实例。

您可以对此进行非常巧妙的利用,在负载较轻时让一些作业在 Web 服务器实例上运行,在负载较重时转到专用实例 - 或者您可以想象的任何组合。但要真正使用“云”概念,您应该拥有一个支持动态向池中添加 X 个服务器的架构。

这种方法的典型代表可能是阿尼莫托这是一项服务,可以拍摄照片,混合音乐并制作视频。这是一项 CPU 密集型任务,非常适合 EC2 实例池。查看图表,几天之内服务器数量从 50 台增加到 3500 台 - 这就是“云”计算的威力。

答案2

这是我的个人观点——所以如果我的观点有误,其他人可以随意反对或纠正我的观点。

“云”只是重新命名的 VPS。亚马逊的任何 EC2 实例都将像 VPS 一样稳定,并提供与 VPS 一样多的处理能力(取决于规格)。亚马逊平台提供的好处是,他们的 EC2 实例易于创建、复制和启动。如果您的系统旨在利用这些功能,那么亚马逊将是一个不错的选择。如果您计划将所有任务加载到一个系统上,那么您将看不到迁移到“亚马逊云”的任何好处。

此外,我想说的是,这两种解决方案都提供了相同的可靠性。如果任何一台服务器出现故障,那么整个系统都会出现故障。但是,拆分成单独的服务器会给你带来性能优势,但它不会提供任何额外的可靠性 - 相反;它为系统增加了故障点。

如果您的目标是可靠性,我会考虑设置多个具有故障转移功能的 Web 和/或数据库服务器。如果您的目标是速度,我会将其拆分为 3 个 VPS(或专用服务器)。如果您有时间或有可扩展性和可靠性的目标,那么设计您的系统以使用 Amazon EC2(使用 Eelastic 负载平衡) 也能很好地发挥作用。

相关内容