我们的networking应用程序应该去云或多个VPS?

比方说,我们有一个networking应用程序,并有一个自动化/引擎盖下的过程,更新数据库。 目前,他们都在同一台服务器上运行。

我们希望将批处理过程从apache活动和数据库中分离出来:

  • 服务器1:web服务器 – CPU负载和BW消耗的浮动/浪涌
  • 服务器2:dbserver – 从Web服务器上浮动I / O,以及批处理过程中稳定/繁重的I / O
  • 服务器3:批处理 – 稳定/低CPU负载和稳定/繁重的带宽

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

或者我们应该去云吗? 说亚马逊EC2:设置3 EC2实例真的是矫枉过正,不是吗? 如果我将所有3个“服务器”都转换成1个EC2实例,那么我们是否会获得与3 VPS解决scheme一样多的可靠性? (考虑1个EC2 = 1个VPS 1.6GB 1 / 1.2GHz Opteron / Xeon)

每个解决scheme(1EC2或3VPS)有什么区别/优势?

在您提出的架构中,您并没有真正使用“云”概念(dynamic可扩展) – 您只是运行多个VPS。

所以我的答案是; 如果你这样做,我不认为你有利用通过VPS /专用服务器的亚马逊EC2的任何优势。 事实上,可能存在更多的缺点(例如,难以执行持久性存储,而且我知道您应该在标准VPS中计划磁盘/服务器故障)

扩大答案 – 你可能会得到这三个服务器中的一个完全倾斜,成为瓶颈,而另一个几乎没有做任何事情。

一个更像“云”的架构将是有

使用Elastic Load Balancing的 Web服务器实例。

当它变得忙碌(一些度量如CPU负载/队列/页面加载时间等),你有一个监控过程 ,旋转了另一个Web服务器实例,并将其添加到场。 根据需要重复。 当安静的Web服务器实例可以从农场中删除。

数据库服务器

如果你可以使用亚马逊SimpleDB服务,那么它的所有照顾你。 如果你需要一个更传统的数据库,那么这个系统可能是系统中最难以扩展的部分。 我会在这里方便地跳过这个!

“作业处理”实例

说你的批处理作业存储在某种队列(比如说… 简单队列服务 – SQS )。 批处理服务器从该队列中select作业并处理它们。 如果队列增长超过一定的大小,则会产生更多的“批处理”实例。

您可能会对此非常喜欢,并且在负载较轻的情况下将一些作业运行在Web服务器实例上,并在重的时候转移到专用实例 – 或者您可以想象的任何混合。 但要真正使用“云”概念,您应该拥有一个支持向您的池中dynamic添加X个服务器的体系结构。

这种方法的海报孩子可能是Animoto这是一个服务,把你的照片,混合一些音乐和吐出一个video。 一个CPU密集型工作,非常适合EC2实例池。 查看图表,在几天之内从50台服务器到3500台服务器 – 这就是“云”计算的力量。

这是我个人的意见 – 所以如果我误导了别人,我可以自由地不同意或纠正我的观点。

“云”只是重新命名的VPS。 亚马逊的任何EC2实例都将稳定并提供与VPS一样的处理能力(取决于规格)。 亚马逊的平台提供的好处是,他们的EC2实例很容易创build,复制和发布。 如果您的系统是为了利用这些function而devise的,那么亚马逊将是一个很好的select。 如果您计划将所有任务加载到一个系统上,您将看不到移到“亚马逊云”的好处。

另外,我会说这两个解决scheme提供相同数量的可靠性。 如果这些服务器中的任何一个出现故障,那么整个系统就会停机。 然而,将服务器拆分成不同的服务器会给你带来性能上的好处,但是它不会提供任何额外的可靠性 – 相反, 它增加了系统的故障点。

如果可靠性是你的目标,我会考虑设置多个Web和/或数据库服务器故障转移。 如果速度是你的目标,我会分成3个VPS(或专用服务器)。 如果您有足够的时间或可扩展性和可靠性目标,那么使用Amazon EC2(使用E lastic负载平衡 )devise您的系统也可以很好地工作。