本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 Auto Scaling 组设置原定设置实例预热
CloudWatch 收集和汇总您的 Auto Scaling 实例中的使用情况数据,例如CPU和网络 I/O。您可以使用这些指标来创建扩缩策略,以随着所选指标值的增减调整 Auto Scaling 组中的实例数量。
您可以指定实例在达到 InService
状态后等待多长时间才能向聚合指标提供使用数据。这一指定的时间称为默认实例预热。此项可防止动态扩缩受到尚未处理应用程序流量,并且可能暂时存在计算资源使用率较高的单个实例的指标影响。
为了优化目标跟踪扩缩策略和步进扩缩策略的性能,强烈建议您启用并配置默认实例预热功能。默认情况下,将不会启用或配置此项。
启用默认实例预热时,请记住,如果自动扩缩组设置为使用实例维护策略,或者使用实例刷新来替换实例,则可以防止实例在完成初始化之前计入最小运行正常百分比。
扩缩性能注意事项
对于大多数应用程序来说,拥有一个适用于所有功能的默认实例预热时间(而不是不同功能使用不同的预热时间),是非常有用的。例如,如果您未设置默认实例预热,则实例刷新功能将使用运行状况检查宽限期作为默认预热时间。如果您有任何目标跟踪扩缩策略和步进扩缩策略,这些策略会使用为默认冷却时间设置的值作为默认预热时间。如果您有任何预测性扩展策略,则这些策略没有默认预热时间。
当实例正在预热时,仅当未预热实例的指标值大于策略的警报阈值上限(或目标跟踪扩缩策略的目标利用率)时,您的动态扩缩策略才会横向扩展。如果需求下降,横向缩减将变得更加保守,以保护应用程序的可用性。这样可以阻止动态扩缩的横向缩减活动,直到新实例完成预热。
在扩展时,Amazon A EC2 uto Scaling 在决定向该组添加多少实例时,会将正在预热的实例视为组容量的一部分。因此,需要添加相似容量的多个警报违规会导致一次扩缩活动。旨在持续横向扩展,但不会过度扩缩。
如果未启用默认实例预热,则实例在向其发送指标 CloudWatch 并将其计入当前容量之前等待的时间将因实例而异。因此,与正在发生的实际工作负载相比,可能无法预测您的扩缩策略的执行情况。
例如,假设一个具有重复 on-and-off工作负载模式的应用程序。预测性扩缩策略用于对是否增加实例数量做出反复决策。由于预测性扩展策略没有默认预热时间,因此这些实例会立即开始为聚合指标做出贡献。如果这些实例在启动时资源使用量较高,那么添加实例可能会导致聚合指标出现峰值。这可能会影响使用这些指标的任何动态扩缩策略,具体取决于使用量需要多长时间才能稳定下来。如果突破了动态扩缩策略的警告阈值上限,则该组的大小会再次增加。在新实例预热期间,横向缩减活动将被阻止。
选择默认的实例预热时间
设置原定设置实例预热的关键是确定实例需要多长时间才能完成初始化,以及资源消耗在达到 InService
状态后需要多长时间才能稳定下来。选择实例预热时间时,尝试优化平衡采集合法流量的使用数据与尽量减少与启动时的临时使用峰值相关的数据采集。
假设您有一个附加到 Elastic Load Balancing 负载均衡器的自动扩缩组。当新实例完成启动后,它们将在进入 InService
状态之前注册到负载均衡器。在实例进入 InService
状态之后,资源消耗仍然可能会经历暂时的高峰,然后才会逐渐稳定下来。例如,与无需下载大型资产的轻量级 Web 服务器相比,对于必须下载并缓存大型资产的应用程序服务器,其资源消耗将需要更长的时间才能稳定。实例预热提供了稳定资源消耗所需的时间延迟。
重要
如果您不确定需要多长时间预热,则可以从 300 秒开始。然后逐渐减少或增加该时间,直到您的应用程序获得最佳扩缩性能为止。可能需要执行几次此操作才能得出正确设置。或者,如果您的任何扩缩策略有自己的预热时间(EstimatedInstanceWarmup
),则可以使用此值开始。有关更多信息,请参阅 查找具有先前设置实例预热时间的扩缩策略。
对于需要在启动时运行配置任务或脚本的使用案例,应考虑使用生命周期挂钩。生命周期挂钩可以将实例投入使用的时间延迟到实例完成初始化之后。如果引导启动脚本需要一段时间才能完成,则生命周期钩子将特别有用。如果您添加了生命周期挂钩,则可以降低原定设置实例预热的值。有关使用生命周期钩子的更多信息,请参阅 Amazon EC2 Auto Scaling 生命周期钩子。