我正在开发一个托管在 EC2 上的 Web 服务,需要根据负载运行不同数量的实例。我们已经启动并运行了基本服务,但我们遇到的一个问题是配置和启动 Windows 实例所需的时间(我们正在使用一些只能在 Windows 上运行的第三方工具)。我发现这个过程需要 10 分钟到惊人的 45 分钟。
有人对如何加快 EC2 实例的启动有什么建议吗?由于 Windows 服务器的 AMI 与 Linux AMI 相比很大,因此我想知道是否可以确保包含 AMI 的 S3 存储桶位于启动实例的同一区域中,这可能会使新实例的配置速度更快。
答案1
我昨晚安装了 3 个普通 Windows 2003 服务器实例。前两个花了大约 45 分钟,第三个大约在 1 小时后,花了整整 2 个小时才准备好!
这些根本没有任何内容,也没有任何 S3 使用。除了等待亚马逊随着时间的推移改进部署速度外,我怀疑是否有其他方法可以加快这一基本步骤。因此,我得出结论,一定程度的延迟是可以预料的,而 Kurt 的建议很好,即保留 1 或 2 个已准备好的备用服务器。
您可以做的另一件事是多次创建 AMI 类型的新实例并计时。然后尝试使用 S3 存储几次,看看这会增加多少时间。我假设可用区域应该在图像和 S3 之间匹配,尽管我不知道这会造成多大的时间差异。
一旦确定了最大配置时间,请提前那么多分钟进行负载/使用。
答案2
Amazon Windows 实例在启动时会重新启动,因为“EC2 Config”Windows 服务的默认配置是将您的主机重命名为实例的内部 DNS 名称。重命名主机需要在 Windows 上重新启动。如果您不需要使用实例的内部 DNS 名称,那么禁用 SetComputerName 功能可能会对您有所帮助。Windows 实例还具有无需初始化启动驱动器的优势,您可能已经再次捆绑了配置,从而节省了实例启动时间。所有这些都可以通过 EC2 Windows 配置服务实现。
Windows 配置服务: http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/appendix-windows-config.html
我的 Windows 小型实例通常需要 15-18 分钟才能启动(大型实例启动速度更快)。根据您的要求,您可能能够将所有软件捆绑在 AMI 中,并能够在该时间段内启动并运行所有内容。我理解不将所有内容捆绑到 AMI 中的顾虑,但将所有内容捆绑到生产 AMI 中可能值得缩短启动时间。如果您愿意,请在构建环境中将构建脚本分开。
此外,现在亚马逊已经发布了 EBS 根卷,而不是实例存储根卷。在 EBS 卷上运行的 Windows 小映像启动时间几乎为 5 分钟,而之前则需要近 20 分钟。此外,您无需终止 - 您可以停止/启动它们 - 根据您的设置,这可能会在某些启动脚本中节省几分钟。
本质上,自定义 Windows EC2 配置服务、AMI 并可能使用 EBS 启动卷应该可以将启动时间缩短至近 5 分钟。您可以避免在 EC2 实例启动时运行 sysprep,具体取决于您的应用程序,尤其是出于开发目的。非 sysprepped m1.large 映像可以避免在启动时更改主机名,可以在大约 2 分钟内启动,这还不错。
目前,据我所知,这是在 Amazon EC2 上使用 Windows 所能做到的最好事情,但实际上还不错。如果您能够根据平均使用模式预测未来近 10 分钟的情况,那么您应该能够启动额外的实例并处理额外的负载。
答案3
拥有一个最小系统,在 EBS 中保留尽可能多的资源可能会有帮助吗?或者采取 Apache 风格的方法并运行一两个备用资源?
答案4
我们遇到了同样的问题,但问题非常严重——我们的新启动将 Amazon EC2 扩展到虚拟实验室环境(多用户、策略、共享等),因此我们需要加快 Windows 机器的启动时间。我们最大的决定是在我们的应用程序中仅支持基于 EBS 的卷,因为它们是唯一可以在 5-10 分钟内启动的卷。在我们的测试中,我们发现实例存储的启动时间差异很大,有时需要花费过多的时间,这使得它们对我们来说毫无用处。
Simon @ LabSlice EC2 上的虚拟实验室管理