COST09-BP03 动态供应资源
资源按计划预置。这种预置可以基于需求(例如通过自动扩缩来实现),也可以基于时间(需求可以预测,基于时间提供资源)。这些方法可以尽可能减少过度预置或预置不足的情况。
未建立这种最佳实践的情况下暴露的风险等级: 低
实施指导
AWS 客户可以通过多种方式增加可供应用程序使用的资源,并提供资源以满足需求。其中一个选项是使用 AWS Instance Scheduler,其可以自动启动和停止 Amazon Elastic Compute Cloud(Amazon EC2)以及 Amazon Relational Database Service(Amazon RDS)实例。另一个选项是使用 AWS Auto Scaling,该服务让您可以根据应用程序或服务的需求,自动扩展计算资源。根据需求提供资源,这样您就只需要为使用的资源付费,并且仅在有需要时启动资源,在不需要时终止资源,从而降低成本。
AWS Instance Scheduler

使用 AWS Instance Scheduler 优化成本。
您还可以通过简单的用户界面(UI)使用 AWS Systems Manager 快速设置,轻松地跨账户和区域来为您的 Amazon EC2 实例配置计划。您可以使用 AWS Instance Scheduler 来调度 Amazon EC2 或 Amazon RDS 实例,也可以停止和启动现有实例。然而,您不能停止和启动属于Auto Scaling组(ASG)或管理 Amazon Redshift 或 Amazon OpenSearch Service 等服务的实例。Auto Scaling组对组内创建的实例有自己的计划。
AWS Auto Scaling
您可以通过多种扩展选项来扩展Auto Scaling组:
-
始终保持当前的实例水平
-
手动扩展
-
根据计划扩展
-
根据需求扩展
-
使用预测性扩缩
Auto Scaling策略各不相同,可以分为动态扩缩策略和计划扩缩策略。动态策略为手动扩缩或动态扩缩,这可以是计划扩缩或者预测性扩缩。您可以针对动态、计划和预测性扩缩使用扩缩策略。您还可以使用来自 Amazon CloudWatch
您可以使用 AWS Auto Scaling,也可以通过 AWS API 或 SDK
Elastic Load Balancing(Elastic Load Balancing)
典型的指标可以是标准 Amazon EC2 指标,例如 CPU 利用率、网络吞吐量以及 Elastic Load Balancing 观察到的请求和响应延迟。如果可能,应该使用指示客户体验的指标,通常是来自工作负载中的应用程序代码的自定义指标。在本文档中,为了详细说明如何动态满足需求,我们将Auto Scaling划分为两类:基于需求的供应模型和基于时间的供应模型,并分别深入探讨这两种模型。
基于需求的供应: 利用云的弹性来提供资源,根据近实时的需求状态来满足不断变化的需求。对于基于需求的供应,请使用 API 或服务功能,以编程方式改变架构中云资源的数量。这使您能够在架构中扩展组件,并在需求高峰期间增加资源数量以保持性能,也可以在需求量降低时减少容量以降低成本。

基于需求的动态扩缩策略
-
简单/分步扩展: 监控指标,按照客户定义的步骤手动添加/删除实例。
-
目标跟踪: 类似恒温器的控制机制,可自动添加或删除实例,以维护客户定义的目标指标。
当构建基于需求的方法时,请注意两个重要事项。首先,了解您必须以多快的速度预置新资源。其次,了解供应和需求之间的差额将发生变化。您必须准备好应对需求变化的速度,并准备好应对资源故障。
基于时间的供应: 基于时间的方法可以协调资源容量以满足可预测或时间明确定义的需求。此方法通常不依赖资源的利用水平。基于时间的方法可以确保资源在需要的特定时间可用,并且提供时不会因启动流程和系统或一致性检查而发生延迟。使用基于时间的方法,您可以在繁忙时段提供额外的资源或增加容量。

基于时间的扩缩策略
您可以使用计划性或预测性自动扩缩,实施基于时间的方法。工作负载可以在定义的时间按计划扩展或缩减(例如办公时间开始时),从而确保用户就位或需求增加时资源可用。预测性扩缩使用模式进行横向扩展,而计划扩展在预先定义的时间进行横向扩展。您也可以将 基于属性的实例类型选择(ABS)策略 用于Auto Scaling组,该策略允许您将实例要求表示为一组属性,例如 vCPU、内存和存储。这还允许您在新一代实例类型发布时自动使用它们,并通过 Amazon EC2 竞价型实例访问更广泛的容量。Amazon EC2 实例集和 Amazon EC2 Auto Scaling 会选择并启动符合指定属性的实例,无需手动选择实例类型。
您还可以利用 AWS API 与 SDK
当采用基于时间的方法进行架构设计时,请注意两个重要事项。首先,使用模式的一致性如何? 其次,如果模式发生更改会产生什么影响? 您可以通过两种方式提高预测的准确性:监控工作负载和使用商业智能。如果您发现使用模式发生重大更改,可以调整时间,以确保提供覆盖范围。
实施步骤
-
配置计划扩缩: 对于可预测的需求变化,基于时间的扩缩可以及时提供正确的资源量。如果资源创建和配置的速度不够快,无法响应需求变化,也可使用这种方法。根据工作负载分析,使用 AWS Auto Scaling 配置计划扩缩。要配置基于时间的计划,您可以使用预测性扩缩而不是计划扩缩,根据预期或可预测的负载变化,提前增加Auto Scaling组中的 Amazon EC2 实例数量。
-
配置预测性扩缩: 通过预测性扩缩,您可以根据流量的每日和每周模式,提前增加Auto Scaling组中的 Amazon EC2 实例数量。如果您有定期的流量高峰和需要很长时间才能启动的应用程序,则应该考虑使用预测性扩缩。与本质上属于被动应对的单纯动态扩缩相比,预测性扩缩可帮助您在预测的负载到来之前初始化容量,从而更快地扩展。例如,如果用户在开始上班时开始使用工作负载,而在下班后不再使用,那么预测性扩缩可以在上班之前增加容量,这就消除了动态扩缩对流量变化作出反应的延迟。
-
配置动态自动扩缩: 要根据活动的工作负载指标配置扩缩,请使用Auto Scaling。使用分析并配置Auto Scaling以在正确的资源级别上启动,并确认工作负载在所需的时间内扩展。您可以在单个Auto Scaling组中启动并自动扩展按需型实例和竞价型实例的实例集。除了获得使用竞价型实例的折扣外,您还可以使用预留实例或实惠配套来享受常规按需型实例定价的折扣率。将所有这些因素相结合,有助于您优化 Amazon EC2 实例的成本节约,并帮助您获得应用程序所需的规模和性能。
资源
相关文档:
相关视频:
相关示例: