有人能帮我找出一个有效的自动缩放configuration?

这是我第一次发布一个networking应用程序。 我将使用Nginx的Django和其他一些已经被pipe理的脚本。 我想知道我可以使用哪种自动缩放策略。

现在,我正在玩免费的EC2微型实例。 效果很好。

我不确定我是否能负担得起专用的RDS。 我正在寻找最具成本效益的configuration。 我正在考虑使用Load Balancer设置的微型实例进行自动扩展,但是我还没有想出如何在所有实例中同步数据库。

我也在考虑像App Engine和Heroku的其他select,但我不认为它会给我像自由VM。 有没有一个正常的虚拟机可以自动缩放没有太多担心的PaaS?

另外,还有一些图表可以近似告诉我Micro,Small等实例可以承受多lessstream量。

有人能发光吗?

缩放应用程序是您必须devise应用程序才能做到的事情 – 不pipe平台如何。

一些考虑包括:

  • 使文件(如上传,源代码更改等)可用于所有节点
  • 在所有节点之间共享会话信息
  • 在多个节点上复制数据库
  • 确定节点的健康状况以及何时调出新的节点

我build议最好的办法是首先卸载你的数据库到另一个实例。 如果您的数据库和应用程序在不同的实例上运行,您可以独立地进行扩展,并且可以更轻松地pipe理问题。 (看到这篇文章 – 有点旧,但没有更less的有效)。

其次,你想扩大和扩大。 使用EC2,您可以从更大的实例types中获得更好的性能 – 就性能而言,小型实例优于3个微型实例。 我的build议是扩展到两个节点(用于故障转移),然后在继续向外扩展之前开始切换较大实例types的节点(在更长期的基础上)。 尽pipe如此,保持自动扩展function,以便您的应用程序可以随时处理额外的负载。

分别扩展您的数据库 – 通常您的应用程序将需要比您的数据库更多的节点(您的数据库可能受益于更高的内存实例)。 另外请记住,RDS不会为您进行缩放。

亚马逊没有提供“stream量”图 – 因为这完全取决于您的应用程序(处理器密集型的高度dynamic应用程序可以提供比在同一硬件上提供静态页面的请求less得多的请求)。 但是,这里提供了一个有些“主观”的比较。 值得强调的一点是“I / O性能”。 这个描述符包括networking带宽和磁盘I / O。 较小的实例更容易受到性能变化(特别是可用带宽)的影响。 由于EBS卷需要networking带宽,这也会影响其性能。

至于微型实例 – 只要应用程序需要,就移动到一个小实例。 你会发现,每当你在微处理器上“爆炸”CPU,就会有后续的性能损失(由顶部的'steal'值表示)。 其他实例(你不拥有)可以在微型实例上使用大量的CPU)。

还值得一提的是,您可以将自动缩放组的大小设置为“1”,这样可以让实例在不可用时重新启动。 (但是,出现的问题是,从新快照启动时,将当前数据重新放回新实例)。

如果您可以使用MySQL集群(它使用不同的存储引擎 – ndbcluster)或带有分区的NoSQL解决scheme,那么与在MySQL中使用传统的主从复制相比,您可以更轻松地自动扩展数据库。 (还有另外一个解决scheme据说已经取得了一些成功,但我现在可能不会build议 – 使用分布式文件系统,特别是GlusterFS来存储数据库 – 文件系统pipe理文件locking和分发,并且每个实例访问根据需要添加数据库 – 添加更多实例时会遇到问题,但可能会看到2节点数据库集群取得成功)。

因此,实际行动可能是:

  1. 从一个微型实例开始,它有你的数据库和应用程序
    • 将您的数据库分为一个实例和您的应用程序到第二个实例
  2. 在您的应用程序实例上设置自动缩放。
  3. 添加第二个应用程序节点
  4. 添加第二个数据库节点并在节点之间configuration复制(如果您select使用MySQL集群或NoSQL解决scheme,则应该也可以设置自动缩放)。
  5. 一次将一个实例升级到更大的实例大小,因为需求值得考虑

(你应该发现,对于大多数站点来说,2个更大的实例足够运行你的数据库,特别是如果你正确地实现了caching,但是根据需要添加一个附属的slave应该不会太麻烦)。

以上的行动过程可以很好地解决扩展问题,但是直到第4步(即如果数据库节点失败,应用程序停止运行)它确实有一个单一的故障点。 一个更加困难的设置,但更具弹性的,会看到你的应用程序和数据库都在同一个节点上,然后用MySQL复制(和MySQL代理来处理来自负载均衡器的请求)设置该节点的两个副本 – 你需要自己pipe理故障转移(像Heartbeat / Pacemaker),然后直接转到4个节点(2个数据库,2个应用程序)。