我正在开发一个托管在 EC2 上的 Web 服务,并且需要运行不同数量的实例,具体取决于负载。我们已经启动并运行了基本服务,但我们正在努力解决的问题之一是配置和启动 Windows 实例所需的时间(我们正在使用一些仅在 Windows 上运行的第三方工具)。我已经看到这需要 10 分钟到相当惊人的 45 分钟。
有人对如何加快 EC2 实例的启动有任何提示吗?例如,由于 Windows 服务器的 AMI 比 Linux AMI 大,我想知道是否有一件事是确保包含 AMI 的 S3 存储桶位于启动实例的同一区域中,这大概会使配置新实例更快。
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,具体取决于您的应用程序,尤其是出于开发目的。避免在启动时更改主机名的非系统准备的 m1.large 映像可以在大约 2 分钟内启动,这一点也不错。
目前,据我所知,这是您在 Amazon EC2 上使用 Windows 所能做的最好的事情,但这确实还不错。如果您能够根据平均使用模式预测近 10 分钟的未来,您应该能够启动额外的实例并处理额外的负载。
我昨晚安装了 3 个普通 Windows 2003 服务器实例。前两个花了大约 45 分钟,第三个,大约一个小时后,花了整整 2 个小时才准备好!
那些根本没有任何东西,没有任何 S3 使用。我怀疑除了等待亚马逊随着时间的推移提高部署速度之外,还有什么方法可以加快这一基本步骤。因此,我得出的结论是,预计会有一定的延迟,Kurt 的建议是好的,即保留 1 或 2 个已经准备好的备用。
您可以做的另一件事是多次创建您的 AMI 类型的新实例并对其计时。然后尝试使用您的 S3 存储几次,看看会增加多少时间。我假设可用区域应该在图像和 S3 之间匹配,尽管我不知道这会产生多少时间差异。
一旦您确定了配置的最长时间,请将负载/使用情况提前这么多分钟。
有一个最小的系统,尽可能多地保留在 EBS 中可能会有所帮助吗?或者也许采用 Apache 风格的方法并运行一两个备用?
我们遇到了这个确切的问题,但以一种非常严重的方式——我们的新初创公司将 Amazon EC2 扩展到虚拟实验室环境(多用户、策略、共享等),因此我们需要加快启动时间Windows 机器。我们最大的决定是在我们的应用程序中仅支持基于 EBS 的卷,因为它们是唯一可以在 5-10 分钟内启动的卷。在我们的测试中,我们发现实例存储启动时间差异很大,有时会花费过多的时间,这使得它们对我们毫无用处。
Simon @ LabSlice EC2 上的虚拟实验室管理