我们正在考虑将我们的网站迁移到 Amazon EC2。
亚马逊云背后的基本思想似乎是:“需要更多 RAM?给你。需要硬盘?当然,给你。”等等。
但亚马逊似乎正在推动实例数量,而不是实例参数(RAM,磁盘等)作为其扩展工作的方式。
“Amazon EC2 提供了真正弹性的计算环境。Amazon EC2 可让您在几分钟内(而不是几小时或几天)增加或减少容量。您可以同时委托一个、数百个甚至数千个服务器实例。”http://aws.amazon.com/ec2/faqs/#How_quickly_can_I_scale_my_capacity_both_up_and_down
那么,如果我的网站在单个实例上运行,并且该实例开始达到某些限制,那么第二个实例将如何提供帮助?它们是否自动:共享相同的 IP 地址、执行负载平衡、同步写入数据?
或者我误解了什么?谢谢。
答案1
使用 EC2,您可以(在某种程度上)水平扩展(添加更多实例)和垂直扩展(转到更大的实例) - 但是,后者不能自动完成。
实例之间几乎没有任何固有的共享 - 它们运行自己的操作系统,拥有自己的内存、自己的存储和自己的 IP。像对待任何 VPS 一样对待它们 - 只是使用更自动化的配置系统。
EC2 与大多数 VPS 解决方案不同的一点是它能够添加存储。这可以在不停止实例的情况下完成,以“添加新卷”的形式完成(例如,您可以拥有 /dev/xvda,然后添加 /dev/xvdb 等)。
您可以通过以下方式转到更大的实例:停止(而不是终止)实例使用 ec2-modify-instance-attribute i-xxxxxx -t 更改实例类型启动实例
对于可扩展性的所有其他方面,您都需要自己处理 - 您必须设计您的应用程序以利用 Amazon 提供的功能:弹性 IP - 尽管底层实例发生变化,但仍提供单一恒定的公共 IP 弹性负载均衡器 - 在实例之间分配请求 EBS 卷 - 用于持久存储 EC2 实例 - 用于计算能力 S3 和 Cloudfront - 用于内容交付 RDS - 用于 AWS 管理的 MySQL 数据库(但没有内置的可扩展性)
AWS 绝对不会为您做所有事情 - 它不是可以自动获取任何应用程序并立即让其扩展的解决方案,但它确实提供了一个框架,您可以在此构建一个可轻松扩展的应用程序。
您可以随意配置额外的服务器 - 与现有的服务器相同,也可以与现有的服务器不同,并且如果您愿意,AWS 会根据多个指标(例如负载)增加/减少实例数量。
您可以构建磁盘阵列、设置网络文件系统、将实例联网在一起(VPC)以及执行构建可扩展架构所需的几乎所有功能。
在 AWS 上进行设置的根本原因至少部分在于每个“实例”都是预定义的虚拟机。要修改虚拟机的规格,无论如何都需要您停止并启动它。亚马逊提供了各种各样的实例类型供您选择,但除此之外,您无法自定义实例类型的 CPU/RAM。此外,水平扩展克服了单台机器的限制(例如,任何大型网站都无法在一台服务器上运行,无论规模有多大) - 并避免了单点故障。可以说,如果您需要的功能超过其最大实例所提供的功能,那么无论您是否在 AWS 上运行,水平扩展都可能是您的解决方案。
答案2
它们是否自动:共享同一个ip地址,执行负载平衡,同步写入数据?
简短的回答:不,但是他们可以。
对于大多数需要增加容量的服务,您有两种选择 - 扩大规模或扩大规模。
我不会在这里讲得太详细,因为我正在重复一篇关于这个主题的维基百科文章(http://en.wikipedia.org/wiki/Scale_out#Scale_horizontally_vs._vertically),但扩大规模正如您最初建议的那样,添加 CPU/RAM/磁盘,而扩大规模则会增加额外的节点。
横向扩展的优势在于,通过适当的拓扑,您可以在不中断正在运行的服务的情况下增加容量。这通常是通过在网络层(负载平衡器或集群管理器)中实现智能来实现的,它可以在节点之间分配工作,或者在应用程序中执行类似的工作。
在大多数情况下(当然是在 EC2 上),扩大规模需要关闭节点(实例)来更改节点类型,这会导致您的服务停机,除非您已经有多个实例准备好接管。
亚马逊致力于扩展,并拥有诸如弹性负载均衡器之类的实例,它可以在您的节点之间分配流量,并具有在负载达到阈值时自动配置新实例的功能,您当然可以使用此功能来增加网站的容量。
当然,这一切都取决于您需要的服务可用性、您想要的性能、您要花多少钱以及您的应用程序是否可以扩展到多个节点。通常,当您进行扩展(Web 应用程序)时,您要做的第一件事就是在节点之间实现某种共享存储(网络存储或集群文件系统)以及数据库同步或共享数据库。