通过实例计数而非实例参数来扩展Amazon EC2的原因是什么?

我们正在考虑将我们的网站移至Amazon EC2。

亚马逊云背后的基本理念似乎是:“需要更多的内存?你懂了,硬盘?当然,在这里你走了。 等等。

但亚马逊似乎是推动实例计数,而实例参数(RAM,磁盘等),作为其缩放工作的方式。

Amazon EC2提供了一个真正的弹性计算环境,Amazon EC2使您能够在几分钟内而不是几小时或几天内增加或减less容量,您可以同时debugging一个,数百甚至数千个服务器实例。“ http://aws.amazon。 COM / EC2 /常见问题/#How_quickly_can_I_scale_my_capacity_both_up_and_down

所以,再次,如果我的网站运行在单个实例上,并且该实例开始遇到一些限制,第二个实例将如何帮助? 他们是否自动:共享相同的IP地址,执行负载平衡,同步写入数据?

还是我误解了一些东西? 谢谢。

使用EC2,您可以(在某种程度上)水平(增加更多实例)和垂直(进入更大的实例)进行缩放 – 但是,后者不能自动完成。

实例之间几乎没有内在的共享 – 它们运行自己的操作系统,拥有自己的内存,自己的存储空间以及自己的IP地址。 像任何VPS一样对待它们 – 只需要更多的自动化供应系统。

EC2与大多数VPS解决scheme不同的地方在于能够添加存储。 这可以在不停止实例的情况下完成,以“添加新卷”的forms(例如/ dev / xvda,然后添加/ dev / xvdb等)

您可以通过以下方式转到更大的实例:停止(不终止)实例使用ec2-modify-instance-attribute i-xxxxxx -t更改实例types启动实例

对于可伸缩性的所有其他方面,您必须自行devise您的应用程序,以利用Amazon提供的function:弹性IP – 尽pipe更改底层实例弹性负载平衡器,但可以提供单个常量公共IP – 实例EBS卷 – 用于持久性存储的EC2实例 – 用于计算能力S3和Cloudfront – 用于内容交付RDS – 用于由AWSpipe理的MySQL数据库(虽然没有内置的可伸缩性)

AWS绝对不会为你做所有事情 – 它不是一个自动的解决scheme,可以让任何应用程序立即让它扩展,但它确实提供了一个框架,你可以在这个框架上构build一个易于扩展的应用程序。

您可以随意configuration额外的服务器(与现有服务器相​​同或与之不同),并且AWS会根据您的需要增加/减less许多指标(如负载)上的实例数量。

您可以构build磁盘arrays,设置networking文件系统,将您的实例连接在一起(VPC),并执行构build可伸缩体系结构所需的任何function。

至less部分在AWS上设置的基本原因是因为每个“实例”是一个预定义的虚拟机。 要修改虚拟机的规格,将需要您停止并启动它。 Amazon提供了大量实例types供您select,但除此之外,您无法自定义实例types的CPU / RAM。 此外,水平缩放克服了单个机器的限制(例如,对于任何大型站点在一台服务器上运行,无论多大都是不可想象的),并且避免单点故障。 可以说,如果你需要比他们最大的实例提供的更多的function,横向扩展可能最终成为你的解决scheme,不pipe你是否在AWS上运行。

他们是否自动:共享相同的IP地址,执行负载平衡,同步写入数据?

简答:不,但可以。

对于大多数需要增加容量的服务,您可以select两种方式 – 扩展或扩展。

我不会在这里详细讨论这个问题,因为我重复维基百科关于这个主题的文章( http://en.wikipedia.org/wiki/Scale_out#Scale_horizo​​ntally_vs._vertical ),但是按照你最初的build议, CPU / RAM /磁盘在扩展时增加了额外的节点。

扩展的优点是,通过适当的拓扑结构,您可以添加容量而不会中断正在运行的服务。 这通常是通过在networking层(负载平衡器或集群pipe理器)中有智能来完成的,这个层可以在你的节点之间分配工作,或者在应用中做类似的工作。

在大多数情况下(当然是在EC2上)比较,扩大规模包括closures节点(实例)以更改节点types,从而导致服务中断,除非已经有多个实例准备好接pipe。

亚马逊面向扩展,并有一些实例,如弹性负载平衡器,它可以分配您的节点之间的stream量和function,以自动提供新的实例,当负载达到一个门槛,你当然可以使用这个function来增加你的网站的容量。

当然,这一切都取决于你需要你的服务的可用性,你想要多less性能,你花了多less钱,以及如果你的应用程序可以扩展到多个节点。 通常,在扩展(Web应用程序)时,首先要在节点(networking存储或集群文件系统)和数据库同步或共享数据库之间实现某种共享存储。